mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-16 01:54:52 -04:00
bug fixing in serialisation
git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-IdCleaning@7142 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
216e1ba247
commit
00196c58b8
7 changed files with 25 additions and 100 deletions
|
@ -79,15 +79,6 @@ uint32_t RsTurtleFileMapItem::serial_size()
|
||||||
return s ;
|
return s ;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t RsTurtleFileCrcRequestItem::serial_size()
|
|
||||||
{
|
|
||||||
uint32_t s = 0 ;
|
|
||||||
|
|
||||||
s += 8 ; // header
|
|
||||||
s += 4 ; // tunnel id
|
|
||||||
|
|
||||||
return s ;
|
|
||||||
}
|
|
||||||
uint32_t RsTurtleChunkCrcItem::serial_size()
|
uint32_t RsTurtleChunkCrcItem::serial_size()
|
||||||
{
|
{
|
||||||
uint32_t s = 0 ;
|
uint32_t s = 0 ;
|
||||||
|
@ -95,7 +86,7 @@ uint32_t RsTurtleChunkCrcItem::serial_size()
|
||||||
s += 8 ; // header
|
s += 8 ; // header
|
||||||
s += 4 ; // tunnel id
|
s += 4 ; // tunnel id
|
||||||
s += 4 ; // chunk number
|
s += 4 ; // chunk number
|
||||||
s += 20 ; // check_sum
|
s += check_sum.serial_size() ; // check_sum
|
||||||
|
|
||||||
return s ;
|
return s ;
|
||||||
}
|
}
|
||||||
|
@ -179,40 +170,6 @@ bool RsTurtleFileMapItem::serialize(void *data,uint32_t& pktsize)
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RsTurtleFileCrcRequestItem::serialize(void *data,uint32_t& pktsize)
|
|
||||||
{
|
|
||||||
#ifdef P3TURTLE_DEBUG
|
|
||||||
std::cerr << "RsTurtleFileCrcRequestItem::serialize(): serializing packet:" << std::endl ;
|
|
||||||
print(std::cerr,2) ;
|
|
||||||
#endif
|
|
||||||
uint32_t tlvsize = serial_size();
|
|
||||||
uint32_t offset = 0;
|
|
||||||
|
|
||||||
if (pktsize < tlvsize)
|
|
||||||
return false; /* not enough space */
|
|
||||||
|
|
||||||
pktsize = tlvsize;
|
|
||||||
|
|
||||||
bool ok = true;
|
|
||||||
|
|
||||||
ok &= setRsItemHeader(data,tlvsize,PacketId(), tlvsize);
|
|
||||||
|
|
||||||
/* skip the header */
|
|
||||||
offset += 8;
|
|
||||||
|
|
||||||
/* add mandatory parts first */
|
|
||||||
|
|
||||||
ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id);
|
|
||||||
|
|
||||||
if (offset != tlvsize)
|
|
||||||
{
|
|
||||||
ok = false;
|
|
||||||
std::cerr << "RsFileConfigSerialiser::serialiseTransfer() Size Error! " << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RsTurtleChunkCrcRequestItem::serialize(void *data,uint32_t& pktsize)
|
bool RsTurtleChunkCrcRequestItem::serialize(void *data,uint32_t& pktsize)
|
||||||
{
|
{
|
||||||
#ifdef P3TURTLE_DEBUG
|
#ifdef P3TURTLE_DEBUG
|
||||||
|
@ -273,7 +230,7 @@ bool RsTurtleChunkCrcItem::serialize(void *data,uint32_t& pktsize)
|
||||||
|
|
||||||
ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id);
|
ok &= setRawUInt32(data, tlvsize, &offset, tunnel_id);
|
||||||
ok &= setRawUInt32(data, tlvsize, &offset, chunk_number);
|
ok &= setRawUInt32(data, tlvsize, &offset, chunk_number);
|
||||||
ok &= setRawSha1(data, tlvsize, &offset, check_sum);
|
ok &= check_sum.serialise(data, tlvsize, offset) ;
|
||||||
|
|
||||||
if (offset != tlvsize)
|
if (offset != tlvsize)
|
||||||
{
|
{
|
||||||
|
@ -353,7 +310,7 @@ RsTurtleChunkCrcItem::RsTurtleChunkCrcItem(void *data,uint32_t pktsize)
|
||||||
bool ok = true ;
|
bool ok = true ;
|
||||||
ok &= getRawUInt32(data, pktsize, &offset, &tunnel_id) ;
|
ok &= getRawUInt32(data, pktsize, &offset, &tunnel_id) ;
|
||||||
ok &= getRawUInt32(data, pktsize, &offset, &chunk_number) ;
|
ok &= getRawUInt32(data, pktsize, &offset, &chunk_number) ;
|
||||||
ok &= getRawSha1(data, pktsize, &offset, check_sum) ;
|
ok &= check_sum.deserialise(data, pktsize, offset) ;
|
||||||
|
|
||||||
#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs).
|
#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs).
|
||||||
#else
|
#else
|
||||||
|
@ -363,28 +320,7 @@ RsTurtleChunkCrcItem::RsTurtleChunkCrcItem(void *data,uint32_t pktsize)
|
||||||
throw std::runtime_error("Unknown error while deserializing.") ;
|
throw std::runtime_error("Unknown error while deserializing.") ;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
RsTurtleFileCrcRequestItem::RsTurtleFileCrcRequestItem(void *data,uint32_t pktsize)
|
|
||||||
: RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_FILE_CRC_REQUEST)
|
|
||||||
{
|
|
||||||
setPriorityLevel(QOS_PRIORITY_RS_TURTLE_FILE_CRC_REQUEST) ;
|
|
||||||
#ifdef P3TURTLE_DEBUG
|
|
||||||
std::cerr << " type = file map request item" << std::endl ;
|
|
||||||
#endif
|
|
||||||
uint32_t offset = 8; // skip the header
|
|
||||||
|
|
||||||
/* add mandatory parts first */
|
|
||||||
|
|
||||||
bool ok = true ;
|
|
||||||
ok &= getRawUInt32(data, pktsize, &offset, &tunnel_id);
|
|
||||||
|
|
||||||
#ifdef WINDOWS_SYS // No Exceptions in Windows compile. (drbobs).
|
|
||||||
#else
|
|
||||||
if (offset != pktsize)
|
|
||||||
throw std::runtime_error("Size error while deserializing.") ;
|
|
||||||
if (!ok)
|
|
||||||
throw std::runtime_error("Unknown error while deserializing.") ;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
RsTurtleChunkCrcRequestItem::RsTurtleChunkCrcRequestItem(void *data,uint32_t pktsize)
|
RsTurtleChunkCrcRequestItem::RsTurtleChunkCrcRequestItem(void *data,uint32_t pktsize)
|
||||||
: RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST)
|
: RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST)
|
||||||
{
|
{
|
||||||
|
@ -596,14 +532,6 @@ std::ostream& RsTurtleFileMapRequestItem::print(std::ostream& o, uint16_t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::ostream& RsTurtleFileCrcRequestItem::print(std::ostream& o, uint16_t)
|
|
||||||
{
|
|
||||||
o << "File CRC request item:" << std::endl ;
|
|
||||||
|
|
||||||
o << " tunnel id : " << std::hex << tunnel_id << std::dec << std::endl ;
|
|
||||||
|
|
||||||
return o ;
|
|
||||||
}
|
|
||||||
std::ostream& RsTurtleChunkCrcRequestItem::print(std::ostream& o, uint16_t)
|
std::ostream& RsTurtleChunkCrcRequestItem::print(std::ostream& o, uint16_t)
|
||||||
{
|
{
|
||||||
o << "Chunk CRC request item:" << std::endl ;
|
o << "Chunk CRC request item:" << std::endl ;
|
||||||
|
|
|
@ -100,21 +100,6 @@ class RsTurtleFileMapItem: public RsTurtleGenericTunnelItem
|
||||||
virtual uint32_t serial_size() ;
|
virtual uint32_t serial_size() ;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RsTurtleFileCrcRequestItem: public RsTurtleGenericTunnelItem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RsTurtleFileCrcRequestItem() : RsTurtleGenericTunnelItem(RS_TURTLE_SUBTYPE_FILE_CRC_REQUEST) { setPriorityLevel(QOS_PRIORITY_RS_FILE_CRC_REQUEST);}
|
|
||||||
RsTurtleFileCrcRequestItem(void *data,uint32_t size) ; // deserialization
|
|
||||||
|
|
||||||
virtual bool shouldStampTunnel() const { return false ; }
|
|
||||||
virtual Direction travelingDirection() const { return DIRECTION_SERVER ; }
|
|
||||||
|
|
||||||
virtual std::ostream& print(std::ostream& o, uint16_t) ;
|
|
||||||
|
|
||||||
virtual bool serialize(void *data,uint32_t& size) ;
|
|
||||||
virtual uint32_t serial_size() ;
|
|
||||||
};
|
|
||||||
|
|
||||||
class RsTurtleChunkCrcRequestItem: public RsTurtleGenericTunnelItem
|
class RsTurtleChunkCrcRequestItem: public RsTurtleGenericTunnelItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -102,8 +102,10 @@ RsItem *pqiperson::GetItem()
|
||||||
|
|
||||||
bool pqiperson::RecvItem(RsItem *item)
|
bool pqiperson::RecvItem(RsItem *item)
|
||||||
{
|
{
|
||||||
|
#ifdef PERSON_DEBUG
|
||||||
std::cerr << "pqiperson::RecvItem()";
|
std::cerr << "pqiperson::RecvItem()";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
return pqipg->recvItem((RsRawItem *) item);
|
return pqipg->recvItem((RsRawItem *) item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ template<uint32_t ID_SIZE_IN_BYTES,bool UPPER_CASE,uint32_t UNIQUE_IDENTIFIER> c
|
||||||
inline uint32_t serial_size() const { return SIZE_IN_BYTES ; }
|
inline uint32_t serial_size() const { return SIZE_IN_BYTES ; }
|
||||||
bool serialise(void *data,uint32_t pktsize,uint32_t& offset) const
|
bool serialise(void *data,uint32_t pktsize,uint32_t& offset) const
|
||||||
{
|
{
|
||||||
if(offset + SIZE_IN_BYTES >= pktsize)
|
if(offset + SIZE_IN_BYTES > pktsize)
|
||||||
return false ;
|
return false ;
|
||||||
|
|
||||||
memcpy(&((uint8_t*)data)[offset],bytes,SIZE_IN_BYTES) ;
|
memcpy(&((uint8_t*)data)[offset],bytes,SIZE_IN_BYTES) ;
|
||||||
|
@ -111,7 +111,7 @@ template<uint32_t ID_SIZE_IN_BYTES,bool UPPER_CASE,uint32_t UNIQUE_IDENTIFIER> c
|
||||||
}
|
}
|
||||||
bool deserialise(void *data,uint32_t pktsize,uint32_t& offset)
|
bool deserialise(void *data,uint32_t pktsize,uint32_t& offset)
|
||||||
{
|
{
|
||||||
if(offset + SIZE_IN_BYTES >= pktsize)
|
if(offset + SIZE_IN_BYTES > pktsize)
|
||||||
return false ;
|
return false ;
|
||||||
|
|
||||||
memcpy(bytes,&((uint8_t*)data)[offset],SIZE_IN_BYTES) ;
|
memcpy(bytes,&((uint8_t*)data)[offset],SIZE_IN_BYTES) ;
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "services/p3heartbeat.h"
|
#include "services/p3heartbeat.h"
|
||||||
#include "serialiser/rsheartbeatitems.h"
|
#include "serialiser/rsheartbeatitems.h"
|
||||||
|
|
||||||
#define HEART_DEBUG 1
|
//#define HEART_DEBUG 1
|
||||||
|
|
||||||
|
|
||||||
p3heartbeat::p3heartbeat(p3LinkMgr *linkMgr, pqipersongrp *pqipg)
|
p3heartbeat::p3heartbeat(p3LinkMgr *linkMgr, pqipersongrp *pqipg)
|
||||||
|
|
|
@ -201,16 +201,25 @@ int p3FastService::sendItem(RsItem *si)
|
||||||
std::cerr << "************************************************************" << std::endl;
|
std::cerr << "************************************************************" << std::endl;
|
||||||
}
|
}
|
||||||
raw->setPriorityLevel(si->priority_level()) ;
|
raw->setPriorityLevel(si->priority_level()) ;
|
||||||
}
|
|
||||||
|
|
||||||
/* cleanup */
|
|
||||||
delete si;
|
|
||||||
|
|
||||||
#ifdef SERV_DEBUG
|
#ifdef SERV_DEBUG
|
||||||
std::cerr << "p3Service::send() returning RawItem.";
|
std::cerr << "p3Service::send() returning RawItem.";
|
||||||
std::cerr << std::endl;
|
std::cerr << std::endl;
|
||||||
#endif
|
#endif
|
||||||
return pqiService::send(raw);
|
delete si;
|
||||||
|
|
||||||
|
return pqiService::send(raw);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cerr << "p3service: item could not be properly serialised. Will be wasted. Item is: "<< std::endl;
|
||||||
|
si->print(std::cerr,0) ;
|
||||||
|
|
||||||
|
/* cleanup */
|
||||||
|
delete si;
|
||||||
|
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -262,6 +262,7 @@ int p3turtle::tick()
|
||||||
void p3turtle::locked_addDistantPeer(const TurtleFileHash&,TurtleTunnelId tid)
|
void p3turtle::locked_addDistantPeer(const TurtleFileHash&,TurtleTunnelId tid)
|
||||||
{
|
{
|
||||||
unsigned char tmp[RsPeerId::SIZE_IN_BYTES] ;
|
unsigned char tmp[RsPeerId::SIZE_IN_BYTES] ;
|
||||||
|
memset(tmp,0,RsPeerId::SIZE_IN_BYTES) ;
|
||||||
|
|
||||||
((uint32_t*)tmp)[0] = tid ;
|
((uint32_t*)tmp)[0] = tid ;
|
||||||
RsPeerId virtual_peer_id(tmp) ;
|
RsPeerId virtual_peer_id(tmp) ;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue