mirror of https://github.com/aria2/aria2
2009-11-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added bencode::decode overload functions. They have extra argument 'end', passed by reference. 'end' points to the beyond the last position of data used in decoding process. * src/bencode.cc * src/bencode.h * test/BencodeTest.ccpull/1/head
parent
93968c4fa5
commit
5130b5c1e0
|
@ -1,3 +1,12 @@
|
||||||
|
2009-11-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Added bencode::decode overload functions. They have extra argument
|
||||||
|
'end', passed by reference. 'end' points to the beyond the last
|
||||||
|
position of data used in decoding process.
|
||||||
|
* src/bencode.cc
|
||||||
|
* src/bencode.h
|
||||||
|
* test/BencodeTest.cc
|
||||||
|
|
||||||
2009-11-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-11-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Initial support of Extension for Peers to Send Metadata
|
Initial support of Extension for Peers to Send Metadata
|
||||||
|
|
|
@ -155,13 +155,21 @@ BDE decode(std::istream& in)
|
||||||
}
|
}
|
||||||
|
|
||||||
BDE decode(const std::string& s)
|
BDE decode(const std::string& s)
|
||||||
|
{
|
||||||
|
size_t end;
|
||||||
|
return decode(s, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
BDE decode(const std::string& s, size_t& end)
|
||||||
{
|
{
|
||||||
if(s.empty()) {
|
if(s.empty()) {
|
||||||
return BDE::none;
|
return BDE::none;
|
||||||
}
|
}
|
||||||
std::istringstream ss(s);
|
std::istringstream ss(s);
|
||||||
|
|
||||||
return decodeiter(ss);
|
BDE bde = decodeiter(ss);
|
||||||
|
end = ss.tellg();
|
||||||
|
return bde;
|
||||||
}
|
}
|
||||||
|
|
||||||
BDE decode(const unsigned char* data, size_t length)
|
BDE decode(const unsigned char* data, size_t length)
|
||||||
|
@ -169,6 +177,11 @@ BDE decode(const unsigned char* data, size_t length)
|
||||||
return decode(std::string(&data[0], &data[length]));
|
return decode(std::string(&data[0], &data[length]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BDE decode(const unsigned char* data, size_t length, size_t& end)
|
||||||
|
{
|
||||||
|
return decode(std::string(&data[0], &data[length]), end);
|
||||||
|
}
|
||||||
|
|
||||||
BDE decodeFromFile(const std::string& filename)
|
BDE decodeFromFile(const std::string& filename)
|
||||||
{
|
{
|
||||||
std::ifstream f(filename.c_str(), std::ios::binary);
|
std::ifstream f(filename.c_str(), std::ios::binary);
|
||||||
|
|
|
@ -51,8 +51,14 @@ BDE decode(std::istream& in);
|
||||||
// Decode the data in s.
|
// Decode the data in s.
|
||||||
BDE decode(const std::string& s);
|
BDE decode(const std::string& s);
|
||||||
|
|
||||||
|
// Decode the data in s. After decode is done successfully, return the
|
||||||
|
// bencoded string length in end.
|
||||||
|
BDE decode(const std::string& s, size_t& end);
|
||||||
|
|
||||||
BDE decode(const unsigned char* data, size_t length);
|
BDE decode(const unsigned char* data, size_t length);
|
||||||
|
|
||||||
|
BDE decode(const unsigned char* data, size_t length, size_t& end);
|
||||||
|
|
||||||
BDE decodeFromFile(const std::string& filename);
|
BDE decodeFromFile(const std::string& filename);
|
||||||
|
|
||||||
std::string encode(const BDE& bde);
|
std::string encode(const BDE& bde);
|
||||||
|
|
|
@ -146,6 +146,13 @@ void BencodeTest::testDecode()
|
||||||
BDE s = bencode::decode("5:aria2trail");
|
BDE s = bencode::decode("5:aria2trail");
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2"), s.s());
|
CPPUNIT_ASSERT_EQUAL(std::string("aria2"), s.s());
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
// Get trailing garbage position
|
||||||
|
size_t end;
|
||||||
|
BDE s = bencode::decode("5:aria2trail", end);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("aria2"), s.s());
|
||||||
|
CPPUNIT_ASSERT_EQUAL((size_t)7, end);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BencodeTest::testEncode()
|
void BencodeTest::testEncode()
|
||||||
|
|
Loading…
Reference in New Issue