mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
- 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
This commit is contained in:
parent
a455bcc5d2
commit
3a82fffd0e
@ -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<RsItem *>& /*list*/)
|
||||
@ -868,6 +871,9 @@ bool ftServer::loadConfigMap(std::map<std::string, std::string> &/*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() " <<std::endl;
|
||||
/* create a packet */
|
||||
/* push to networking part */
|
||||
RsFileTransferDataRequestItem *rfi = new RsFileTransferDataRequestItem();
|
||||
@ -902,6 +909,9 @@ bool ftServer::sendDataRequest(const std::string& peerId, const std::string& has
|
||||
|
||||
bool ftServer::sendChunkMapRequest(const std::string& peerId,const std::string& hash,bool is_client)
|
||||
{
|
||||
#ifdef SERVER_DEBUG
|
||||
std::cerr << "ftServer::sendChunkMapRequest() to peer " << peerId << " for hash " << hash << std::endl;
|
||||
#endif
|
||||
if(mTurtleRouter->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<RsTurtleFileRequestItem *>(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<RsTurtleFileDataItem *>(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<RsTurtleFileMapItem *>(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<RsTurtleFileMapRequestItem *>(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<RsTurtleChunkCrcItem *>(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<RsTurtleChunkCrcRequestItem *>(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<std::pair<RsPeerId, CacheData> >::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<RsFileTransferChunkMapItem*>(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<RsFileTransferCacheItem*>(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<RsFileTransferCacheRequestItem*>(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<RsFileTransferCacheRequestItem*>(item) ;
|
||||
//#ifdef SERVER_DEBUG_CACHE
|
||||
// std::cerr << "ftServer::handleIncoming: received cache request from peer " << cr->PeerId() << std::endl;
|
||||
//#endif
|
||||
// }
|
||||
// break ;
|
||||
}
|
||||
|
||||
delete item ;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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] ;
|
||||
};
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -36,7 +36,6 @@ RsDisc *rsDisc = NULL;
|
||||
* #define P3DISC_DEBUG 1
|
||||
****/
|
||||
|
||||
|
||||
bool populateContactInfo(const peerState &detail, RsDiscContactItem *pkt)
|
||||
{
|
||||
pkt->clear();
|
||||
|
@ -23,8 +23,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
//#define P3TURTLE_DEBUG
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdexcept>
|
||||
#include <stdlib.h>
|
||||
@ -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<TurtleFileHash,std::string>::const_iterator it(_outgoing_file_hashes.begin());it!=_outgoing_file_hashes.end();++it)
|
||||
for(std::map<TurtleFileHash,RsTurtleClientService*>::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 ;
|
||||
|
Loading…
Reference in New Issue
Block a user