| #include "string.h" |
| #include "sp_msgpack.h" |
| |
| int32 sp_pack_init(cw_pack_context* pack,uint8* buf,uint16 len) |
| { |
| memset(buf,0,len); |
| return cw_pack_context_init(pack,buf,len,0); |
| } |
| |
| uint16 sp_pack_length(cw_pack_context* pack) |
| { |
| if(pack->current != NULL && pack->start != NULL) |
| { |
| return (pack->current -pack->start); |
| } |
| return 256; |
| } |
| void sp_pack_put_str(cw_pack_context* pack,const char* parakey,const char* paraval) |
| { |
| cw_pack_str(pack,parakey,strlen(parakey)); |
| cw_pack_str(pack,paraval,strlen(paraval)); |
| } |
| void sp_pack_put_int(cw_pack_context* pack,const char* parakey,const int paraval) |
| { |
| cw_pack_str(pack,parakey,strlen(parakey)); |
| cw_pack_signed(pack,paraval); |
| } |
| void sp_pack_put_bin(cw_pack_context* pack,const char* parakey,const uint8* paraval, |
| const uint16 len) |
| { |
| cw_pack_str(pack,parakey,strlen(parakey)); |
| cw_pack_bin(pack,paraval,len); |
| } |
| int32 sp_unpack_init(cw_unpack_context* unpack,uint8* buf,uint16 len) |
| { |
| cw_unpack_context_init(unpack,buf,len,0); |
| return unpack->return_code; |
| } |
| |
| uint8 sp_unpack_map_size(cw_unpack_context* unpack) |
| { |
| cw_unpack_next(unpack); |
| if(unpack->item.type == CWP_ITEM_MAP) |
| { |
| return (uint8)unpack->item.as.map.size; |
| } |
| return 0; |
| } |
| |
| uint8 sp_unpack_value(cw_unpack_context* unpack,unpack_field_t* field) |
| { |
| cw_unpack_next(unpack); |
| if(unpack->item.type == CWP_ITEM_STR) |
| { |
| field->key = unpack->item.as.str.start; |
| cw_unpack_next(unpack); |
| if(unpack->item.type == CWP_ITEM_STR) |
| { |
| field->val.strval = unpack->item.as.str.start; |
| field->strlen = unpack->item.as.str.length; |
| return 0; |
| } |
| else if(unpack->item.type == CWP_ITEM_POSITIVE_INTEGER) |
| { |
| field->val.intval= (int32)unpack->item.as.i64; |
| field->strlen = 0; |
| return 0; |
| } |
| else if(unpack->item.type == CWP_ITEM_BIN) |
| { |
| field->val.binval = unpack->item.as.str.start; |
| field->strlen = unpack->item.as.str.length; |
| return 0; |
| } |
| else |
| { |
| field->strlen = 0; |
| field->val.intval = 0; |
| return 1; |
| } |
| } |
| return 1; |
| } |
| |
| |
| |
| |