mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-17 02:21:03 -04:00
moved code of rsservicerserialiser into rsserializer.h/cc and renamed it into RsRawSerializer
This commit is contained in:
parent
e401b90e02
commit
14076de1e0
8 changed files with 230 additions and 111 deletions
|
@ -139,4 +139,77 @@ void RsGenericSerializer::print(RsItem *item)
|
|||
std::cerr << "******************************" << std::endl;
|
||||
}
|
||||
|
||||
uint32_t RsRawSerialiser::size(RsItem *i)
|
||||
{
|
||||
RsRawItem *item = dynamic_cast<RsRawItem *>(i);
|
||||
|
||||
if (item)
|
||||
{
|
||||
return item->getRawLength();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* serialise the data to the buffer */
|
||||
bool RsRawSerialiser::serialise(RsItem *i, void *data, uint32_t *pktsize)
|
||||
{
|
||||
RsRawItem *item = dynamic_cast<RsRawItem *>(i);
|
||||
if (!item)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef RSSERIAL_DEBUG
|
||||
std::cerr << "RsRawSerialiser::serialise() serializing raw item. pktsize : " << *pktsize;
|
||||
#endif
|
||||
|
||||
uint32_t tlvsize = item->getRawLength();
|
||||
#ifdef RSSERIAL_DEBUG
|
||||
std::cerr << "tlvsize : " << tlvsize << std::endl;
|
||||
#endif
|
||||
|
||||
if (*pktsize < tlvsize)
|
||||
return false; /* not enough space */
|
||||
|
||||
if (tlvsize > getRsPktMaxSize())
|
||||
{
|
||||
std::cerr << "(EE) Serialised packet is too big. Maximum allowed size is " << getRsPktMaxSize() << ". Serialised size is " << tlvsize << ". Please tune your service to correctly split packets" << std::endl;
|
||||
return false; /* packet too big */
|
||||
}
|
||||
|
||||
*pktsize = tlvsize;
|
||||
|
||||
/* its serialised already!!! */
|
||||
memcpy(data, item->getRawData(), tlvsize);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
RsItem *RsRawSerialiser::deserialise(void *data, uint32_t *pktsize)
|
||||
{
|
||||
/* get the type and size */
|
||||
uint32_t rstype = getRsItemId(data);
|
||||
uint32_t rssize = getRsItemSize(data);
|
||||
|
||||
if (RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype))
|
||||
{
|
||||
return NULL; /* wrong type */
|
||||
}
|
||||
|
||||
if (*pktsize < rssize) /* check size */
|
||||
return NULL; /* not enough data */
|
||||
|
||||
if (rssize > getRsPktMaxSize())
|
||||
return NULL; /* packet too big */
|
||||
|
||||
/* set the packet length */
|
||||
*pktsize = rssize;
|
||||
|
||||
RsRawItem *item = new RsRawItem(rstype, rssize);
|
||||
void *item_data = item->getRawData();
|
||||
|
||||
memcpy(item_data, data, rssize);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue