mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-14 06:02:31 +00:00
* Added a missing READ_PORT case to a switch in handshake.cc.
* Stuff. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1164 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
+39
-4
@@ -228,6 +228,33 @@ parse_whole_list(const char* first, const char* last, torrent::Object* dest, boo
|
||||
return first;
|
||||
}
|
||||
|
||||
std::string
|
||||
convert_to_string(const torrent::Object& rawSrc) {
|
||||
const torrent::Object& src = convert_to_single_argument(rawSrc);
|
||||
|
||||
switch (src.type()) {
|
||||
case torrent::Object::TYPE_VALUE: {
|
||||
char buffer[64];
|
||||
snprintf(buffer, 64, "%lli", src.as_value());
|
||||
return std::string(buffer);
|
||||
}
|
||||
case torrent::Object::TYPE_STRING: return src.as_string();
|
||||
case torrent::Object::TYPE_NONE: return std::string();
|
||||
|
||||
case torrent::Object::TYPE_RAW_BENCODE:
|
||||
if (src.as_raw_bencode().is_empty())
|
||||
return std::string();
|
||||
|
||||
if (src.as_raw_bencode().is_raw_string())
|
||||
return src.as_raw_bencode().as_raw_string().as_string();
|
||||
|
||||
if (src.as_raw_bencode().is_value())
|
||||
return src.as_raw_bencode().as_value_string();
|
||||
|
||||
default: throw torrent::input_error("Not a string.");
|
||||
}
|
||||
}
|
||||
|
||||
std::string
|
||||
convert_list_to_string(const torrent::Object& src) {
|
||||
if (!src.is_list())
|
||||
@@ -334,12 +361,20 @@ convert_to_value_nothrow(const torrent::Object& src, int64_t* value, int base, i
|
||||
break;
|
||||
|
||||
case torrent::Object::TYPE_STRING:
|
||||
if (parse_skip_wspace(parse_value(unpacked.as_string().c_str(), value, base, unit),
|
||||
unpacked.as_string().c_str() + unpacked.as_string().size()) != unpacked.as_string().c_str() + unpacked.as_string().size())
|
||||
return false;
|
||||
return parse_skip_wspace(parse_value(unpacked.as_string().c_str(), value, base, unit),
|
||||
unpacked.as_string().c_str() + unpacked.as_string().size())
|
||||
== unpacked.as_string().c_str() + unpacked.as_string().size();
|
||||
|
||||
break;
|
||||
case torrent::Object::TYPE_RAW_STRING: {
|
||||
const torrent::raw_string& str = src.as_raw_string();
|
||||
|
||||
char buffer[str.size() + 1];
|
||||
std::memcpy(buffer, str.data(), str.size());
|
||||
buffer[str.size()] = '\0';
|
||||
|
||||
return parse_skip_wspace(parse_value(buffer, value, base, unit), buffer + str.size())
|
||||
== buffer + str.size();
|
||||
}
|
||||
case torrent::Object::TYPE_NONE:
|
||||
*value = 0;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user