blob: d1258a94677e2bdb6c7ad56340d219082a1530fd [file] [log] [blame]
zongqiang.zhang0c6a0882019-08-07 14:48:21 +08001#include "string.h"
2#include "sp_msgpack.h"
3
4int32 sp_pack_init(cw_pack_context* pack,uint8* buf,uint16 len)
5{
6 memset(buf,0,len);
7 return cw_pack_context_init(pack,buf,len,0);
8}
9
10uint16 sp_pack_length(cw_pack_context* pack)
11{
12 if(pack->current != NULL && pack->start != NULL)
13 {
14 return (pack->current -pack->start);
15 }
16 return 256;
17}
18void sp_pack_put_str(cw_pack_context* pack,const char* parakey,const char* paraval)
19{
20 cw_pack_str(pack,parakey,strlen(parakey));
21 cw_pack_str(pack,paraval,strlen(paraval));
22}
23void sp_pack_put_int(cw_pack_context* pack,const char* parakey,const int paraval)
24{
25 cw_pack_str(pack,parakey,strlen(parakey));
26 cw_pack_signed(pack,paraval);
27}
28void sp_pack_put_bin(cw_pack_context* pack,const char* parakey,const uint8* paraval,
29 const uint16 len)
30{
31 cw_pack_str(pack,parakey,strlen(parakey));
32 cw_pack_bin(pack,paraval,len);
33}
34int32 sp_unpack_init(cw_unpack_context* unpack,uint8* buf,uint16 len)
35{
36 cw_unpack_context_init(unpack,buf,len,0);
37 return unpack->return_code;
38}
39
40uint8 sp_unpack_map_size(cw_unpack_context* unpack)
41{
42 cw_unpack_next(unpack);
43 if(unpack->item.type == CWP_ITEM_MAP)
44 {
45 return (uint8)unpack->item.as.map.size;
46 }
47 return 0;
48}
49
50uint8 sp_unpack_value(cw_unpack_context* unpack,unpack_field_t* field)
51{
52 cw_unpack_next(unpack);
53 if(unpack->item.type == CWP_ITEM_STR)
54 {
55 field->key = unpack->item.as.str.start;
56 cw_unpack_next(unpack);
57 if(unpack->item.type == CWP_ITEM_STR)
58 {
59 field->val.strval = unpack->item.as.str.start;
60 field->strlen = unpack->item.as.str.length;
61 return 0;
62 }
63 else if(unpack->item.type == CWP_ITEM_POSITIVE_INTEGER)
64 {
65 field->val.intval= (int32)unpack->item.as.i64;
66 field->strlen = 0;
67 return 0;
68 }
69 else if(unpack->item.type == CWP_ITEM_BIN)
70 {
71 field->val.binval = unpack->item.as.str.start;
72 field->strlen = unpack->item.as.str.length;
73 return 0;
74 }
75 else
76 {
77 field->strlen = 0;
78 field->val.intval = 0;
79 return 1;
80 }
81 }
82 return 1;
83}
84
85
86
87