/* */ #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; int64_t totalLength; int32_t pieceLength; string name; int32_t numPieces; string peerId; AnnounceTiers announceTiers; void clear(); void extractPieceHash(const unsigned char* hashData, int32_t hashDataLength, int32_t 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 int32_t getInfoHashLength() const; virtual string getInfoHashAsString() const; virtual string getPieceHash(int32_t index) const; virtual const Strings& getPieceHashes() const { return pieceHashes; } virtual int64_t 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 int32_t getPieceLength() const; virtual int32_t 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_