Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(984)

Side by Side Diff: fpdfsdk/src/javascript/JS_GlobalData.cpp

Issue 1265503005: clang-format all pdfium code. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: sigh Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../../core/include/fdrm/fx_crypt.h" 7 #include "../../../core/include/fdrm/fx_crypt.h"
8 #include "../../include/javascript/JavaScript.h" 8 #include "../../include/javascript/JavaScript.h"
9 #include "../../include/javascript/IJavaScript.h" 9 #include "../../include/javascript/IJavaScript.h"
10 #include "../../include/javascript/JS_GlobalData.h" 10 #include "../../include/javascript/JS_GlobalData.h"
11 11
12 #define JS_MAXGLOBALDATA (1024 * 4 - 8) 12 #define JS_MAXGLOBALDATA (1024 * 4 - 8)
13 13
14 /* --------------------- CJS_GlobalVariableArray --------------------- */ 14 /* --------------------- CJS_GlobalVariableArray --------------------- */
15 15
16 CJS_GlobalVariableArray::CJS_GlobalVariableArray() 16 CJS_GlobalVariableArray::CJS_GlobalVariableArray() {}
17 { 17
18 } 18 CJS_GlobalVariableArray::~CJS_GlobalVariableArray() {
19 19 Empty();
20 CJS_GlobalVariableArray::~CJS_GlobalVariableArray() 20 }
21 { 21
22 Empty(); 22 void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) {
23 } 23 Empty();
24 24 for (int i = 0, sz = array.Count(); i < sz; i++) {
25 void CJS_GlobalVariableArray::Copy(const CJS_GlobalVariableArray& array) 25 CJS_KeyValue* pOldObjData = array.GetAt(i);
26 { 26 ASSERT(pOldObjData != NULL);
27 Empty(); 27
28 for (int i=0,sz=array.Count(); i<sz; i++) 28 switch (pOldObjData->nType) {
29 { 29 case JS_GLOBALDATA_TYPE_NUMBER: {
30 CJS_KeyValue* pOldObjData = array.GetAt(i); 30 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
31 ASSERT(pOldObjData != NULL); 31 pNewObjData->sKey = pOldObjData->sKey;
32 32 pNewObjData->nType = pOldObjData->nType;
33 switch (pOldObjData->nType) 33 pNewObjData->dData = pOldObjData->dData;
34 { 34 Add(pNewObjData);
35 case JS_GLOBALDATA_TYPE_NUMBER: 35 } break;
36 { 36 case JS_GLOBALDATA_TYPE_BOOLEAN: {
37 CJS_KeyValue* pNewObjData = new CJS_KeyValue; 37 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
38 pNewObjData->sKey = pOldObjData->sKey; 38 pNewObjData->sKey = pOldObjData->sKey;
39 pNewObjData->nType = pOldObjData->nType; 39 pNewObjData->nType = pOldObjData->nType;
40 pNewObjData->dData = pOldObjData->dData; 40 pNewObjData->bData = pOldObjData->bData;
41 Add(pNewObjData); 41 Add(pNewObjData);
42 } break;
43 case JS_GLOBALDATA_TYPE_STRING: {
44 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
45 pNewObjData->sKey = pOldObjData->sKey;
46 pNewObjData->nType = pOldObjData->nType;
47 pNewObjData->sData = pOldObjData->sData;
48 Add(pNewObjData);
49 } break;
50 case JS_GLOBALDATA_TYPE_OBJECT: {
51 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
52 pNewObjData->sKey = pOldObjData->sKey;
53 pNewObjData->nType = pOldObjData->nType;
54 pNewObjData->objData.Copy(pOldObjData->objData);
55 Add(pNewObjData);
56 }
57 case JS_GLOBALDATA_TYPE_NULL: {
58 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
59 pNewObjData->sKey = pOldObjData->sKey;
60 pNewObjData->nType = pOldObjData->nType;
61 Add(pNewObjData);
62 }
63 }
64 }
65 }
66
67 void CJS_GlobalVariableArray::Add(CJS_KeyValue* p) {
68 array.Add(p);
69 }
70
71 int CJS_GlobalVariableArray::Count() const {
72 return array.GetSize();
73 }
74
75 CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const {
76 return array.GetAt(index);
77 }
78
79 void CJS_GlobalVariableArray::Empty() {
80 for (int i = 0, sz = array.GetSize(); i < sz; i++)
81 delete array.GetAt(i);
82 array.RemoveAll();
83 }
84
85 /* -------------------------- CJS_GlobalData -------------------------- */
86
87 #define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data"
88 #define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data"
89 #define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data"
90
91 static const uint8_t JS_RC4KEY[] = {
92 0x19, 0xa8, 0xe8, 0x01, 0xf6, 0xa8, 0xb6, 0x4d, 0x82, 0x04, 0x45, 0x6d,
93 0xb4, 0xcf, 0xd7, 0x77, 0x67, 0xf9, 0x75, 0x9f, 0xf0, 0xe0, 0x1e, 0x51,
94 0xee, 0x46, 0xfd, 0x0b, 0xc9, 0x93, 0x25, 0x55, 0x4a, 0xee, 0xe0, 0x16,
95 0xd0, 0xdf, 0x8c, 0xfa, 0x2a, 0xa9, 0x49, 0xfd, 0x97, 0x1c, 0x0e, 0x22,
96 0x13, 0x28, 0x7c, 0xaf, 0xc4, 0xfc, 0x9c, 0x12, 0x65, 0x8c, 0x4e, 0x5b,
97 0x04, 0x75, 0x89, 0xc9, 0xb1, 0xed, 0x50, 0xca, 0x96, 0x6f, 0x1a, 0x7a,
98 0xfe, 0x58, 0x5d, 0xec, 0x19, 0x4a, 0xf6, 0x35, 0x6a, 0x97, 0x14, 0x00,
99 0x0e, 0xd0, 0x6b, 0xbb, 0xd5, 0x75, 0x55, 0x8b, 0x6e, 0x6b, 0x19, 0xa0,
100 0xf8, 0x77, 0xd5, 0xa3};
101
102 CJS_GlobalData::CJS_GlobalData(CPDFDoc_Environment* pApp) {
103 // IBaseAnnot* pBaseAnnot = IBaseAnnot::GetBaseAnnot(m_pApp);
104 // ASSERT(pBaseAnnot != NULL);
105 //
106 // m_sFilePath = pBaseAnnot->GetUserPath();
107 m_sFilePath += SDK_JS_GLOBALDATA_FILENAME;
108
109 LoadGlobalPersistentVariables();
110 }
111
112 CJS_GlobalData::~CJS_GlobalData() {
113 SaveGlobalPersisitentVariables();
114
115 for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++)
116 delete m_arrayGlobalData.GetAt(i);
117
118 m_arrayGlobalData.RemoveAll();
119 }
120
121 int CJS_GlobalData::FindGlobalVariable(const FX_CHAR* propname) {
122 ASSERT(propname != NULL);
123
124 int nRet = -1;
125
126 for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) {
127 CJS_GlobalData_Element* pTemp = m_arrayGlobalData.GetAt(i);
128 if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname) {
129 nRet = i;
130 break;
131 }
132 }
133
134 return nRet;
135 }
136
137 CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(
138 const FX_CHAR* propname) {
139 ASSERT(propname != NULL);
140
141 int nFind = FindGlobalVariable(propname);
142 if (nFind >= 0)
143 return m_arrayGlobalData.GetAt(nFind);
144
145 return NULL;
146 }
147
148 void CJS_GlobalData::SetGlobalVariableNumber(const FX_CHAR* propname,
149 double dData) {
150 ASSERT(propname != NULL);
151
152 CFX_ByteString sPropName = propname;
153 sPropName.TrimLeft();
154 sPropName.TrimRight();
155 if (sPropName.GetLength() == 0)
156 return;
157
158 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
159 pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
160 pData->data.dData = dData;
161 } else {
162 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
163 pNewData->data.sKey = sPropName;
164 pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
165 pNewData->data.dData = dData;
166 m_arrayGlobalData.Add(pNewData);
167 }
168 }
169
170 void CJS_GlobalData::SetGlobalVariableBoolean(const FX_CHAR* propname,
171 bool bData) {
172 ASSERT(propname != NULL);
173 CFX_ByteString sPropName = propname;
174
175 sPropName.TrimLeft();
176 sPropName.TrimRight();
177
178 if (sPropName.GetLength() == 0)
179 return;
180
181 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
182 pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
183 pData->data.bData = bData;
184 } else {
185 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
186 pNewData->data.sKey = sPropName;
187 pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
188 pNewData->data.bData = bData;
189
190 m_arrayGlobalData.Add(pNewData);
191 }
192 }
193
194 void CJS_GlobalData::SetGlobalVariableString(const FX_CHAR* propname,
195 const CFX_ByteString& sData) {
196 ASSERT(propname != NULL);
197 CFX_ByteString sPropName = propname;
198
199 sPropName.TrimLeft();
200 sPropName.TrimRight();
201
202 if (sPropName.GetLength() == 0)
203 return;
204
205 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
206 pData->data.nType = JS_GLOBALDATA_TYPE_STRING;
207 pData->data.sData = sData;
208 } else {
209 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
210 pNewData->data.sKey = sPropName;
211 pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING;
212 pNewData->data.sData = sData;
213
214 m_arrayGlobalData.Add(pNewData);
215 }
216 }
217
218 void CJS_GlobalData::SetGlobalVariableObject(
219 const FX_CHAR* propname,
220 const CJS_GlobalVariableArray& array) {
221 ASSERT(propname != NULL);
222 CFX_ByteString sPropName = propname;
223
224 sPropName.TrimLeft();
225 sPropName.TrimRight();
226
227 if (sPropName.GetLength() == 0)
228 return;
229
230 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
231 pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
232 pData->data.objData.Copy(array);
233 } else {
234 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
235 pNewData->data.sKey = sPropName;
236 pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
237 pNewData->data.objData.Copy(array);
238
239 m_arrayGlobalData.Add(pNewData);
240 }
241 }
242
243 void CJS_GlobalData::SetGlobalVariableNull(const FX_CHAR* propname) {
244 ASSERT(propname != NULL);
245 CFX_ByteString sPropName = propname;
246
247 sPropName.TrimLeft();
248 sPropName.TrimRight();
249
250 if (sPropName.GetLength() == 0)
251 return;
252
253 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
254 pData->data.nType = JS_GLOBALDATA_TYPE_NULL;
255 } else {
256 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
257 pNewData->data.sKey = sPropName;
258 pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL;
259
260 m_arrayGlobalData.Add(pNewData);
261 }
262 }
263
264 FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent(const FX_CHAR* propname,
265 FX_BOOL bPersistent) {
266 ASSERT(propname != NULL);
267 CFX_ByteString sPropName = propname;
268
269 sPropName.TrimLeft();
270 sPropName.TrimRight();
271
272 if (sPropName.GetLength() == 0)
273 return FALSE;
274
275 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName)) {
276 pData->bPersistent = bPersistent;
277 return TRUE;
278 }
279
280 return FALSE;
281 }
282
283 FX_BOOL CJS_GlobalData::DeleteGlobalVariable(const FX_CHAR* propname) {
284 ASSERT(propname != NULL);
285 CFX_ByteString sPropName = propname;
286
287 sPropName.TrimLeft();
288 sPropName.TrimRight();
289
290 if (sPropName.GetLength() == 0)
291 return FALSE;
292
293 int nFind = FindGlobalVariable(sPropName);
294
295 if (nFind >= 0) {
296 delete m_arrayGlobalData.GetAt(nFind);
297 m_arrayGlobalData.RemoveAt(nFind);
298 return TRUE;
299 }
300
301 return FALSE;
302 }
303
304 int32_t CJS_GlobalData::GetSize() const {
305 return m_arrayGlobalData.GetSize();
306 }
307
308 CJS_GlobalData_Element* CJS_GlobalData::GetAt(int index) const {
309 return m_arrayGlobalData.GetAt(index);
310 }
311
312 void CJS_GlobalData::LoadGlobalPersistentVariables() {
313 uint8_t* pBuffer = NULL;
314 int32_t nLength = 0;
315
316 LoadFileBuffer(m_sFilePath.c_str(), pBuffer, nLength);
317 CRYPT_ArcFourCryptBlock(pBuffer, nLength, JS_RC4KEY, sizeof(JS_RC4KEY));
318
319 if (pBuffer) {
320 uint8_t* p = pBuffer;
321 FX_WORD wType = *((FX_WORD*)p);
322 p += sizeof(FX_WORD);
323
324 // FX_WORD wTemp = (FX_WORD)(('X' << 8) | 'F');
325
326 if (wType == (FX_WORD)(('X' << 8) | 'F')) {
327 FX_WORD wVersion = *((FX_WORD*)p);
328 p += sizeof(FX_WORD);
329
330 ASSERT(wVersion <= 2);
331
332 FX_DWORD dwCount = *((FX_DWORD*)p);
333 p += sizeof(FX_DWORD);
334
335 FX_DWORD dwSize = *((FX_DWORD*)p);
336 p += sizeof(FX_DWORD);
337
338 if (dwSize == nLength - sizeof(FX_WORD) * 2 - sizeof(FX_DWORD) * 2) {
339 for (int32_t i = 0, sz = dwCount; i < sz; i++) {
340 if (p > pBuffer + nLength)
341 break;
342
343 FX_DWORD dwNameLen = *((FX_DWORD*)p);
344 p += sizeof(FX_DWORD);
345
346 if (p + dwNameLen > pBuffer + nLength)
347 break;
348
349 CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen);
350 p += sizeof(char) * dwNameLen;
351
352 FX_WORD wDataType = *((FX_WORD*)p);
353 p += sizeof(FX_WORD);
354
355 switch (wDataType) {
356 case JS_GLOBALDATA_TYPE_NUMBER: {
357 double dData = 0;
358 switch (wVersion) {
359 case 1: {
360 FX_DWORD dwData = *((FX_DWORD*)p);
361 p += sizeof(FX_DWORD);
362 dData = dwData;
363 } break;
364 case 2: {
365 dData = *((double*)p);
366 p += sizeof(double);
367 } break;
368 }
369 SetGlobalVariableNumber(sEntry, dData);
370 SetGlobalVariablePersistent(sEntry, TRUE);
371 } break;
372 case JS_GLOBALDATA_TYPE_BOOLEAN: {
373 FX_WORD wData = *((FX_WORD*)p);
374 p += sizeof(FX_WORD);
375 SetGlobalVariableBoolean(sEntry, (bool)(wData == 1));
376 SetGlobalVariablePersistent(sEntry, TRUE);
377 } break;
378 case JS_GLOBALDATA_TYPE_STRING: {
379 FX_DWORD dwLength = *((FX_DWORD*)p);
380 p += sizeof(FX_DWORD);
381
382 if (p + dwLength > pBuffer + nLength)
383 break;
384
385 SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength));
386 SetGlobalVariablePersistent(sEntry, TRUE);
387 p += sizeof(char) * dwLength;
388 } break;
389 case JS_GLOBALDATA_TYPE_NULL: {
390 SetGlobalVariableNull(sEntry);
391 SetGlobalVariablePersistent(sEntry, TRUE);
42 } 392 }
43 break; 393 }
44 case JS_GLOBALDATA_TYPE_BOOLEAN:
45 {
46 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
47 pNewObjData->sKey = pOldObjData->sKey;
48 pNewObjData->nType = pOldObjData->nType;
49 pNewObjData->bData = pOldObjData->bData;
50 Add(pNewObjData);
51 }
52 break;
53 case JS_GLOBALDATA_TYPE_STRING:
54 {
55 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
56 pNewObjData->sKey = pOldObjData->sKey;
57 pNewObjData->nType = pOldObjData->nType;
58 pNewObjData->sData = pOldObjData->sData;
59 Add(pNewObjData);
60 }
61 break;
62 case JS_GLOBALDATA_TYPE_OBJECT:
63 {
64 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
65 pNewObjData->sKey = pOldObjData->sKey;
66 pNewObjData->nType = pOldObjData->nType;
67 pNewObjData->objData.Copy(pOldObjData->objData);
68 Add(pNewObjData);
69 }
70 case JS_GLOBALDATA_TYPE_NULL:
71 {
72 CJS_KeyValue* pNewObjData = new CJS_KeyValue;
73 pNewObjData->sKey = pOldObjData->sKey;
74 pNewObjData->nType = pOldObjData->nType;
75 Add(pNewObjData);
76 }
77 } 394 }
395 }
78 } 396 }
79 } 397 FX_Free(pBuffer);
80 398 }
81 void CJS_GlobalVariableArray::Add(CJS_KeyValue* p)
82 {
83 array.Add(p);
84 }
85
86 int CJS_GlobalVariableArray::Count() const
87 {
88 return array.GetSize();
89 }
90
91 CJS_KeyValue* CJS_GlobalVariableArray::GetAt(int index) const
92 {
93 return array.GetAt(index);
94 }
95
96 void CJS_GlobalVariableArray::Empty()
97 {
98 for (int i=0,sz=array.GetSize(); i<sz; i++)
99 delete array.GetAt(i);
100 array.RemoveAll();
101 }
102
103 /* -------------------------- CJS_GlobalData -------------------------- */
104
105 #define READER_JS_GLOBALDATA_FILENAME L"Reader_JsGlobal.Data"
106 #define PHANTOM_JS_GLOBALDATA_FILENAME L"Phantom_JsGlobal.Data"
107 #define SDK_JS_GLOBALDATA_FILENAME L"SDK_JsGlobal.Data"
108
109 static const uint8_t JS_RC4KEY[] = {0x19,0xa8,0xe8,0x01,0xf6,0xa8,0xb6,0x4d,0x82 ,0x04,
110 0x45,0x6d,0xb4,0xcf,0xd7,0x77,0x67,0xf9,0x75,0x9f,
111 0xf0,0xe0,0x1e,0x51,0xee,0x46,0xfd,0x0b,0xc9,0x93,
112 0x25,0x55,0x4a,0xee,0xe0,0x16,0xd0,0xdf,0x8c,0xfa,
113 0x2a,0xa9,0x49,0xfd,0x97,0x1c,0x0e,0x22,0x13,0x28,
114 0x7c,0xaf,0xc4,0xfc,0x9c,0x12,0x65,0x8c,0x4e,0x5b,
115 0x04,0x75,0x89,0xc9,0xb1,0xed,0x50,0xca,0x96,0x6f,
116 0x1a,0x7a,0xfe,0x58,0x5d,0xec,0x19,0x4a,0xf6,0x35,
117 0x6a,0x97,0x14,0x00,0x0e,0xd0,0x6b,0xbb,0xd5,0x75,
118 0x55,0x8b,0x6e,0x6b,0x19,0xa0,0xf8,0x77,0xd5,0xa3
119 };
120
121 CJS_GlobalData::CJS_GlobalData(CPDFDoc_Environment* pApp)
122 {
123 // IBaseAnnot* pBaseAnnot = IBaseAnnot::GetBaseAnnot(m_pApp);
124 // ASSERT(pBaseAnnot != NULL);
125 //
126 // m_sFilePath = pBaseAnnot->GetUserPath();
127 m_sFilePath += SDK_JS_GLOBALDATA_FILENAME;
128
129 LoadGlobalPersistentVariables();
130 }
131
132 CJS_GlobalData::~CJS_GlobalData()
133 {
134 SaveGlobalPersisitentVariables();
135
136 for (int i=0,sz=m_arrayGlobalData.GetSize(); i<sz; i++)
137 delete m_arrayGlobalData.GetAt(i);
138
139 m_arrayGlobalData.RemoveAll();
140 }
141
142 int CJS_GlobalData::FindGlobalVariable(const FX_CHAR* propname)
143 {
144 ASSERT(propname != NULL);
145
146 int nRet = -1;
147
148 for (int i=0,sz=m_arrayGlobalData.GetSize(); i<sz; i++)
149 {
150 CJS_GlobalData_Element* pTemp = m_arrayGlobalData.GetAt(i);
151 if (pTemp->data.sKey[0] == *propname && pTemp->data.sKey == propname)
152 {
153 nRet = i;
154 break;
155 }
156 }
157
158 return nRet;
159 }
160
161 CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(const FX_CHAR* propnam e)
162 {
163 ASSERT(propname != NULL);
164
165 int nFind = FindGlobalVariable(propname);
166 if (nFind >= 0)
167 return m_arrayGlobalData.GetAt(nFind);
168
169 return NULL;
170 }
171
172 void CJS_GlobalData::SetGlobalVariableNumber(const FX_CHAR* propname, double dDa ta)
173 {
174 ASSERT(propname != NULL);
175
176 CFX_ByteString sPropName = propname;
177 sPropName.TrimLeft();
178 sPropName.TrimRight();
179 if (sPropName.GetLength() == 0)
180 return;
181
182 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
183 {
184 pData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
185 pData->data.dData = dData;
186 }
187 else
188 {
189 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
190 pNewData->data.sKey = sPropName;
191 pNewData->data.nType = JS_GLOBALDATA_TYPE_NUMBER;
192 pNewData->data.dData = dData;
193 m_arrayGlobalData.Add(pNewData);
194 }
195 }
196
197 void CJS_GlobalData::SetGlobalVariableBoolean(const FX_CHAR* propname, bool bDat a)
198 {
199 ASSERT(propname != NULL);
200 CFX_ByteString sPropName = propname;
201
202 sPropName.TrimLeft();
203 sPropName.TrimRight();
204
205 if (sPropName.GetLength() == 0) return;
206
207 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
208 {
209 pData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
210 pData->data.bData = bData;
211 }
212 else
213 {
214 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
215 pNewData->data.sKey = sPropName;
216 pNewData->data.nType = JS_GLOBALDATA_TYPE_BOOLEAN;
217 pNewData->data.bData = bData;
218
219 m_arrayGlobalData.Add(pNewData);
220 }
221 }
222
223 void CJS_GlobalData::SetGlobalVariableString(const FX_CHAR* propname, const CFX_ ByteString& sData)
224 {
225 ASSERT(propname != NULL);
226 CFX_ByteString sPropName = propname;
227
228 sPropName.TrimLeft();
229 sPropName.TrimRight();
230
231 if (sPropName.GetLength() == 0) return;
232
233 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
234 {
235 pData->data.nType = JS_GLOBALDATA_TYPE_STRING;
236 pData->data.sData = sData;
237 }
238 else
239 {
240 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
241 pNewData->data.sKey = sPropName;
242 pNewData->data.nType = JS_GLOBALDATA_TYPE_STRING;
243 pNewData->data.sData = sData;
244
245 m_arrayGlobalData.Add(pNewData);
246 }
247 }
248
249 void CJS_GlobalData::SetGlobalVariableObject(const FX_CHAR* propname, const CJS_ GlobalVariableArray& array)
250 {
251 ASSERT(propname != NULL);
252 CFX_ByteString sPropName = propname;
253
254 sPropName.TrimLeft();
255 sPropName.TrimRight();
256
257 if (sPropName.GetLength() == 0) return;
258
259 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
260 {
261 pData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
262 pData->data.objData.Copy(array);
263 }
264 else
265 {
266 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
267 pNewData->data.sKey = sPropName;
268 pNewData->data.nType = JS_GLOBALDATA_TYPE_OBJECT;
269 pNewData->data.objData.Copy(array);
270
271 m_arrayGlobalData.Add(pNewData);
272 }
273 }
274
275 void CJS_GlobalData::SetGlobalVariableNull(const FX_CHAR* propname)
276 {
277 ASSERT(propname != NULL);
278 CFX_ByteString sPropName = propname;
279
280 sPropName.TrimLeft();
281 sPropName.TrimRight();
282
283 if (sPropName.GetLength() == 0) return;
284
285 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
286 {
287 pData->data.nType = JS_GLOBALDATA_TYPE_NULL;
288 }
289 else
290 {
291 CJS_GlobalData_Element* pNewData = new CJS_GlobalData_Element;
292 pNewData->data.sKey = sPropName;
293 pNewData->data.nType = JS_GLOBALDATA_TYPE_NULL;
294
295 m_arrayGlobalData.Add(pNewData);
296 }
297 }
298
299 FX_BOOL CJS_GlobalData::SetGlobalVariablePersistent(const FX_CHAR* propname, FX_ BOOL bPersistent)
300 {
301 ASSERT(propname != NULL);
302 CFX_ByteString sPropName = propname;
303
304 sPropName.TrimLeft();
305 sPropName.TrimRight();
306
307 if (sPropName.GetLength() == 0) return FALSE;
308
309 if (CJS_GlobalData_Element* pData = GetGlobalVariable(sPropName))
310 {
311 pData->bPersistent = bPersistent;
312 return TRUE;
313 }
314
315 return FALSE;
316 }
317
318 FX_BOOL CJS_GlobalData::DeleteGlobalVariable(const FX_CHAR* propname)
319 {
320 ASSERT(propname != NULL);
321 CFX_ByteString sPropName = propname;
322
323 sPropName.TrimLeft();
324 sPropName.TrimRight();
325
326 if (sPropName.GetLength() == 0) return FALSE;
327
328 int nFind = FindGlobalVariable(sPropName);
329
330 if (nFind >= 0)
331 {
332 delete m_arrayGlobalData.GetAt(nFind);
333 m_arrayGlobalData.RemoveAt(nFind);
334 return TRUE;
335 }
336
337 return FALSE;
338 }
339
340 int32_t CJS_GlobalData::GetSize() const
341 {
342 return m_arrayGlobalData.GetSize();
343 }
344
345 CJS_GlobalData_Element* CJS_GlobalData::GetAt(int index) const
346 {
347 return m_arrayGlobalData.GetAt(index);
348 }
349
350 void CJS_GlobalData::LoadGlobalPersistentVariables()
351 {
352 uint8_t* pBuffer = NULL;
353 int32_t nLength = 0;
354
355 LoadFileBuffer(m_sFilePath.c_str(), pBuffer, nLength);
356 CRYPT_ArcFourCryptBlock(pBuffer, nLength, JS_RC4KEY, sizeof(JS_RC4KEY));
357
358 if (pBuffer)
359 {
360 uint8_t* p = pBuffer;
361 FX_WORD wType = *((FX_WORD*)p);
362 p += sizeof(FX_WORD);
363
364 //FX_WORD wTemp = (FX_WORD)(('X' << 8) | 'F');
365
366 if (wType == (FX_WORD)(('X' << 8) | 'F'))
367 {
368 FX_WORD wVersion = *((FX_WORD*)p);
369 p += sizeof(FX_WORD);
370
371 ASSERT(wVersion <= 2);
372
373 FX_DWORD dwCount = *((FX_DWORD*)p);
374 p += sizeof(FX_DWORD);
375
376 FX_DWORD dwSize = *((FX_DWORD*)p);
377 p += sizeof(FX_DWORD);
378
379 if (dwSize == nLength - sizeof(FX_WORD) * 2 - sizeof(FX_DWORD)* 2)
380 {
381 for (int32_t i=0,sz=dwCount; i<sz; i++)
382 {
383 if (p > pBuffer + nLength)
384 break;
385
386 FX_DWORD dwNameLen = *((FX_DWORD*)p);
387 p += sizeof(FX_DWORD);
388
389 if (p + dwNameLen > pBuffer + nLength)
390 break;
391
392 CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen);
393 p += sizeof(char) * dwNameLen;
394
395 FX_WORD wDataType = *((FX_WORD*)p);
396 p += sizeof(FX_WORD);
397
398 switch (wDataType)
399 {
400 case JS_GLOBALDATA_TYPE_NUMBER:
401 {
402 double dData = 0;
403 switch (wVersion)
404 {
405 case 1:
406 {
407 FX_DWORD dwData = *((FX_DWORD*)p);
408 p += sizeof(FX_DWORD);
409 dData = dwData;
410 }
411 break;
412 case 2:
413 {
414 dData = *((double*)p);
415 p += sizeof(double);
416 }
417 break;
418 }
419 SetGlobalVariableNumber(sEntry, dData);
420 SetGlobalVariablePersistent(sEntry, TRUE);
421 }
422 break;
423 case JS_GLOBALDATA_TYPE_BOOLEAN:
424 {
425 FX_WORD wData = *((FX_WORD*)p);
426 p += sizeof(FX_WORD);
427 SetGlobalVariableBoolean(sEntry, (bool)(wData == 1)) ;
428 SetGlobalVariablePersistent(sEntry, TRUE);
429 }
430 break;
431 case JS_GLOBALDATA_TYPE_STRING:
432 {
433 FX_DWORD dwLength = *((FX_DWORD*)p);
434 p += sizeof(FX_DWORD);
435
436 if (p + dwLength > pBuffer + nLength)
437 break;
438
439 SetGlobalVariableString(sEntry, CFX_ByteString(p, dw Length));
440 SetGlobalVariablePersistent(sEntry, TRUE);
441 p += sizeof(char) * dwLength;
442 }
443 break;
444 case JS_GLOBALDATA_TYPE_NULL:
445 {
446 SetGlobalVariableNull(sEntry);
447 SetGlobalVariablePersistent(sEntry, TRUE);
448 }
449 }
450 }
451 }
452 }
453 FX_Free(pBuffer);
454 }
455 } 399 }
456 400
457 /* 401 /*
458 struct js_global_datafile_header 402 struct js_global_datafile_header
459 { 403 {
460 FX_WORD type; //FX ('X' << 8) | 'F' 404 FX_WORD type; //FX ('X' << 8) | 'F'
461 FX_WORD version; //1.0 405 FX_WORD version; //1.0
462 FX_DWORD datacount; 406 FX_DWORD datacount;
463 }; 407 };
464 struct js_global_datafile_data 408 struct js_global_datafile_data
465 { 409 {
466 FX_WORD type; 410 FX_WORD type;
467 FX_DWORD nData; 411 FX_DWORD nData;
468 FX_WORD bData; 412 FX_WORD bData;
469 FX_DWORD nStrLen; 413 FX_DWORD nStrLen;
470 char* pStr; 414 char* pStr;
471 }; 415 };
472 */ 416 */
473 417
474 void CJS_GlobalData::SaveGlobalPersisitentVariables() 418 void CJS_GlobalData::SaveGlobalPersisitentVariables() {
475 { 419 FX_DWORD nCount = 0;
476 FX_DWORD nCount = 0; 420 CFX_BinaryBuf sData;
477 CFX_BinaryBuf sData;
478 421
479 for (int i=0,sz=m_arrayGlobalData.GetSize(); i<sz; i++) 422 for (int i = 0, sz = m_arrayGlobalData.GetSize(); i < sz; i++) {
480 { 423 CJS_GlobalData_Element* pElement = m_arrayGlobalData.GetAt(i);
481 CJS_GlobalData_Element* pElement = m_arrayGlobalData.GetAt(i); 424 ASSERT(pElement != NULL);
482 ASSERT(pElement != NULL);
483 425
484 if (pElement->bPersistent) 426 if (pElement->bPersistent) {
485 { 427 CFX_BinaryBuf sElement;
486 CFX_BinaryBuf sElement; 428 MakeByteString(pElement->data.sKey, &pElement->data, sElement);
487 MakeByteString(pElement->data.sKey, &pElement->data, sElement);
488 429
489 if (sData.GetSize() + sElement.GetSize() > JS_MAXGLOBALDATA) 430 if (sData.GetSize() + sElement.GetSize() > JS_MAXGLOBALDATA)
490 break; 431 break;
491 432
492 sData.AppendBlock(sElement.GetBuffer(), sElement.GetSize()); 433 sData.AppendBlock(sElement.GetBuffer(), sElement.GetSize());
493 nCount++; 434 nCount++;
494 }
495 } 435 }
436 }
496 437
497 CFX_BinaryBuf sFile; 438 CFX_BinaryBuf sFile;
498 439
499 FX_WORD wType = (FX_WORD)(('X' << 8) | 'F'); 440 FX_WORD wType = (FX_WORD)(('X' << 8) | 'F');
500 sFile.AppendBlock(&wType, sizeof(FX_WORD)); 441 sFile.AppendBlock(&wType, sizeof(FX_WORD));
501 FX_WORD wVersion = 2; 442 FX_WORD wVersion = 2;
502 sFile.AppendBlock(&wVersion, sizeof(FX_WORD)); 443 sFile.AppendBlock(&wVersion, sizeof(FX_WORD));
503 sFile.AppendBlock(&nCount, sizeof(FX_DWORD)); 444 sFile.AppendBlock(&nCount, sizeof(FX_DWORD));
504 FX_DWORD dwSize = sData.GetSize(); 445 FX_DWORD dwSize = sData.GetSize();
505 sFile.AppendBlock(&dwSize, sizeof(FX_DWORD)); 446 sFile.AppendBlock(&dwSize, sizeof(FX_DWORD));
506 447
507 sFile.AppendBlock(sData.GetBuffer(), sData.GetSize()); 448 sFile.AppendBlock(sData.GetBuffer(), sData.GetSize());
508 449
509 CRYPT_ArcFourCryptBlock(sFile.GetBuffer(), sFile.GetSize(), JS_RC4KEY, sizeo f(JS_RC4KEY)); 450 CRYPT_ArcFourCryptBlock(sFile.GetBuffer(), sFile.GetSize(), JS_RC4KEY,
510 WriteFileBuffer(m_sFilePath.c_str(), (const FX_CHAR*)sFile.GetBuffer(), sFil e.GetSize()); 451 sizeof(JS_RC4KEY));
452 WriteFileBuffer(m_sFilePath.c_str(), (const FX_CHAR*)sFile.GetBuffer(),
453 sFile.GetSize());
511 } 454 }
512 455
513 void CJS_GlobalData::LoadFileBuffer(const FX_WCHAR* sFilePath, uint8_t*& pBuffer , int32_t& nLength) 456 void CJS_GlobalData::LoadFileBuffer(const FX_WCHAR* sFilePath,
514 { 457 uint8_t*& pBuffer,
515 //UnSupport. 458 int32_t& nLength) {
459 // UnSupport.
516 } 460 }
517 461
518 void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath, const FX_CHAR* p Buffer, int32_t nLength) 462 void CJS_GlobalData::WriteFileBuffer(const FX_WCHAR* sFilePath,
519 { 463 const FX_CHAR* pBuffer,
520 //UnSupport. 464 int32_t nLength) {
465 // UnSupport.
521 } 466 }
522 467
523 void CJS_GlobalData::MakeByteString(const CFX_ByteString& name, CJS_KeyValue* pD ata, CFX_BinaryBuf& sData) 468 void CJS_GlobalData::MakeByteString(const CFX_ByteString& name,
524 { 469 CJS_KeyValue* pData,
525 FX_WORD wType = (FX_WORD)pData->nType; 470 CFX_BinaryBuf& sData) {
526 switch (wType) 471 FX_WORD wType = (FX_WORD)pData->nType;
527 { 472 switch (wType) {
528 case JS_GLOBALDATA_TYPE_NUMBER: 473 case JS_GLOBALDATA_TYPE_NUMBER: {
529 { 474 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
530 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); 475 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
531 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); 476 sData.AppendString(name);
532 sData.AppendString(name); 477 sData.AppendBlock(&wType, sizeof(FX_WORD));
533 sData.AppendBlock(&wType, sizeof(FX_WORD));
534 478
535 double dData = pData->dData; 479 double dData = pData->dData;
536 sData.AppendBlock(&dData, sizeof(double)); 480 sData.AppendBlock(&dData, sizeof(double));
537 } 481 } break;
538 break; 482 case JS_GLOBALDATA_TYPE_BOOLEAN: {
539 case JS_GLOBALDATA_TYPE_BOOLEAN: 483 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
540 { 484 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
541 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); 485 sData.AppendString(name);
542 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); 486 sData.AppendBlock(&wType, sizeof(FX_WORD));
543 sData.AppendString(name);
544 sData.AppendBlock(&wType, sizeof(FX_WORD));
545 487
546 FX_WORD wData = (FX_WORD)pData->bData; 488 FX_WORD wData = (FX_WORD)pData->bData;
547 sData.AppendBlock(&wData, sizeof(FX_WORD)); 489 sData.AppendBlock(&wData, sizeof(FX_WORD));
548 } 490 } break;
549 break; 491 case JS_GLOBALDATA_TYPE_STRING: {
550 case JS_GLOBALDATA_TYPE_STRING: 492 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
551 { 493 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
552 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); 494 sData.AppendString(name);
553 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); 495 sData.AppendBlock(&wType, sizeof(FX_WORD));
554 sData.AppendString(name);
555 sData.AppendBlock(&wType, sizeof(FX_WORD));
556 496
557 FX_DWORD dwDataLen = (FX_DWORD)pData->sData.GetLength(); 497 FX_DWORD dwDataLen = (FX_DWORD)pData->sData.GetLength();
558 sData.AppendBlock(&dwDataLen, sizeof(FX_DWORD)); 498 sData.AppendBlock(&dwDataLen, sizeof(FX_DWORD));
559 sData.AppendString(pData->sData); 499 sData.AppendString(pData->sData);
560 } 500 } break;
561 break; 501 case JS_GLOBALDATA_TYPE_NULL: {
562 case JS_GLOBALDATA_TYPE_NULL: 502 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength();
563 { 503 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD));
564 FX_DWORD dwNameLen = (FX_DWORD)name.GetLength(); 504 sData.AppendString(name);
565 sData.AppendBlock(&dwNameLen, sizeof(FX_DWORD)); 505 sData.AppendBlock(&wType, sizeof(FX_DWORD));
566 sData.AppendString(name); 506 } break;
567 sData.AppendBlock(&wType, sizeof(FX_DWORD));
568 }
569 break;
570 default: 507 default:
571 break; 508 break;
572 } 509 }
573 } 510 }
574
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698