diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-04-27 11:45:22 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-04-27 11:45:22 +0000 |
| commit | 49b4cfbfcdf615dc01d748179c6b67e78bd5362e (patch) | |
| tree | 607214c9048ae8ba51e38a6c5daa1b99e376d218 /src/bencode.h | |
| parent | d58742ad21407362db34d508ceef8b7b21088bb1 (diff) | |
2009-04-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Put BDE in aria2 namespace. BDE will also be used to store
xml-rpc request.
* src/AnnounceList.cc
* src/AnnounceList.h
* src/BDE.cc: Added
* src/BDE.h: Added
* src/DHTAbstractMessage.cc
* src/DHTAbstractMessage.h
* src/DHTAnnouncePeerMessage.cc
* src/DHTAnnouncePeerMessage.h
* src/DHTAnnouncePeerReplyMessage.cc
* src/DHTAnnouncePeerReplyMessage.h
* src/DHTFindNodeMessage.cc
* src/DHTFindNodeMessage.h
* src/DHTFindNodeReplyMessage.cc
* src/DHTFindNodeReplyMessage.h
* src/DHTGetPeersMessage.cc
* src/DHTGetPeersMessage.h
* src/DHTGetPeersReplyMessage.cc
* src/DHTGetPeersReplyMessage.h
* src/DHTMessageFactory.h
* src/DHTMessageFactoryImpl.cc
* src/DHTMessageFactoryImpl.h
* src/DHTMessageReceiver.cc
* src/DHTMessageTracker.cc
* src/DHTMessageTracker.h
* src/DHTPingMessage.cc
* src/DHTPingMessage.h
* src/DHTPingReplyMessage.cc
* src/DHTPingReplyMessage.h
* src/DHTQueryMessage.cc
* src/DHTQueryMessage.h
* src/DHTResponseMessage.cc
* src/DHTResponseMessage.h
* src/DefaultBtAnnounce.cc
* src/DefaultBtContext.cc
* src/DefaultBtContext.h
* src/HandshakeExtensionMessage.cc
* src/Makefile.am
* src/PeerListProcessor.h
* src/UTPexExtensionMessage.cc
* src/bencode.cc
* src/bencode.h
* test/AnnounceListTest.cc
* test/BDETest.cc: Added
* test/BencodeTest.cc
* test/DHTAnnouncePeerMessageTest.cc
* test/DHTAnnouncePeerReplyMessageTest.cc
* test/DHTFindNodeMessageTest.cc
* test/DHTFindNodeReplyMessageTest.cc
* test/DHTGetPeersMessageTest.cc
* test/DHTGetPeersReplyMessageTest.cc
* test/DHTMessageFactoryImplTest.cc
* test/DHTMessageTrackerTest.cc
* test/DHTPingMessageTest.cc
* test/DHTPingReplyMessageTest.cc
* test/Makefile.am
* test/MockDHTMessageFactory.h
* test/PeerListProcessorTest.cc
Diffstat (limited to 'src/bencode.h')
| -rw-r--r-- | src/bencode.h | 386 |
1 files changed, 1 insertions, 385 deletions
diff --git a/src/bencode.h b/src/bencode.h index 568b98fe..a1630f72 100644 --- a/src/bencode.h +++ b/src/bencode.h @@ -38,398 +38,14 @@ #include "common.h" #include <string> -#include <map> -#include <deque> #include <iosfwd> -#include "SharedHandle.h" -#include "A2STR.h" -#include "RecoverableException.h" +#include "BDE.h" namespace aria2 { namespace bencode { -class BDE; - -class BDE { -public: - typedef std::map<std::string, BDE> Dict; - typedef std::deque<BDE> List; - typedef int64_t Integer; -private: - enum TYPE{ - TYPE_NONE, - TYPE_INTEGER, - TYPE_STRING, - TYPE_DICT, - TYPE_LIST, - }; - - class BObject { - public: - virtual ~BObject() {} - - //////////////////////////////////////////////////////////////////////////// - // Integer Interface - - // Returns Integer. - virtual Integer i() const - { - throw RecoverableException("Not Integer"); - } - - //////////////////////////////////////////////////////////////////////////// - // String Interface - - // Returns std::string. - virtual const std::string& s() const - { - throw RecoverableException("Not String"); - } - - // Returns std::string.data() casted to unsigned char*. - // Use s().size() to get length. - virtual const unsigned char* uc() const - { - throw RecoverableException("Not String"); - } - - //////////////////////////////////////////////////////////////////////////// - // Dictionary Interface - - // Returns the reference to BDE object associated with given key. - // If the key is not found, new pair with that key is created - // using default values, which is then returned. In other words, - // this is the same behavior of std::map's operator[]. - virtual BDE& operator[](const std::string& key) - { - throw RecoverableException("Not Dict"); - } - - // Returns true if the given key is found in dict. - virtual bool containsKey(const std::string& key) const - { - throw RecoverableException("Not Dict"); - } - - // Removes specified key from dict. - virtual void removeKey(const std::string& key) - { - throw RecoverableException("Not Dict"); - } - - // Returns a read/write iterator that points to the first pair in - // the dict. - virtual Dict::iterator dictBegin() - { - throw RecoverableException("Not Dict"); - } - - // Returns a read/write read-only iterator that points to one past - // the last pair in the dict. - virtual Dict::iterator dictEnd() - { - throw RecoverableException("Not Dict"); - } - - //////////////////////////////////////////////////////////////////////////// - // List Interface - - // Appends given bde to list. - virtual void append(const BDE& bde) - { - throw RecoverableException("Not List"); - } - - // Alias for append() - virtual void operator<<(const BDE& bde) - { - throw RecoverableException("Not List"); - } - - // Returns the reference of the object at the given index. - virtual BDE& operator[](size_t index) - { - throw RecoverableException("Not List"); - } - - // Returns a read/write iterator that points to the first object - // in list. - virtual List::iterator listBegin() - { - throw RecoverableException("Not List"); - } - - // Returns a read/write iterator that points to the one past the - // last object in list. - virtual List::iterator listEnd() - { - throw RecoverableException("Not List"); - } - - // Returns size of list or dict. - virtual size_t size() const - { - throw RecoverableException("Neither Dict nor List"); - } - - // Returns true if size of list or dict is 0. - virtual bool empty() const - { - throw RecoverableException("Neither Dict nor List"); - } - }; - - class BInteger : public BObject { - private: - Integer _integer; - public: - BInteger(Integer i):_integer(i) {} - - virtual BDE::Integer i() const - { - return _integer; - } - }; - - class BString : public BObject { - private: - std::string _string; - public: - BString(const std::string& string):_string(string) {} - - virtual const std::string& s() const - { - return _string; - } - - virtual const unsigned char* uc() const - { - return reinterpret_cast<const unsigned char*>(_string.data()); - } - }; - - class BDict : public BObject { - private: - Dict _dict; - public: - - virtual BDE& operator[](const std::string& key) - { - return _dict[key]; - } - - virtual bool containsKey(const std::string& key) const - { - return _dict.find(key) != _dict.end(); - } - - virtual void removeKey(const std::string& key) - { - _dict.erase(key); - } - - virtual BDE::Dict::iterator dictBegin() - { - return _dict.begin(); - } - - virtual BDE::Dict::iterator dictEnd() - { - return _dict.end(); - } - - virtual size_t size() const - { - return _dict.size(); - } - - virtual bool empty() const - { - return _dict.empty(); - } - }; - - class BList : public BObject { - private: - List _list; - public: - virtual void append(const BDE& bde) - { - _list.push_back(bde); - } - - virtual void operator<<(const BDE& bde) - { - _list.push_back(bde); - } - - virtual BDE& operator[](size_t index) - { - return _list[index]; - } - - virtual BDE::List::iterator listBegin() - { - return _list.begin(); - } - - virtual BDE::List::iterator listEnd() - { - return _list.end(); - } - - virtual size_t size() const - { - return _list.size(); - } - - virtual bool empty() const - { - return _list.empty(); - } - }; - - TYPE _type; - - SharedHandle<BObject> _bobject; -public: - BDE(); - - static BDE dict(); - - static BDE list(); - - static const BDE none; - - // Test for Null data - // Return true if the type of this object is None. - bool isNone() const; - - ////////////////////////////////////////////////////////////////////////////// - // Integer Interface - - BDE(Integer integer); - - // Returns true if the type of this object is Integer. - bool isInteger() const; - - // Returns Integer. Requires this object to be Integer. - Integer i() const; - - ////////////////////////////////////////////////////////////////////////////// - // String Interface - - BDE(const std::string& string); - - // Made explicit to avoid ambiguity with BDE(Integer). - explicit BDE(const char* cstring); - - BDE(const char* data, size_t length); - - BDE(const unsigned char* data, size_t length); - - // Returns true if the type of this object is String. - bool isString() const; - - // Returns std::string. Requires this object to be String - const std::string& s() const; - - // Returns std::string.data() casted to unsigned char*. - // Use s().size() to get length. - const unsigned char* uc() const; - - ////////////////////////////////////////////////////////////////////////////// - // Dictionary Interface - - // Returns true if the type of this object is Dict. - bool isDict() const; - - // Returns the reference to BDE object associated with given key. - // If the key is not found, new pair with that key is created using default - // values, which is then returned. In other words, this is the same behavior - // of std::map's operator[]. - // Requires this object to be Dict. - BDE& operator[](const std::string& key); - - // Returns the const reference to BDE ojbect associated with given key. - // If the key is not found, BDE::none is returned. - // Requires this object to be Dict. - const BDE& operator[](const std::string& key) const; - - // Returns true if the given key is found in dict. - // Requires this object to be Dict. - bool containsKey(const std::string& key) const; - - // Removes specified key from dict. - // Requires this object to be Dict. - void removeKey(const std::string& key); - - // Returns a read/write iterator that points to the first pair in the dict. - // Requires this object to be Dict. - Dict::iterator dictBegin(); - - // Returns a read/write read-only iterator that points to the first pair in - // the dict. - // Requires this object to be Dict. - Dict::const_iterator dictBegin() const; - - // Returns a read/write read-only iterator that points to one past the last - // pair in the dict. - // Requires this object to be Dict. - Dict::iterator dictEnd(); - - // Returns a read/write read-only iterator that points to one past the last - // pair in the dict. - // Requires this object to be Dict. - Dict::const_iterator dictEnd() const; - - ////////////////////////////////////////////////////////////////////////////// - // List Interface - - // Returns true if the type of this object is List. - bool isList() const; - - // Appends given bde to list. Required the type of this object to be List. - void append(const BDE& bde); - - // Alias for append() - void operator<<(const BDE& bde); - - // Returns the reference of the object at the given index. Required this - // object to be List. - BDE& operator[](size_t index); - - // Returns the const reference of the object at the given index. - // Required this object to be List. - const BDE& operator[](size_t index) const; - - // Returns a read/write iterator that points to the first object in list. - // Required this object to be List. - List::iterator listBegin(); - - // Returns a read/write read-only iterator that points to the first object - // in list. Required this object to be List. - List::const_iterator listBegin() const; - - // Returns a read/write iterator that points to the one past the last object - // in list. Required this object to be List. - List::iterator listEnd(); - - // Returns a read/write read-only iterator that points to the one past the - // last object in list. Required this object to be List. - List::const_iterator listEnd() const; - - // For List type: Returns size of list. - // For Dict type: Returns size of dict. - size_t size() const; - - // For List type: Returns true if size of list is 0. - // For Dict type: Returns true if size of dict is 0. - bool empty() const; -}; - BDE decode(std::istream& in); // Decode the data in s. |
