Improvements/bugfixes to File Transfer.

* Lots more debugging messages.
 * Fixed Sleep / sleep issue on windows.
 * added pthread / WSAStartup.
 * added ownId to ftDataMultiplex for loopback file transfer.
 * now start ftDataMultiplex thread.
 * several bugfixes in ftfilecreator



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@710 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2008-08-30 01:07:24 +00:00
parent 059effcfac
commit f7fca4295b
15 changed files with 312 additions and 26 deletions

View File

@ -311,14 +311,27 @@ bool ftController::FileDownloads(std::list<std::string> &hashs)
/* Directory Handling */ /* Directory Handling */
bool ftController::setDownloadDirectory(std::string path) bool ftController::setDownloadDirectory(std::string path)
{ {
#ifdef CONTROL_DEBUG
std::cerr << "ftController::setDownloadDirectory(" << path << ")";
std::cerr << std::endl;
#endif
/* check if it exists */ /* check if it exists */
if (RsDirUtil::checkCreateDirectory(path)) if (RsDirUtil::checkCreateDirectory(path))
{ {
RsStackMutex stack(ctrlMutex); /******* LOCKED ********/ RsStackMutex stack(ctrlMutex); /******* LOCKED ********/
mDownloadPath = path; mDownloadPath = path;
#ifdef CONTROL_DEBUG
std::cerr << "ftController::setDownloadDirectory() Okay!";
std::cerr << std::endl;
#endif
return true; return true;
} }
#ifdef CONTROL_DEBUG
std::cerr << "ftController::setDownloadDirectory() Failed";
std::cerr << std::endl;
#endif
return false; return false;
} }

View File

