11 #include <webclient/web_buffers.h> 13 enum json_primative_type
34 typedef void(CharOutputFn)(
const char *chars,
int len,
void *blob);
38 JsonAlocString * pNext;
43 class ParsedJsonDataSet :
public buffer_object
45 PoolPtr m_pStorage_List_Head;
46 PoolPtr m_pCurrent_Pool;
47 JsonAlocString * pStringList;
48 int m_nCurrent_Position;
51 bool bEnableLargeStrings;
57 unsigned char *m_pPrevStringStart;
61 unsigned char *PutChar(
unsigned char c);
62 void CheckForAndFixBrokenString();
63 void ProcessChar(
unsigned char c);
64 void ZeroNextString();
65 void ZeroNextNumber(
char c);
66 void AddStringChar(
char c);
67 void AddNumberChar(
char c);
68 void EmitNumberBuffer();
69 bool CheckStringEmit(json_primative_type t);
70 void Emit(json_primative_type t);
71 void ChangeString(json_primative_type t);
73 bool JumpPosition(
int siz);
76 virtual void Error(
const char *err);
83 void printhelper(CharOutputFn *pf,
void *p,
bool pretty,
bool from_here=
false);
90 void EnableLargeStrings(
bool b) {bEnableLargeStrings=b; };
94 virtual int WriteData(
const unsigned char *pCopyFrom,
int num_bytes);
100 json_primative_type GetFirst();
101 json_primative_type GetNext();
102 json_primative_type GetCurrent();
103 json_primative_type GetRawCurrent();
107 json_primative_type GetNextName();
108 json_primative_type GetNextNameInCurrentObject();
109 json_primative_type GetNextNameInCurrentArray();
160 json_primative_type FindFullName(
const char *name);
162 json_primative_type FindFullAtName(
const char *name);
167 json_primative_type FindElementAfterName(
const char *name);
171 json_primative_type FindGlobalElementAfterName(
const char *name);
174 json_primative_type FindElementAfterNameInCurrentObject(
const char *name);
176 json_primative_type FindElementAfterNameInCurrentArray(
const char *name);
183 bool PermissiveCurrentBool();
184 double CurrentNumber();
185 const char *CurrentString();
186 const char *CurrentName();
191 bool FindFullNameBoolean(
const char *name)
193 if (FindFullName(name) == TRUE_EL)
return true;
196 bool FindGlobalBoolean(
const char *name)
198 if (FindGlobalElementAfterName(name) == TRUE_EL)
return true;
201 bool FindBoolean(
const char *name)
203 if (FindElementAfterName(name) == TRUE_EL)
return true;
206 bool FindBooleanInCurentObject(
const char *name)
208 if (FindElementAfterNameInCurrentObject(name) == TRUE_EL)
return true;
213 bool FindFullNamePermissiveBoolean(
const char *name)
215 if (FindFullName(name) != NOTFOUND)
return PermissiveCurrentBool();
218 bool FindGlobalPermissiveBoolean(
const char *name)
220 if (FindGlobalElementAfterName(name) != NOTFOUND)
return PermissiveCurrentBool();
223 bool FindPermissiveBoolean(
const char *name)
225 if (FindElementAfterName(name) != NOTFOUND)
return PermissiveCurrentBool();
228 bool FindPermissiveBooleanInCurentObject(
const char *name)
230 if (FindElementAfterNameInCurrentObject(name) != NOTFOUND)
return PermissiveCurrentBool();
235 const char *FindFullNameString(
const char *name)
237 if (FindFullName(name) == STRING)
return CurrentString();
240 const char *FindGlobalString(
const char *name)
242 if (FindGlobalElementAfterName(name) == STRING)
return CurrentString();
245 const char *FindString(
const char *name)
247 if (FindElementAfterName(name) == STRING)
return CurrentString();
250 const char *FindStringInCurentObject(
const char *name)
252 if (FindElementAfterNameInCurrentObject(name) == STRING)
return CurrentString();
257 double FindFullNameNumber(
const char *name)
259 if (FindFullName(name) == NUMBER)
return CurrentNumber();
262 double FindGlobalNumber(
const char *name)
264 if (FindGlobalElementAfterName(name) == NUMBER)
return CurrentNumber();
267 double FindNumber(
const char *name)
269 if (FindElementAfterName(name) == NUMBER)
return CurrentNumber();
272 double FindNumberInCurentObject(
const char *name)
274 if (FindElementAfterNameInCurrentObject(name) == NUMBER)
return CurrentNumber();
279 bool FindGlobalObject(
const char *name)
281 if (FindGlobalElementAfterName(name) == BEGIN_OBJECT)
return true;
284 bool FindObject(
const char *name)
286 if (FindElementAfterName(name) == BEGIN_OBJECT)
return true;
289 bool FindObjectInCurentObject(
const char *name)
291 if (FindElementAfterNameInCurrentObject(name) == BEGIN_OBJECT)
return true;
298 ParsedJsonDataSet(
const char *pData,
int len = 0,
bool bBigStrings=
false);
300 ~ParsedJsonDataSet();
302 bool CopyObject(ParsedJsonDataSet & src_set);
315 void PrintObject(
bool pretty =
false);
318 int PrintObjectToBuffer(
char *buffer,
int maxlen,
bool pretty =
false);
321 void PrintObjectToFd(
int fd,
bool pretty =
false);
324 int GetPrintSize(
bool pretty =
false);
327 void InsertName(
const char *name);
328 void InsertString(
const char *s);
329 void Insert(
short i);
332 void Insert(
unsigned short i);
333 void Insert(
unsigned int i);
334 void Insert(
unsigned long i);
336 void Insert(
double d);
337 void Insert(
const IPADDR &ip);
341 void StartBuilding();
342 void AddObjectStart(
const char *name);
343 void AddMyMac(
const char *name);
344 void Add(
const char *name,
int i);
345 void Add(
const char *name,
short i);
346 void Add(
const char *name,
long i);
347 void Add(
const char *name,
unsigned int i);
348 void Add(
const char *name,
unsigned short i);
349 void Add(
const char *name,
unsigned long i);
350 void Add(
const char *name,
double d);
351 void Add(
const char *name,
const char *str);
352 void Add(
const char *name,
bool b);
353 void Add(
const char *name, IPADDR4 i4);
354 void Add(
const char *name,
const IPADDR &i);
355 void Add(
const char *name,
const MACADR &ma);
356 void AddNull(
const char *name);
357 void AddArrayStart(
const char *name);
360 void AddArrayElement(
int i);
361 void AddArrayElement(
short i);
362 void AddArrayElement(
long i);
363 void AddArrayElement(
unsigned int i);
364 void AddArrayElement(
unsigned short i);
365 void AddArrayElement(
unsigned long i);
366 void AddArrayElement(
double d);
367 void AddArrayElement(
const char *str);
368 void AddArrayElement(
bool b);
369 void AddArrayElement(
const IPADDR &i);
370 void AddArrayElementArray();
371 void AddArrayObjectStart();
372 void AddNullArrayElement();
378 const char *GetTypeName(json_primative_type t);
Used to hold and manipulate IPv4 and IPv6 addresses in dual stack mode.
Definition: ipv6_addr.h:28
void WriteData(int fd, const char *c, int siz)
Definition: gifCompress.cpp:142