blob: d1258a94677e2bdb6c7ad56340d219082a1530fd [file] [log] [blame]
#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;
}