@ -58,9 +58,9 @@ ftRequest::ftRequest(uint32_t type, std::string peerId, std::string hash, uint64
return; return;
} }
ftDataMultiplex::ftDataMultiplex(ftDataSend *server, ftSearch *search) ftDataMultiplex::ftDataMultiplex(std::string ownId, ftDataSend *server, ftSearch *search)
:RsQueueThread(DMULTIPLEX_MIN, DMULTIPLEX_MAX, DMULTIPLEX_RELAX), :RsQueueThread(DMULTIPLEX_MIN, DMULTIPLEX_MAX, DMULTIPLEX_RELAX),
mDataSend(server), mSearch(search) mDataSend(server), mSearch(search), mOwnId(ownId)
{ {
return; return;
} }
@ -247,16 +247,28 @@ bool ftDataMultiplex::doWork()
switch(req.mType) switch(req.mType)
{ {
case FT_DATA: case FT_DATA:
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::doWork() Handling FT_DATA";
std::cerr << std::endl;
#endif
handleRecvData(req.mPeerId, req.mHash, req.mSize, handleRecvData(req.mPeerId, req.mHash, req.mSize,
req.mOffset, req.mChunk, req.mData); req.mOffset, req.mChunk, req.mData);
break; break;
case FT_DATA_REQ: case FT_DATA_REQ:
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::doWork() Handling FT_DATA_REQ";
std::cerr << std::endl;
#endif
handleRecvDataRequest(req.mPeerId, req.mHash, handleRecvDataRequest(req.mPeerId, req.mHash,
req.mSize, req.mOffset, req.mChunk); req.mSize, req.mOffset, req.mChunk);
break; break;
default: default:
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::doWork() Ignoring UNKNOWN";
std::cerr << std::endl;
#endif
break; break;
} }
} }
@ -278,6 +290,10 @@ bool ftDataMultiplex::doWork()
mSearchQueue.pop_front(); mSearchQueue.pop_front();
} }
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::doWork() Handling Search Request";
std::cerr << std::endl;
#endif
handleSearchRequest(req.mPeerId, req.mHash, req.mSize, handleSearchRequest(req.mPeerId, req.mHash, req.mSize,
req.mOffset, req.mChunk); req.mOffset, req.mChunk);
@ -293,9 +309,18 @@ bool ftDataMultiplex::handleRecvData(std::string peerId,
std::map<std::string, ftClient>::iterator it; std::map<std::string, ftClient>::iterator it;
if (mClients.end() == (it = mClients.find(hash))) if (mClients.end() == (it = mClients.find(hash)))
{ {
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::handleRecvData() ERROR: No matching Client!";
std::cerr << std::endl;
#endif
/* error */ /* error */
return false; return false;
} }
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::handleRecvData() Passing to Module";
std::cerr << std::endl;
#endif
(it->second).mModule->recvFileData(peerId, offset, chunksize, data); (it->second).mModule->recvFileData(peerId, offset, chunksize, data);
@ -312,8 +337,20 @@ bool ftDataMultiplex::handleRecvDataRequest(std::string peerId,
RsStackMutex stack(dataMtx); /******* LOCK MUTEX ******/ RsStackMutex stack(dataMtx); /******* LOCK MUTEX ******/
std::map<std::string, ftClient>::iterator cit; std::map<std::string, ftClient>::iterator cit;
if (mClients.end() != (cit = mClients.find(hash))) if (mOwnId == peerId)
{ {
/* own requests must be passed to Servers */
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::handleRecvData() OwnId, so skip Clients...";
std::cerr << std::endl;
#endif
}
else if (mClients.end() != (cit = mClients.find(hash)))
{
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::handleRecvData() Matched to a Client.";
std::cerr << std::endl;
#endif
locked_handleServerRequest((cit->second).mCreator, locked_handleServerRequest((cit->second).mCreator,
peerId, hash, size, offset, chunksize); peerId, hash, size, offset, chunksize);
return true; return true;
@ -322,11 +359,19 @@ bool ftDataMultiplex::handleRecvDataRequest(std::string peerId,
std::map<std::string, ftFileProvider *>::iterator sit; std::map<std::string, ftFileProvider *>::iterator sit;
if (mServers.end() != (sit = mServers.find(hash))) if (mServers.end() != (sit = mServers.find(hash)))
{ {
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::handleRecvData() Matched to a Provider.";
std::cerr << std::endl;
#endif
locked_handleServerRequest(sit->second, locked_handleServerRequest(sit->second,
peerId, hash, size, offset, chunksize); peerId, hash, size, offset, chunksize);
return true; return true;
} }
#ifdef MPLEX_DEBUG
std::cerr << "ftDataMultiplex::handleRecvData() No Match... adding to Search Queue.";
std::cerr << std::endl;
#endif
/* Add to Search Queue */ /* Add to Search Queue */
mSearchQueue.push_back( mSearchQueue.push_back(

View File

@ -84,7 +84,7 @@ class ftDataMultiplex: public ftDataRecv, public RsQueueThread
public: public:
ftDataMultiplex(ftDataSend *server, ftSearch *search); ftDataMultiplex(std::string ownId, ftDataSend *server, ftSearch *search);
/* ftController Interface */ /* ftController Interface */
bool addTransferModule(ftTransferModule *mod, ftFileCreator *f); bool addTransferModule(ftTransferModule *mod, ftFileCreator *f);
@ -153,6 +153,7 @@ bool locked_handleServerRequest(ftFileProvider *provider,
ftDataSend *mDataSend; ftDataSend *mDataSend;
ftSearch *mSearch; ftSearch *mSearch;
std::string mOwnId;
}; };
#endif #endif

View File

@ -32,6 +32,10 @@
* *
*/ */
#ifdef WIN32
#include "util/rswin.h"
#endif
#include "ft/ftextralist.h" #include "ft/ftextralist.h"
#include "ft/ftdatamultiplex.h" #include "ft/ftdatamultiplex.h"
#include "ft/ftfilesearch.h" #include "ft/ftfilesearch.h"
@ -93,7 +97,7 @@ int main(int argc, char **argv)
ftDataSend *ftds = new ftDataSendDummy(); ftDataSend *ftds = new ftDataSendDummy();
/* setup Actual Test bit */ /* setup Actual Test bit */
ftDataMultiplex *ftmplex = new ftDataMultiplex(ftds, ftfs); ftDataMultiplex *ftmplex = new ftDataMultiplex("ownId", ftds, ftfs);
ftmplex->start(); ftmplex->start();
/* Setup Search with some valid results */ /* Setup Search with some valid results */

View File

@ -23,6 +23,10 @@
* *
*/ */
#ifdef WIN32
#include "util/rswin.h"
#endif
#include "ft/ftextralist.h" #include "ft/ftextralist.h"
extern "C" void* runExtraList(void* p) extern "C" void* runExtraList(void* p)
@ -37,6 +41,7 @@ extern "C" void* runExtraList(void* p)
{ {
//eList->tick(); //eList->tick();
sleep(1); sleep(1);
} }
delete eList; delete eList;
@ -113,6 +118,7 @@ int main(int argc, char **argv)
while(1) while(1)
{ {
sleep(period); sleep(period);
displayExtraListDetails(eList, toHash, hashed); displayExtraListDetails(eList, toHash, hashed);
} }
} }

View File

@ -14,6 +14,18 @@ hash, std::string chunker): ftFileProvider(path,size,hash)
/* /*
* FIXME any inits to do? * FIXME any inits to do?
*/ */
#ifdef FILE_DEBUG
std::cerr << "ftFileCreator()";
std::cerr << std::endl;
std::cerr << "\tpath: " << path;
std::cerr << std::endl;
std::cerr << "\tsize: " << size;
std::cerr << std::endl;
std::cerr << "\thash: " << hash;
std::cerr << std::endl;
#endif
initialize(chunker); initialize(chunker);
} }
@ -36,7 +48,10 @@ int ftFileCreator::initializeFileAttrs()
/* /*
* check if the file exists * check if the file exists
*/ */
std::cout << "ftFileProvider::initializeFileAttrs() Filename: " << file_name; #ifdef FILE_DEBUG
std::cerr << "ftFileCreator::initializeFileAttrs() Filename: " << file_name;
std::cerr << std::endl;
#endif
/* /*
* attempt to open file in writing mode * attempt to open file in writing mode
@ -45,7 +60,9 @@ int ftFileCreator::initializeFileAttrs()
fd = fopen(file_name.c_str(), "w+b"); fd = fopen(file_name.c_str(), "w+b");
if (!fd) if (!fd)
{ {
std::cout << "ftFileProvider::initializeFileAttrs() Failed to open (w+b): " << file_name << std::endl; #ifdef FILE_DEBUG
std::cerr << "ftFileCreator::initializeFileAttrs() Failed to open (w+b): " << file_name << std::endl;
#endif
return 0; return 0;
} }
@ -56,23 +73,38 @@ int ftFileCreator::initializeFileAttrs()
*/ */
if (0 != fseek(fd, 0L, SEEK_END)) if (0 != fseek(fd, 0L, SEEK_END))
{ {
std::cerr << "ftFileProvider::initializeFileAttrs() Seek Failed" << std::endl; std::cerr << "ftFileCreator::initializeFileAttrs() Seek Failed" << std::endl;
return 0; return 0;
} }
/* /*
* get the file length * get the file length
*/ */
recv_size = ftell(fd); recv_size = ftell(fd);
#ifdef FILE_DEBUG
std::cerr << "ftFileCreator::initializeFileAttrs() recv_size: " << recv_size << std::endl;
#endif
return 1; return 1;
} }
bool ftFileCreator::addFileData(uint64_t offset, uint32_t chunk_size, void *data) bool ftFileCreator::addFileData(uint64_t offset, uint32_t chunk_size, void *data)
{ {
#ifdef FILE_DEBUG
std::cerr << "ftFileCreator::addFileData(";
std::cerr << offset;
std::cerr << ", " << chunk_size;
std::cerr << ", " << data << ")";
std::cerr << std::endl;
#endif
RsStackMutex stack(ftcMutex); /********** STACK LOCKED MTX ******/ RsStackMutex stack(ftcMutex); /********** STACK LOCKED MTX ******/
/* check the status */ /* check the status */
if (fd==NULL) if (fd==NULL)
{ {
#ifdef FILE_DEBUG
std::cerr << "ftFileCreator::addFileData() initialising";
std::cerr << std::endl;
#endif
int init = initializeFileAttrs(); int init = initializeFileAttrs();
if (init ==0) { if (init ==0) {
std::cerr <<"Initialization Failed" << std::endl; std::cerr <<"Initialization Failed" << std::endl;
@ -116,6 +148,13 @@ bool ftFileCreator::addFileData(uint64_t offset, uint32_t chunk_size, void *data
pos = ftell(fd); pos = ftell(fd);
#ifdef FILE_DEBUG
std::cerr << "ftFileCreator::addFileData() added Data...";
std::cerr << std::endl;
std::cerr << "recvd: " << recv_size;
std::cerr << " pos: " << pos;
std::cerr << std::endl;
#endif
/* /*
* Notify ftFileChunker about chunks received * Notify ftFileChunker about chunks received
*/ */
@ -190,10 +229,16 @@ int ftFileChunker::splitFile(){
#ifdef FILE_DEBUG #ifdef FILE_DEBUG
std::cerr << "ftFileChunker::splitFile()"; std::cerr << "ftFileChunker::splitFile()";
std::cerr << std::endl; std::cerr << std::endl;
std::cerr << "\tfile_size: " << file_size;
std::cerr << std::endl;
std::cerr << "\tstd_chunk_size: " << std_chunk_size;
std::cerr << std::endl;
std::cerr << "\tnum_chunks: " << num_chunks; std::cerr << "\tnum_chunks: " << num_chunks;
std::cerr << std::endl; std::cerr << std::endl;
std::cerr << "\trem: " << rem; std::cerr << "\trem: " << rem;
std::cerr << std::endl; std::cerr << std::endl;
std::cerr << "\tmax_chunk_size: " << max_chunk_size;
std::cerr << std::endl;
#endif #endif
time_t now = time(NULL); time_t now = time(NULL);
@ -322,12 +367,26 @@ bool ftFileChunker::getMissingChunk(uint64_t &offset, uint32_t &chunk)
if (!found) if (!found)
{ {
#ifdef FILE_DEBUG
std::cerr << "ftFileChunker::getMissingChuck() FULL CHUNK not found";
std::cerr << std::endl;
#endif
i=0; i=0;
uint64_t max = allocationTable.at(i)->max_chunk_size; uint64_t max = allocationTable.at(i)->max_chunk_size;
uint64_t size = max; uint64_t size = max;
int maxi = -1; int maxi = -1;
if (max > 0)
{
maxi = 0;
}
while(i<allocationTable.size()) while(i<allocationTable.size())
{ {
#ifdef FILE_DEBUG
std::cerr << "Checking(" << i << ") " <<
allocationTable.at(i)->max_chunk_size;
std::cerr << std::endl;
#endif
size = allocationTable.at(i)->max_chunk_size; size = allocationTable.at(i)->max_chunk_size;
if(size > max) if(size > max)
{ {
@ -338,6 +397,12 @@ bool ftFileChunker::getMissingChunk(uint64_t &offset, uint32_t &chunk)
} }
if (maxi > -1) //maxi or max if (maxi > -1) //maxi or max
{ {
#ifdef FILE_DEBUG
std::cerr << "Biggest Avail Chunk: " << max;
std::cerr << std::endl;
#endif
offset = allocationTable.at(maxi)->offset; offset = allocationTable.at(maxi)->offset;
chunk = allocationTable.at(maxi)->max_chunk_size; chunk = allocationTable.at(maxi)->max_chunk_size;
chunks_after = chunk/std_chunk_size; //10KB chunks_after = chunk/std_chunk_size; //10KB
@ -361,6 +426,7 @@ bool ftFileChunker::getMissingChunk(uint64_t &offset, uint32_t &chunk)
allocationTable.at(maxi)->timestamp = time(NULL); allocationTable.at(maxi)->timestamp = time(NULL);
allocationTable.at(maxi)->chunk_status = ftChunk::ALLOCATED; allocationTable.at(maxi)->chunk_status = ftChunk::ALLOCATED;
found = true; found = true;
i = maxi;
} }
} //if not found } //if not found
@ -368,6 +434,9 @@ bool ftFileChunker::getMissingChunk(uint64_t &offset, uint32_t &chunk)
if (found) if (found)
{ {
// i represents index to chunk(s) we will use.
// chunks_after is the count of how many we will use.
std::cout << "Chunks remaining " << chunks_rem << std::endl; std::cout << "Chunks remaining " << chunks_rem << std::endl;
/* /*
* update all previous chunks max available size * update all previous chunks max available size
@ -399,6 +468,15 @@ bool ftFileChunker::getMissingChunk(uint64_t &offset, uint32_t &chunk)
} }
} }
else
{
#ifdef FILE_DEBUG
std::cerr << "ftFileChunker::getMissingChuck() not found";
std::cerr << std::endl;
#endif
}
return found; return found;
} }
@ -491,10 +569,32 @@ int ftFileChunker::notifyReceived(uint64_t offset, uint32_t chunk_size)
{ {
RsStackMutex stack(chunkerMutex); /********** STACK LOCKED MTX ******/ RsStackMutex stack(chunkerMutex); /********** STACK LOCKED MTX ******/
int index = offset / std_chunk_size; int index = offset / std_chunk_size;
/* should receive a multiple of chunk_size.... */
uint32_t chunks = chunk_size / std_chunk_size;
uint32_t rem_chunk = chunk_size % std_chunk_size;
#ifdef FILE_DEBUG
std::cerr << "ftFileChunkerr::notifyReceived(";
std::cerr << offset;
std::cerr << ", " << chunk_size << ")";
std::cerr << std::endl;
std::cerr << "\t# complete chunks: " << chunks;
std::cerr << std::endl;
std::cerr << "\trem_chunk: " << rem_chunk;
std::cerr << std::endl;
#endif
if(allocationTable.at(index)->chunk_status == ftChunk::ALLOCATED){ if(allocationTable.at(index)->chunk_status == ftChunk::ALLOCATED){
allocationTable.at(index)->chunk_status = ftChunk::RECEIVED; allocationTable.at(index)->chunk_status = ftChunk::RECEIVED;
aggregate_status += ftChunk::RECEIVED; aggregate_status += ftChunk::RECEIVED;
#ifdef FILE_DEBUG
std::cerr << "ftFileChunkerr::notifyReceived()";
std::cerr << " flagged as RECVD";
std::cerr << std::endl;
#endif
} }
return aggregate_status; return aggregate_status;
} }

View File

@ -101,12 +101,12 @@ void ftServer::SetupFtServer(NotifyBase *cb)
mFtSearch = new ftFileSearch(); mFtSearch = new ftFileSearch();
/* Transport */ /* Transport */
mFtDataplex = new ftDataMultiplex(this, mFtSearch); mFtDataplex = new ftDataMultiplex(ownId, this, mFtSearch);
/* make Controller */ /* make Controller */
mFtController = new ftController(mCacheStrapper, mFtDataplex, mConfigPath); mFtController = new ftController(mCacheStrapper, mFtDataplex, mConfigPath);
mFtController -> setFtSearch(mFtSearch); mFtController -> setFtSearch(mFtSearch);
std::string tmppath = "./"; std::string tmppath = ".";
mFtController->setPartialsDirectory(tmppath); mFtController->setPartialsDirectory(tmppath);
mFtController->setDownloadDirectory(tmppath); mFtController->setDownloadDirectory(tmppath);
@ -150,6 +150,9 @@ void ftServer::StartupThreads()
/* Controller thread */ /* Controller thread */
mFtController->start(); mFtController->start();
/* Dataplex */
mFtDataplex->start();
/* start own thread */ /* start own thread */
start(); start();
} }

View File

@ -29,6 +29,10 @@
* Put it all together, and make it compile. * Put it all together, and make it compile.
*/ */
#ifdef WIN32
#include "util/rswin.h"
#endif
#include "ft/ftserver.h" #include "ft/ftserver.h"
#include "ft/ftextralist.h" #include "ft/ftextralist.h"
@ -68,6 +72,29 @@ int main(int argc, char **argv)
std::map<std::string, ftServer *> mFtServers; std::map<std::string, ftServer *> mFtServers;
std::map<std::string, p3ConnectMgr *> mConnMgrs; std::map<std::string, p3ConnectMgr *> mConnMgrs;
#ifdef PTW32_STATIC_LIB
pthread_win32_process_attach_np();
#endif
#ifdef WIN32
// Windows Networking Init.
WORD wVerReq = MAKEWORD(2,2);
WSADATA wsaData;
if (0 != WSAStartup(wVerReq, &wsaData))
{
std::cerr << "Failed to Startup Windows Networking";
std::cerr << std::endl;
}
else
{
std::cerr << "Started Windows Networking";
std::cerr << std::endl;
}
#endif
while(-1 != (c = getopt(argc, argv, "d:p:s"))) while(-1 != (c = getopt(argc, argv, "d:p:s")))
{ {
switch (c) switch (c)
@ -95,12 +122,14 @@ int main(int argc, char **argv)
std::cerr << "Missing Files" << std::endl; std::cerr << "Missing Files" << std::endl;
usage(argv[0]); usage(argv[0]);
} }
std::cerr << "Point 1" << std::endl;
for(; optind < argc; optind++) for(; optind < argc; optind++)
{ {
std::cerr << "Adding: " << argv[optind] << std::endl; std::cerr << "Adding: " << argv[optind] << std::endl;
fileList.push_back(std::string(argv[optind])); fileList.push_back(std::string(argv[optind]));
} }
std::cerr << "Point 2" << std::endl;
/* We need to setup a series 2 - 4 different ftServers.... /* We need to setup a series 2 - 4 different ftServers....
* *
@ -115,8 +144,10 @@ int main(int argc, char **argv)
std::list<pqiAuthDetails> baseFriendList, friendList; std::list<pqiAuthDetails> baseFriendList, friendList;
std::list<pqiAuthDetails>::iterator fit; std::list<pqiAuthDetails>::iterator fit;
std::cerr << "Point 3" << std::endl;
P3Hub *testHub = new P3Hub(); P3Hub *testHub = new P3Hub();
testHub->start(); testHub->start();
std::cerr << "Point 4" << std::endl;
/* Setup Base Friend Info */ /* Setup Base Friend Info */
for(it = peerIds.begin(); it != peerIds.end(); it++) for(it = peerIds.begin(); it != peerIds.end(); it++)
@ -133,13 +164,15 @@ int main(int argc, char **argv)
std::cerr << "ftserver1test::setup peer: " << *it; std::cerr << "ftserver1test::setup peer: " << *it;
std::cerr << std::endl; std::cerr << std::endl;
} }
std::cerr << "Point 5" << std::endl;
std::ostringstream pname; std::ostringstream pname;
pname << "/tmp/rstst-" << time(NULL); pname << "./tmp/rstst-" << time(NULL);
std::string basepath = pname.str(); std::string basepath = pname.str();
RsDirUtil::checkCreateDirectory(basepath); RsDirUtil::checkCreateDirectory(basepath);
std::cerr << "Point 6" << std::endl;
for(it = peerIds.begin(); it != peerIds.end(); it++) for(it = peerIds.begin(); it != peerIds.end(); it++)

View File

@ -27,6 +27,11 @@
* ftServer2Test - Demonstrates how to check for test stuff. * ftServer2Test - Demonstrates how to check for test stuff.
*/ */
#ifdef WIN32
#include "util/rswin.h"
#endif
#include "ft/ftserver.h" #include "ft/ftserver.h"
#include "ft/ftextralist.h" #include "ft/ftextralist.h"
@ -83,6 +88,29 @@ int main(int argc, char **argv)
std::list<ftServer *> mOtherServers; std::list<ftServer *> mOtherServers;
std::list<std::string>::iterator eit; std::list<std::string>::iterator eit;
#ifdef PTW32_STATIC_LIB
pthread_win32_process_attach_np();
#endif
#ifdef WIN32
// Windows Networking Init.
WORD wVerReq = MAKEWORD(2,2);
WSADATA wsaData;
if (0 != WSAStartup(wVerReq, &wsaData))
{
std::cerr << "Failed to Startup Windows Networking";
std::cerr << std::endl;
}
else
{
std::cerr << "Started Windows Networking";
std::cerr << std::endl;
}
#endif
while(-1 != (c = getopt(argc, argv, "asd:p:e:"))) while(-1 != (c = getopt(argc, argv, "asd:p:e:")))
{ {
switch (c) switch (c)
@ -156,7 +184,7 @@ int main(int argc, char **argv)
} }
std::ostringstream pname; std::ostringstream pname;
pname << "/tmp/rstst-" << time(NULL); pname << "./tmp/rstst-" << time(NULL);
std::string basepath = pname.str(); std::string basepath = pname.str();
RsDirUtil::checkCreateDirectory(basepath); RsDirUtil::checkCreateDirectory(basepath);

View File

@ -148,7 +148,7 @@ void ftTransferModule::requestData(std::string peerId, uint64_t offset, uint32_t
mMultiplexor->sendDataRequest(peerId, mHash, mSize, offset,chunk_size); mMultiplexor->sendDataRequest(peerId, mHash, mSize, offset,chunk_size);
} }
bool ftTransferModule::getChunk(uint64_t &offset, uint32_t &chunk_size) bool ftTransferModule::getChunk(uint64_t &offset, uint32_t &chunk_size)
{ {
std::cerr << "ftTransferModule::getChunk()"; std::cerr << "ftTransferModule::getChunk()";
std::cerr << " Request: offset: " << offset; std::cerr << " Request: offset: " << offset;
@ -157,10 +157,19 @@ bool ftTransferModule::getChunk(uint64_t &offset, uint32_t &chunk_size)
bool val = mFileCreator->getMissingChunk(offset, chunk_size); bool val = mFileCreator->getMissingChunk(offset, chunk_size);
std::cerr << "ftTransferModule::getChunk()"; if (val)
std::cerr << " Answer: offset: " << offset; {
std::cerr << " chunk_size: " << chunk_size; std::cerr << "ftTransferModule::getChunk()";
std::cerr << std::endl; std::cerr << " Answer: offset: " << offset;
std::cerr << " chunk_size: " << chunk_size;
std::cerr << std::endl;
}
else
{
std::cerr << "ftTransferModule::getChunk()";
std::cerr << " Answer: No Chunk Available";
std::cerr << std::endl;
}
return val; return val;
} }

View File

@ -54,6 +54,9 @@ void P3Hub::addP3Pipe(std::string id, P3Pipe *pqi, p3ConnectMgr *mgr)
void P3Hub::run() void P3Hub::run()
{ {
std::cerr << "P3Hub::run()";
std::cerr << std::endl;
RsItem *item; RsItem *item;
std::list<std::pair<std::string, RsItem *> > recvdQ; std::list<std::pair<std::string, RsItem *> > recvdQ;
std::list<std::pair<std::string, RsItem *> >::iterator lit; std::list<std::pair<std::string, RsItem *> >::iterator lit;

View File

@ -56,7 +56,11 @@ int main(int argc, char **argv)
int i; int i;
for(i = 0; i < 10; i++) for(i = 0; i < 10; i++)
{ {
#ifdef WIN32
Sleep(1000);
#else
sleep(1); sleep(1);
#endif
forum->tick(); forum->tick();
} }
@ -76,29 +80,61 @@ int testForums(p3Forums *forum)
std::string fId1 = forum->createForum(L"Forum 1", L"first forum", RS_DISTRIB_PUBLIC); std::string fId1 = forum->createForum(L"Forum 1", L"first forum", RS_DISTRIB_PUBLIC);
forum->tick(); /* expect group publish */ forum->tick(); /* expect group publish */
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
forum->tick(); forum->tick();
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
std::string fId2 = forum->createForum(L"Forum 2", L"next first forum", RS_DISTRIB_PRIVATE); std::string fId2 = forum->createForum(L"Forum 2", L"next first forum", RS_DISTRIB_PRIVATE);
forum->tick(); /* expect group publish */ forum->tick(); /* expect group publish */
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
forum->tick(); forum->tick();
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
std::string mId1 = forum->createForumMsg(fId2, "", L"Forum 2 Msg 1", L"first forum msg"); std::string mId1 = forum->createForumMsg(fId2, "", L"Forum 2 Msg 1", L"first forum msg");
forum->tick(); /* expect msg publish */ forum->tick(); /* expect msg publish */
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
forum->tick(); forum->tick();
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
std::string mId2 = forum->createForumMsg(fId2, "", L"Forum 2 Msg 2", L"second forum msg"); std::string mId2 = forum->createForumMsg(fId2, "", L"Forum 2 Msg 2", L"second forum msg");
forum->tick(); /* expect msg publish */ forum->tick(); /* expect msg publish */
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
forum->tick(); forum->tick();
sleep(1); #ifdef WIN32
Sleep(1000);
#else
sleep(1);
#endif
} }

View File

@ -222,6 +222,7 @@ void UdpLayer::recv_loop()
} }
else if (status < 0) else if (status < 0)
{ {
std::cerr << "UdpLayer::recv_loop() ";
std::cerr << "Error: " << tounet_errno() << std::endl; std::cerr << "Error: " << tounet_errno() << std::endl;
} }
}; };

View File

@ -37,6 +37,7 @@
/**** /****
* #define RSDIR_DEBUG 1 * #define RSDIR_DEBUG 1
****/ ****/
#define RSDIR_DEBUG 1
std::string RsDirUtil::getTopDir(std::string dir) std::string RsDirUtil::getTopDir(std::string dir)
{ {

View File

@ -92,8 +92,11 @@ void RsQueueThread::run()
mLastSleep = mMaxSleep; mLastSleep = mMaxSleep;
} }
} }
#ifdef WIN32
Sleep(mLastSleep);
#else
usleep(1000 * mLastSleep); usleep(1000 * mLastSleep);
#endif
} }
} }