/* */ #ifndef _D_DEFAULT_BT_CONTEXT_H_ #define _D_DEFAULT_BT_CONTEXT_H_ #include "BtContext.h" #include "Dictionary.h" #include "Data.h" #include "List.h" #define INFO_HASH_LENGTH 20 #define PIECE_HASH_LENGTH 20 typedef Strings PieceHashes; class DefaultBtContext : public BtContext { private: unsigned char infoHash[INFO_HASH_LENGTH]; string infoHashString; PieceHashes pieceHashes; FileEntries fileEntries; FILE_MODE fileMode; long long int totalLength; int pieceLength; string name; int numPieces; string peerId; AnnounceTiers announceTiers; void clear(); void extractPieceHash(const unsigned char* hashData, int hashDataLength, int hashLength); void extractFileEntries(Dictionary* infoDic, const string& defaultName); void extractAnnounce(Data* announceData); void extractAnnounceList(List* announceListData); public: DefaultBtContext(); virtual ~DefaultBtContext(); virtual const unsigned char* getInfoHash() const; virtual int getInfoHashLength() const; virtual string getInfoHashAsString() const; virtual string getPieceHash(int index) const; virtual const Strings& getPieceHashes() const { return pieceHashes; } virtual long long int getTotalLength() const; virtual FILE_MODE getFileMode() const; virtual FileEntries getFileEntries() const; virtual AnnounceTiers getAnnounceTiers() const; virtual void load(const string& torrentFile); virtual string getName() const; virtual int getPieceLength() const; virtual int getNumPieces() const; virtual const unsigned char* getPeerId() { if(peerId == "") { peerId = generatePeerId(); } return (const unsigned char*)peerId.c_str(); } string generatePeerId() const; }; #endif // _D_DEFAULT_BT_CONTEXT_H_