ftfileprovider.cc - takes care of getting data from a requested file

ftfilecreator.cc -- creates a file, tracks missing chunks, timed out 
chunks etc



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@626 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
cppenthu 2008-07-02 02:36:39 +00:00
parent 93d785b8ff
commit 1db82dee51
7 changed files with 763 additions and 11 deletions

View file

@ -32,25 +32,90 @@
* TODO: Serialiser Load / Save.
*
*/
#include "ftfileprovider.h"
#include "util/rsthreads.h"
#include <queue>
class ftChunk;
class ftFileChunker;
class ftFileCreator: public ftFileProvider
{
public:
ftFileCreator(std::string savepath, uint64_t size, std::string hash);
ftFileCreator(std::string savepath, uint64_t size, std::string hash,std::string chunker);
~ftFileCreator();
/* overloaded from FileProvider */
virtual bool getFileData(uint64_t offset, uint32_t chunk_size, void *data);
//virtual bool getFileData(uint64_t offset, uint32_t chunk_size, void *data);
int initializeFileAttrs(); //not override?
/* creation functions for FileCreator */
bool getMissingChunk(uint64_t &offset, uint32_t &chunk);
bool addFileData(uint64_t offset, uint32_t chunk_size, void *data);
private:
/* structure to track missing chunks */
/* structure to hold*/
/* TO BE DECIDED */
// std::string save_path; use file_name from parent
// uint64_t total_size;
uint64_t recv_size;
std::string hash;
ftFileChunker *fileChunker;
void initialize(std::string);
RsMutex ftcMutex;
};
/*
This class can either be specialized to follow a different splitting
policy or have an argument to indicate different policies
*/
class ftFileChunker : public RsThread {
public:
/* Does this require hash?? */
ftFileChunker(uint64_t size);
virtual ~ftFileChunker();
/* Breaks up the file into evenly sized chunks
Initializes all chunks to never_requested
*/
int splitFile();
virtual void run();
virtual bool getMissingChunk(uint64_t &offset, uint32_t &chunk);
bool getMissingChunkRandom(uint64_t &offset, uint32_t &chunk);
int notifyReceived(uint64_t offset, uint32_t chunk_size);
int monitor();
void setMonitorPeriod(int period);
protected:
uint64_t file_size;
uint64_t num_chunks;
uint64_t std_chunk_size;
std::vector<ftChunk*> allocationTable;
unsigned int aggregate_status;
int monitorPeriod;
RsMutex chunkerMutex; /********** STACK LOCKED MTX ******/
};
class ftFileRandomizeChunker : public ftFileChunker {
public:
ftFileRandomizeChunker(uint64_t size);
virtual bool getMissingChunk(uint64_t &offset, uint32_t &chunk);
~ftFileRandomizeChunker();
};
class ftChunk {
public:
enum Status {AVAIL, ALLOCATED, RECEIVED};
ftChunk(uint64_t,uint64_t,time_t,Status);
uint64_t offset;
uint64_t max_chunk_size;
time_t timestamp;
Status chunk_status;
};
#endif // FT_FILE_PROVIDER_HEADER