From 3a82fffd0e3327e84b8779bdc4ea80cfbee49264 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 2 Oct 2013 19:56:01 +0000 Subject: [PATCH] - fixed bug (added missing call to addSerialType()) - removed unused RsFileTransferCacheRequestItem and all related functions - fixed bug in turtle router calling members of a deleted item - removed some debug info git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.6-initdev@6789 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/ft/ftserver.cc | 92 ++++++++++++---- libretroshare/src/pqi/p3netmgr.cc | 1 - libretroshare/src/pqi/pqiservice.cc | 1 + libretroshare/src/pqi/pqistreamer.cc | 1 - libretroshare/src/retroshare/rstypes.h | 2 + .../src/serialiser/rsfiletransferitems.cc | 104 +----------------- .../src/serialiser/rsfiletransferitems.h | 21 ---- libretroshare/src/services/p3discovery2.cc | 1 - libretroshare/src/turtle/p3turtle.cc | 14 +-- 9 files changed, 81 insertions(+), 156 deletions(-) diff --git a/libretroshare/src/ft/ftserver.cc b/libretroshare/src/ft/ftserver.cc index 933d99c55..8e3f34b2b 100644 --- a/libretroshare/src/ft/ftserver.cc +++ b/libretroshare/src/ft/ftserver.cc @@ -53,8 +53,8 @@ const int ftserverzone = 29539; #include "serialiser/rsserviceids.h" /*** - * #define SERVER_DEBUG 1 - * #define DEBUG_TICK 1 + * #define SERVER_DEBUG 1 + * #define SERVER_DEBUG_CACHE 1 ***/ static const time_t FILE_TRANSFER_LOW_PRIORITY_TASKS_PERIOD = 5 ; // low priority tasks handling every 5 seconds @@ -70,6 +70,8 @@ ftServer::ftServer(p3PeerMgr *pm, p3LinkMgr *lm) mFtDataplex(NULL), mFtSearch(NULL), srvMutex("ftServer") { mCacheStrapper = new ftCacheStrapper(lm); + + addSerialType(new RsFileTransferSerialiser()) ; } void ftServer::setConfigDirectory(std::string path) @@ -446,15 +448,11 @@ RsTurtleGenericTunnelItem *ftServer::deserialiseItem(void *data,uint32_t size) c #ifdef SERVER_DEBUG std::cerr << "p3turtle: deserialising packet: " << std::endl ; #endif -#ifdef SERVER_DEBUG if ((RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype)) || (RS_SERVICE_TYPE_TURTLE != getRsItemService(rstype))) { -#ifdef SERVER_DEBUG std::cerr << " Wrong type !!" << std::endl ; -#endif return NULL; /* wrong type */ } -#endif switch(getRsItemSubType(rstype)) { @@ -838,10 +836,15 @@ bool ftServer::shareDownloadDirectory(bool share) /**************** Config Interface *****************************/ /***************************************************************/ - /* Key Functions to be overloaded for Full Configuration */ +/* Key Functions to be overloaded for Full Configuration */ RsSerialiser *ftServer::setupSerialiser() { - return NULL; + RsSerialiser *rss = new RsSerialiser ; + rss->addSerialType(new RsFileTransferSerialiser) ; + + //rss->addSerialType(new RsGeneralConfigSerialiser()); + + return rss ; } bool ftServer::saveList(bool &/*cleanup*/, std::list& /*list*/) @@ -868,6 +871,9 @@ bool ftServer::loadConfigMap(std::map &/*configMap*/) /* Client Send */ bool ftServer::sendDataRequest(const std::string& peerId, const std::string& hash, uint64_t size, uint64_t offset, uint32_t chunksize) { +#ifdef SERVER_DEBUG + std::cerr << "ftServer::sendDataRequest() to peer " << peerId << " for hash " << hash << ", offset=" << offset << ", chunk size="<< chunksize << std::endl; +#endif if(mTurtleRouter->isTurtlePeer(peerId)) { RsTurtleFileRequestItem *item = new RsTurtleFileRequestItem ; @@ -879,6 +885,7 @@ bool ftServer::sendDataRequest(const std::string& peerId, const std::string& has } else { + std::cerr << "ftServer::sendDataRequest() " <isTurtlePeer(peerId)) { RsTurtleFileMapRequestItem *item = new RsTurtleFileMapRequestItem ; @@ -928,6 +938,9 @@ bool ftServer::sendChunkMapRequest(const std::string& peerId,const std::string& bool ftServer::sendChunkMap(const std::string& peerId,const std::string& hash,const CompressedChunkMap& map,bool is_client) { +#ifdef SERVER_DEBUG + std::cerr << "ftServer::sendChunkMap() to peer " << peerId << " for hash " << hash << std::endl; +#endif if(mTurtleRouter->isTurtlePeer(peerId)) { RsTurtleFileMapItem *item = new RsTurtleFileMapItem ; @@ -956,6 +969,9 @@ bool ftServer::sendChunkMap(const std::string& peerId,const std::string& hash,co bool ftServer::sendSingleChunkCRCRequest(const std::string& peerId,const std::string& hash,uint32_t chunk_number) { +#ifdef SERVER_DEBUG + std::cerr << "ftServer::sendSingleCRCRequest() to peer " << peerId << " for hash " << hash << ", chunk number=" << chunk_number << std::endl; +#endif if(mTurtleRouter->isTurtlePeer(peerId)) { RsTurtleChunkCrcRequestItem *item = new RsTurtleChunkCrcRequestItem; @@ -984,6 +1000,9 @@ bool ftServer::sendSingleChunkCRCRequest(const std::string& peerId,const std::st bool ftServer::sendSingleChunkCRC(const std::string& peerId,const std::string& hash,uint32_t chunk_number,const Sha1CheckSum& crc) { +#ifdef SERVER_DEBUG + std::cerr << "ftServer::sendSingleCRC() to peer " << peerId << " for hash " << hash << ", chunk number=" << chunk_number << std::endl; +#endif if(mTurtleRouter->isTurtlePeer(peerId)) { RsTurtleChunkCrcItem *item = new RsTurtleChunkCrcItem; @@ -1119,6 +1138,9 @@ void ftServer::receiveTurtleData(RsTurtleGenericTunnelItem *i, case RS_TURTLE_SUBTYPE_FILE_REQUEST: { RsTurtleFileRequestItem *item = dynamic_cast(i) ; +#ifdef SERVER_DEBUG + std::cerr << "ftServer::receiveTurtleData(): received file data request for " << hash << " from peer " << virtual_peer_id << std::endl; +#endif getMultiplexer()->recvDataRequest(virtual_peer_id,hash,0,item->chunk_offset,item->chunk_size) ; } break ; @@ -1126,6 +1148,9 @@ void ftServer::receiveTurtleData(RsTurtleGenericTunnelItem *i, case RS_TURTLE_SUBTYPE_FILE_DATA : { RsTurtleFileDataItem *item = dynamic_cast(i) ; +#ifdef SERVER_DEBUG + std::cerr << "ftServer::receiveTurtleData(): received file data for " << hash << " from peer " << virtual_peer_id << std::endl; +#endif getMultiplexer()->recvData(virtual_peer_id,hash,0,item->chunk_offset,item->chunk_size,item->chunk_data) ; item->chunk_data = NULL ; // this prevents deletion in the destructor of RsFileDataItem, because data will be deleted @@ -1137,6 +1162,9 @@ void ftServer::receiveTurtleData(RsTurtleGenericTunnelItem *i, case RS_TURTLE_SUBTYPE_FILE_MAP : { RsTurtleFileMapItem *item = dynamic_cast(i) ; +#ifdef SERVER_DEBUG + std::cerr << "ftServer::receiveTurtleData(): received chunk map for hash " << hash << " from peer " << virtual_peer_id << std::endl; +#endif getMultiplexer()->recvChunkMap(virtual_peer_id,hash,item->compressed_map,direction == RsTurtleGenericTunnelItem::DIRECTION_CLIENT) ; } break ; @@ -1144,6 +1172,9 @@ void ftServer::receiveTurtleData(RsTurtleGenericTunnelItem *i, case RS_TURTLE_SUBTYPE_FILE_MAP_REQUEST: { //RsTurtleFileMapRequestItem *item = dynamic_cast(i) ; +#ifdef SERVER_DEBUG + std::cerr << "ftServer::receiveTurtleData(): received chunkmap request for hash " << hash << " from peer " << virtual_peer_id << std::endl; +#endif getMultiplexer()->recvChunkMapRequest(virtual_peer_id,hash,direction == RsTurtleGenericTunnelItem::DIRECTION_CLIENT) ; } break ; @@ -1151,6 +1182,9 @@ void ftServer::receiveTurtleData(RsTurtleGenericTunnelItem *i, case RS_TURTLE_SUBTYPE_CHUNK_CRC : { RsTurtleChunkCrcItem *item = dynamic_cast(i) ; +#ifdef SERVER_DEBUG + std::cerr << "ftServer::receiveTurtleData(): received single chunk CRC for hash " << hash << " from peer " << virtual_peer_id << std::endl; +#endif getMultiplexer()->recvSingleChunkCRC(virtual_peer_id,hash,item->chunk_number,item->check_sum) ; } break ; @@ -1158,6 +1192,9 @@ void ftServer::receiveTurtleData(RsTurtleGenericTunnelItem *i, case RS_TURTLE_SUBTYPE_CHUNK_CRC_REQUEST: { RsTurtleChunkCrcRequestItem *item = dynamic_cast(i) ; +#ifdef SERVER_DEBUG + std::cerr << "ftServer::receiveTurtleData(): received single chunk CRC request for hash " << hash << " from peer " << virtual_peer_id << std::endl; +#endif getMultiplexer()->recvSingleChunkCRCRequest(virtual_peer_id,hash,item->chunk_number) ; } break ; @@ -1174,8 +1211,11 @@ int ftServer::tick() { bool moreToTick = false ; - moreToTick = handleIncoming() || moreToTick ; // order is important!! - moreToTick = handleCacheData() || moreToTick ; + if(handleIncoming()) + moreToTick = true; + + if(handleCacheData()) + moreToTick = true; static time_t last_law_priority_tasks_handling_time = 0 ; time_t now = time(NULL) ; @@ -1198,6 +1238,9 @@ bool ftServer::handleCacheData() std::list >::iterator it; int i=0 ; +#ifdef SERVER_DEBUG_CACHE + std::cerr << "handleCacheData() " << std::endl; +#endif mCacheStrapper->getCacheUpdates(cacheUpdates); for(it = cacheUpdates.begin(); it != cacheUpdates.end(); it++) { @@ -1214,7 +1257,7 @@ bool ftServer::handleCacheData() ci -> cacheType = (it->second).cid.type; ci -> cacheSubId = (it->second).cid.subid; -#ifdef SERVER_DEBUG +#ifdef SERVER_DEBUG_CACHE std::string out2 = "Outgoing CacheStrapper Update -> RsCacheItem:\n"; ci -> print_string(out2); std::cerr << out2 << std::endl; @@ -1234,6 +1277,9 @@ int ftServer::handleIncoming() int nhandled = 0 ; RsItem *item = NULL ; +#ifdef SERVER_DEBUG + std::cerr << "ftServer::handleIncoming() " << std::endl; +#endif while(NULL != (item = recvItem())) { @@ -1279,7 +1325,7 @@ int ftServer::handleIncoming() { RsFileTransferChunkMapItem *f = dynamic_cast(item) ; #ifdef SERVER_DEBUG - std::cerr << "ftServer::handleIncoming: received chunkmap for hash " << f->hash << ", client=" << f->is_client << ", map=" << f->compressed_map << std::endl; + std::cerr << "ftServer::handleIncoming: received chunkmap for hash " << f->hash << ", client=" << f->is_client << /*", map=" << f->compressed_map <<*/ std::endl; #endif mFtDataplex->recvChunkMap(f->PeerId(), f->hash,f->compressed_map,f->is_client) ; } @@ -1308,8 +1354,8 @@ int ftServer::handleIncoming() case RS_PKT_SUBTYPE_FT_CACHE_ITEM: { RsFileTransferCacheItem *ci = dynamic_cast(item) ; -#ifdef SERVER_DEBUG - std::cerr << "ftServer::handleIncoming: received cache item hash=" << ci->file.hash << ". from peer " << ci->PeerId() << std::ednl; +#ifdef SERVER_DEBUG_CACHE + std::cerr << "ftServer::handleIncoming: received cache item hash=" << ci->file.hash << ". from peer " << ci->PeerId() << std::endl; #endif /* these go to the CacheStrapper! */ CacheData data; @@ -1325,15 +1371,15 @@ int ftServer::handleIncoming() } break ; - case RS_PKT_SUBTYPE_FT_CACHE_REQUEST: - { - // do nothing - RsFileTransferCacheRequestItem *cr = dynamic_cast(item) ; -#ifdef SERVER_DEBUG - std::cerr << "ftServer::handleIncoming: received cache request from peer " << cr->PeerId() << std::ednl; -#endif - } - break ; +// case RS_PKT_SUBTYPE_FT_CACHE_REQUEST: +// { +// // do nothing +// RsFileTransferCacheRequestItem *cr = dynamic_cast(item) ; +//#ifdef SERVER_DEBUG_CACHE +// std::cerr << "ftServer::handleIncoming: received cache request from peer " << cr->PeerId() << std::endl; +//#endif +// } +// break ; } delete item ; diff --git a/libretroshare/src/pqi/p3netmgr.cc b/libretroshare/src/pqi/p3netmgr.cc index c76b54bdb..a56d165e8 100644 --- a/libretroshare/src/pqi/p3netmgr.cc +++ b/libretroshare/src/pqi/p3netmgr.cc @@ -74,7 +74,6 @@ const uint32_t MIN_TIME_BETWEEN_NET_RESET = 5; * #define NETMGR_DEBUG_STATEBOX 1 ***/ - pqiNetStatus::pqiNetStatus() :mLocalAddrOk(false), mExtAddrOk(false), mExtAddrStableOk(false), mUpnpOk(false), mDhtOk(false), mResetReq(false) diff --git a/libretroshare/src/pqi/pqiservice.cc b/libretroshare/src/pqi/pqiservice.cc index c9301db43..360ba900f 100644 --- a/libretroshare/src/pqi/pqiservice.cc +++ b/libretroshare/src/pqi/pqiservice.cc @@ -70,6 +70,7 @@ int p3ServiceServer::addService(pqiService *ts) it = services.find(ts -> getType()); if (it != services.end()) { + std::cerr << "p3ServiceServer::addService(): Service already added with id " << ts->getType() << "!" << std::endl; // it exists already! return -1; } diff --git a/libretroshare/src/pqi/pqistreamer.cc b/libretroshare/src/pqi/pqistreamer.cc index ca4b533ab..5221db0cc 100644 --- a/libretroshare/src/pqi/pqistreamer.cc +++ b/libretroshare/src/pqi/pqistreamer.cc @@ -45,7 +45,6 @@ const int PQISTREAM_ABS_MAX = 100000000; /* 100 MB/sec (actually per loop) */ #define DEBUG_PQISTREAMER 1 ***/ - #ifdef DEBUG_TRANSFERS #include "util/rsprint.h" #endif diff --git a/libretroshare/src/retroshare/rstypes.h b/libretroshare/src/retroshare/rstypes.h index b8a3ae4ea..5647337db 100644 --- a/libretroshare/src/retroshare/rstypes.h +++ b/libretroshare/src/retroshare/rstypes.h @@ -70,6 +70,8 @@ class Sha1CheckSum std::string toStdString() const ; bool operator==(const Sha1CheckSum& s) const ; + + friend std::ostream& operator<<(std::ostream& out,const Sha1CheckSum& sum) { return out << sum.toStdString() ; } // private: uint32_t fourbytes[5] ; }; diff --git a/libretroshare/src/serialiser/rsfiletransferitems.cc b/libretroshare/src/serialiser/rsfiletransferitems.cc index 32d87f4dd..59565fba4 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.cc +++ b/libretroshare/src/serialiser/rsfiletransferitems.cc @@ -56,7 +56,6 @@ RsFileTransferItem *RsFileTransferSerialiser::deserialise(void *data, uint32_t * switch(getRsItemSubType(rstype)) { - case RS_PKT_SUBTYPE_FT_CACHE_REQUEST: return deserialise_RsFileTransferCacheRequestItem(data, *pktsize); case RS_PKT_SUBTYPE_FT_CACHE_ITEM: return deserialise_RsFileTransferCacheItem(data, *pktsize); case RS_PKT_SUBTYPE_FT_DATA_REQUEST: return deserialise_RsFileTransferDataRequestItem(data, *pktsize); case RS_PKT_SUBTYPE_FT_DATA: return deserialise_RsFileTransferDataItem(data, *pktsize); @@ -65,6 +64,7 @@ RsFileTransferItem *RsFileTransferSerialiser::deserialise(void *data, uint32_t * case RS_PKT_SUBTYPE_FT_CHUNK_CRC_REQUEST: return deserialise_RsFileTransferSingleChunkCrcRequestItem(data,*pktsize) ; case RS_PKT_SUBTYPE_FT_CHUNK_CRC: return deserialise_RsFileTransferSingleChunkCrcItem(data,*pktsize) ; default: + std::cerr << "RsFileTransferSerialiser::deserialise(): Could not de-serialise item. SubPacket id = " << std::hex << getRsItemSubType(rstype) << " id = " << rstype << std::dec << std::endl; return NULL; } return NULL; @@ -74,17 +74,6 @@ RsFileTransferItem *RsFileTransferSerialiser::deserialise(void *data, uint32_t * /* OUTPUTS */ /**********************************************************************************************/ -std::ostream& RsFileTransferCacheRequestItem::print(std::ostream &out, uint16_t indent) -{ - printRsItemBase(out, "RsFileTransferCacheRequestItem", indent); - uint16_t int_Indent = indent + 2; - printIndent(out, int_Indent); - out << "CacheId: " << cacheType << "/" << cacheSubId << std::endl; - file.print(out, int_Indent); - printRsItemEnd(out, "RsFileTransferCacheRequestItem", indent); - return out; -} - std::ostream& RsFileTransferCacheItem::print(std::ostream &out, uint16_t indent) { printRsItemBase(out, "RsFileTransferCacheItem", indent); @@ -183,14 +172,6 @@ uint32_t RsFileTransferDataItem::serial_size() return s; } -uint32_t RsFileTransferCacheRequestItem::serial_size() -{ - uint32_t s = 8; /* header */ - s += 4; /* type/subid */ - s += file.TlvSize(); - - return s; -} uint32_t RsFileTransferChunkMapRequestItem::serial_size() { uint32_t s = 8; /* header */ @@ -245,13 +226,7 @@ void RsFileTransferDataItem::clear() { fd.TlvClear(); } -void RsFileTransferCacheRequestItem::clear() -{ - cacheType = 0; - cacheSubId = 0; - file.TlvClear(); -} - + /**********************************************************************************************/ /* SERIALISATION */ /**********************************************************************************************/ @@ -372,29 +347,6 @@ bool RsFileTransferChunkMapItem::serialise(void *data, uint32_t& pktsize) return ok; } -/* serialise the data to the buffer */ -bool RsFileTransferCacheRequestItem::serialise(void *data, uint32_t& pktsize) -{ - uint32_t tlvsize,offset=0; - bool ok = true; - - if(!serialise_header(data,pktsize,tlvsize,offset)) - return false ; - - /* add mandatory parts first */ - ok &= setRawUInt16(data, tlvsize, &offset, cacheType); - ok &= setRawUInt16(data, tlvsize, &offset, cacheSubId); - ok &= file.SetTlv(data, tlvsize, &offset); - - if (offset != tlvsize) - { - ok = false; - std::cerr << "RsFileItemSerialiser::serialiseReq() Size Error! " << std::endl; - } - - return ok; -} - /* serialise the data to the buffer */ bool RsFileTransferDataItem::serialise(void *data, uint32_t& pktsize) { @@ -482,58 +434,6 @@ bool RsFileTransferCacheItem::serialise(void *data, uint32_t& pktsize) /* DESERIALISATION */ /**********************************************************************************************/ -RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferCacheRequestItem(void *data, uint32_t pktsize) -{ - /* get the type and size */ - uint32_t rstype = getRsItemId(data); - uint32_t rssize = getRsItemSize(data); - - uint32_t offset = 0; - - - if(RS_PKT_VERSION_SERVICE != getRsItemVersion(rstype) || RS_SERVICE_TYPE_FILE_TRANSFER != getRsItemType(rstype) || RS_PKT_SUBTYPE_FT_CACHE_REQUEST != getRsItemSubType(rstype)) - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferCacheRequest(): wong subtype!" << std::endl; - return NULL; /* wrong type */ - } - - if (pktsize < rssize) /* check size */ - { - std::cerr << "RsFileTransferSerialiser::deserialise_RsFileTransferCacheRequest(): size inconsistency!" << std::endl; - return NULL; /* not enough data */ - } - - bool ok = true; - - /* ready to load */ - RsFileTransferCacheRequestItem *item = new RsFileTransferCacheRequestItem(); - item->clear(); - - /* skip the header */ - offset += 8; - - /* get mandatory parts first */ - ok &= getRawUInt16(data, rssize, &offset, &(item->cacheType)); - ok &= getRawUInt16(data, rssize, &offset, &(item->cacheSubId)); - ok &= item->file.GetTlv(data, rssize, &offset); - - if (offset != rssize) - { - /* error */ - delete item; - return NULL; - } - - if (!ok) - { - delete item; - return NULL; - } - - return item; -} - - RsFileTransferItem *RsFileTransferSerialiser::deserialise_RsFileTransferCacheItem(void *data, uint32_t pktsize) { /* get the type and size */ diff --git a/libretroshare/src/serialiser/rsfiletransferitems.h b/libretroshare/src/serialiser/rsfiletransferitems.h index 96697b1e3..1451cb959 100644 --- a/libretroshare/src/serialiser/rsfiletransferitems.h +++ b/libretroshare/src/serialiser/rsfiletransferitems.h @@ -194,26 +194,6 @@ class RsFileTransferSingleChunkCrcItem: public RsFileTransferItem Sha1CheckSum check_sum ; // CRC32 map of the file. }; -class RsFileTransferCacheRequestItem: public RsFileTransferItem -{ - public: - RsFileTransferCacheRequestItem() :RsFileTransferItem(RS_PKT_SUBTYPE_FT_CACHE_REQUEST) - { - setPriorityLevel(QOS_PRIORITY_RS_CACHE_REQUEST); - } - virtual ~RsFileTransferCacheRequestItem() {} - virtual bool serialise(void *data,uint32_t& size) ; - virtual uint32_t serial_size() ; - virtual void clear(); - std::ostream &print(std::ostream &out, uint16_t indent = 0); - - // private part - // - uint16_t cacheType; - uint16_t cacheSubId; - RsTlvFileItem file; /* file information */ -}; - class RsFileTransferCacheItem: public RsFileTransferItem { public: @@ -256,7 +236,6 @@ class RsFileTransferSerialiser: public RsSerialType virtual RsFileTransferItem *deserialise(void *data, uint32_t *size); private: - RsFileTransferItem *deserialise_RsFileTransferCacheRequestItem(void *data, uint32_t pktsize); RsFileTransferItem *deserialise_RsFileTransferCacheItem(void *data, uint32_t pktsize); RsFileTransferItem *deserialise_RsFileTransferChunkMapRequestItem(void *data, uint32_t pktsize); RsFileTransferItem *deserialise_RsFileTransferChunkMapItem(void *data, uint32_t pktsize); diff --git a/libretroshare/src/services/p3discovery2.cc b/libretroshare/src/services/p3discovery2.cc index 0fb722fd8..39981a7d1 100644 --- a/libretroshare/src/services/p3discovery2.cc +++ b/libretroshare/src/services/p3discovery2.cc @@ -36,7 +36,6 @@ RsDisc *rsDisc = NULL; * #define P3DISC_DEBUG 1 ****/ - bool populateContactInfo(const peerState &detail, RsDiscContactItem *pkt) { pkt->clear(); diff --git a/libretroshare/src/turtle/p3turtle.cc b/libretroshare/src/turtle/p3turtle.cc index abd2baa84..34c61a868 100644 --- a/libretroshare/src/turtle/p3turtle.cc +++ b/libretroshare/src/turtle/p3turtle.cc @@ -23,8 +23,6 @@ * */ -//#define P3TURTLE_DEBUG - #include #include #include @@ -1103,7 +1101,7 @@ bool p3turtle::getTunnelServiceInfo(TurtleTunnelId tunnel_id,std::string& vpid,s if(it2 == _local_tunnels.end()) { #ifdef P3TURTLE_DEBUG - std::cerr << "p3turtle: unknown tunnel id " << (void*)item->tunnelId() << std::endl ; + std::cerr << "p3turtle: unknown tunnel id " << (void*)tunnel_id << std::endl ; #endif return false; } @@ -1450,6 +1448,8 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item) res_item->tunnel_id = item->partial_tunnel_id ^ generatePersonalFilePrint(item->file_hash,false) ; res_item->PeerId(item->PeerId()) ; + TurtleTunnelId t_id = res_item->tunnel_id ; + sendItem(res_item) ; // Note in the tunnels list that we have an ending tunnel here. @@ -1461,11 +1461,11 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item) tt.transfered_bytes = 0 ; tt.speed_Bps = 0.0f ; - _local_tunnels[res_item->tunnel_id] = tt ; + _local_tunnels[t_id] = tt ; // We add a virtual peer for that tunnel+hash combination. // - locked_addDistantPeer(item->file_hash,res_item->tunnel_id) ; + locked_addDistantPeer(item->file_hash,t_id) ; // Store some info string about the tunnel. // @@ -1473,7 +1473,7 @@ void p3turtle::handleTunnelRequest(RsTurtleOpenTunnelItem *item) // Notify the client service that there's a new virtual peer id available as a client. // - service->addVirtualPeer(item->file_hash,_local_tunnels[res_item->tunnel_id].vpid,RsTurtleGenericTunnelItem::DIRECTION_CLIENT) ; + service->addVirtualPeer(item->file_hash,_local_tunnels[t_id].vpid,RsTurtleGenericTunnelItem::DIRECTION_CLIENT) ; // We return straight, because when something is found, there's no need to digg a tunnel further. // @@ -2093,7 +2093,7 @@ void p3turtle::dumpState() //std::cerr << ", last_req=" << (void*)it->second.last_request << ", time_stamp = " << it->second.time_stamp << "(" << now-it->second.time_stamp << " secs ago)" << std::endl ; } std::cerr << " Active outgoing file hashes: " << _outgoing_file_hashes.size() << std::endl ; - for(std::map::const_iterator it(_outgoing_file_hashes.begin());it!=_outgoing_file_hashes.end();++it) + for(std::map::const_iterator it(_outgoing_file_hashes.begin());it!=_outgoing_file_hashes.end();++it) std::cerr << " hash=0x" << it->first << std::endl ; std::cerr << " Local tunnels:" << std::endl ;