From 00196c58b87cabf705394d2fe77e7f677da1345d Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Feb 2014 15:00:30 +0000 Subject: [PATCH] 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 --- .../src/ft/ftturtlefiletransferitem.cc | 78 +------------------ .../src/ft/ftturtlefiletransferitem.h | 15 ---- libretroshare/src/pqi/pqiperson.cc | 2 + libretroshare/src/retroshare/rsids.h | 4 +- libretroshare/src/services/p3heartbeat.cc | 2 +- libretroshare/src/services/p3service.cc | 23 ++++-- libretroshare/src/turtle/p3turtle.cc | 1 + 7 files changed, 25 insertions(+), 100 deletions(-) diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.cc b/libretroshare/src/ft/ftturtlefiletransferitem.cc index 6e2646c19..ff9015ef0 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.cc +++ b/libretroshare/src/ft/ftturtlefiletransferitem.cc @@ -79,15 +79,6 @@ uint32_t RsTurtleFileMapItem::serial_size() 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 s = 0 ; @@ -95,7 +86,7 @@ uint32_t RsTurtleChunkCrcItem::serial_size() s += 8 ; // header s += 4 ; // tunnel id s += 4 ; // chunk number - s += 20 ; // check_sum + s += check_sum.serial_size() ; // check_sum return s ; } @@ -179,40 +170,6 @@ bool RsTurtleFileMapItem::serialize(void *data,uint32_t& pktsize) 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) { #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, chunk_number); - ok &= setRawSha1(data, tlvsize, &offset, check_sum); + ok &= check_sum.serialise(data, tlvsize, offset) ; if (offset != tlvsize) { @@ -353,7 +310,7 @@ RsTurtleChunkCrcItem::RsTurtleChunkCrcItem(void *data,uint32_t pktsize) bool ok = true ; ok &= getRawUInt32(data, pktsize, &offset, &tunnel_id) ; 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). #else @@ -363,28 +320,7 @@ RsTurtleChunkCrcItem::RsTurtleChunkCrcItem(void *data,uint32_t pktsize) throw std::runtime_error("Unknown error while deserializing.") ; #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) : 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) { o << "Chunk CRC request item:" << std::endl ; diff --git a/libretroshare/src/ft/ftturtlefiletransferitem.h b/libretroshare/src/ft/ftturtlefiletransferitem.h index ff5ac0491..7bf2e8e43 100644 --- a/libretroshare/src/ft/ftturtlefiletransferitem.h +++ b/libretroshare/src/ft/ftturtlefiletransferitem.h @@ -100,21 +100,6 @@ class RsTurtleFileMapItem: public RsTurtleGenericTunnelItem 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 { public: diff --git a/libretroshare/src/pqi/pqiperson.cc b/libretroshare/src/pqi/pqiperson.cc index ff88f7b31..2d0de8af2 100644 --- a/libretroshare/src/pqi/pqiperson.cc +++ b/libretroshare/src/pqi/pqiperson.cc @@ -102,8 +102,10 @@ RsItem *pqiperson::GetItem() bool pqiperson::RecvItem(RsItem *item) { +#ifdef PERSON_DEBUG std::cerr << "pqiperson::RecvItem()"; std::cerr << std::endl; +#endif return pqipg->recvItem((RsRawItem *) item); } diff --git a/libretroshare/src/retroshare/rsids.h b/libretroshare/src/retroshare/rsids.h index ec4341ab1..daacf20f7 100644 --- a/libretroshare/src/retroshare/rsids.h +++ b/libretroshare/src/retroshare/rsids.h @@ -102,7 +102,7 @@ template c inline uint32_t serial_size() const { return SIZE_IN_BYTES ; } 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 ; memcpy(&((uint8_t*)data)[offset],bytes,SIZE_IN_BYTES) ; @@ -111,7 +111,7 @@ template c } bool deserialise(void *data,uint32_t pktsize,uint32_t& offset) { - if(offset + SIZE_IN_BYTES >= pktsize) + if(offset + SIZE_IN_BYTES > pktsize) return false ; memcpy(bytes,&((uint8_t*)data)[offset],SIZE_IN_BYTES) ; diff --git a/libretroshare/src/services/p3heartbeat.cc b/libretroshare/src/services/p3heartbeat.cc index 853381533..c97b00e6a 100644 --- a/libretroshare/src/services/p3heartbeat.cc +++ b/libretroshare/src/services/p3heartbeat.cc @@ -26,7 +26,7 @@ #include "services/p3heartbeat.h" #include "serialiser/rsheartbeatitems.h" -#define HEART_DEBUG 1 +//#define HEART_DEBUG 1 p3heartbeat::p3heartbeat(p3LinkMgr *linkMgr, pqipersongrp *pqipg) diff --git a/libretroshare/src/services/p3service.cc b/libretroshare/src/services/p3service.cc index 3cf424f4a..c9fb53e41 100644 --- a/libretroshare/src/services/p3service.cc +++ b/libretroshare/src/services/p3service.cc @@ -201,16 +201,25 @@ int p3FastService::sendItem(RsItem *si) std::cerr << "************************************************************" << std::endl; } raw->setPriorityLevel(si->priority_level()) ; - } - - /* cleanup */ - delete si; #ifdef SERV_DEBUG - std::cerr << "p3Service::send() returning RawItem."; - std::cerr << std::endl; + std::cerr << "p3Service::send() returning RawItem."; + std::cerr << std::endl; #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 ; + } } diff --git a/libretroshare/src/turtle/p3turtle.cc b/libretroshare/src/turtle/p3turtle.cc index 9fabbd1fd..05e5d1984 100644 --- a/libretroshare/src/turtle/p3turtle.cc +++ b/libretroshare/src/turtle/p3turtle.cc @@ -262,6 +262,7 @@ int p3turtle::tick() void p3turtle::locked_addDistantPeer(const TurtleFileHash&,TurtleTunnelId tid) { unsigned char tmp[RsPeerId::SIZE_IN_BYTES] ; + memset(tmp,0,RsPeerId::SIZE_IN_BYTES) ; ((uint32_t*)tmp)[0] = tid ; RsPeerId virtual_peer_id(tmp) ;