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
pull/1/head
Tatsuhiro Tsujikawa 2009-11-22 13:26:32 +00:00
parent 93968c4fa5
commit 5130b5c1e0
4 changed files with 36 additions and 1 deletions

View File

@ -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>
Initial support of Extension for Peers to Send Metadata

View File

@ -155,13 +155,21 @@ BDE decode(std::istream& in)
}
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()) {
return BDE::none;
}
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)
@ -169,6 +177,11 @@ BDE decode(const unsigned char* data, size_t 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)
{
std::ifstream f(filename.c_str(), std::ios::binary);

View File

@ -51,8 +51,14 @@ BDE decode(std::istream& in);
// Decode the data in 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, size_t& end);
BDE decodeFromFile(const std::string& filename);
std::string encode(const BDE& bde);

View File

@ -146,6 +146,13 @@ void BencodeTest::testDecode()
BDE s = bencode::decode("5:aria2trail");
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()