From 3689e48a3b44b52c85d8fff5d0b7354283e710ae Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Fri, 26 Mar 2004 11:39:17 +0000 Subject: [PATCH] *** empty log message *** --- Jamfile | 1 + include/libtorrent/escape_string.hpp | 44 ++++++++++ src/escape_string.cpp | 122 +++++++++++++++++++++++++++ src/torrent.cpp | 73 ---------------- 4 files changed, 167 insertions(+), 73 deletions(-) create mode 100755 include/libtorrent/escape_string.hpp create mode 100755 src/escape_string.cpp diff --git a/Jamfile b/Jamfile index b3d3e0b93..1e5f98394 100755 --- a/Jamfile +++ b/Jamfile @@ -47,6 +47,7 @@ SOURCES = allocate_resources.cpp alert.cpp entry.cpp + escape_string.cpp identify_client.cpp peer_connection.cpp piece_picker.cpp diff --git a/include/libtorrent/escape_string.hpp b/include/libtorrent/escape_string.hpp new file mode 100755 index 000000000..6c766c89f --- /dev/null +++ b/include/libtorrent/escape_string.hpp @@ -0,0 +1,44 @@ +/* + +Copyright (c) 2003, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#ifndef TORRENT_ESCAPE_STRING_HPP_INCLUDED +#define TORRENT_ESCAPE_STRING_HPP_INCLUDED + +#include + +namespace libtorrent +{ + std::string unescape_string(std::string const& s); + std::string escape_string(const char* str, int len); +} + +#endif // TORRENT_ESCAPE_STRING_HPP_INCLUDED diff --git a/src/escape_string.cpp b/src/escape_string.cpp new file mode 100755 index 000000000..53dcf16de --- /dev/null +++ b/src/escape_string.cpp @@ -0,0 +1,122 @@ +/* + +Copyright (c) 2003, Arvid Norberg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + +#include +#include +#include +#include +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1300 +namespace std +{ + using ::isalnum; +} +#endif + +namespace libtorrent +{ + std::string unescape_string(std::string const& s) + { + std::string ret; + for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) + { + if(*i == '+') + { + ret+=' '; + } + else if (*i != '%') + { + ret += *i; + } + else + { + ++i; + if (i == s.end()) + throw std::runtime_error("invalid escaped string"); + + int high; + if(*i >= '0' && *i <= '9') high=*i - '0'; + else if(*i >= 'A' && *i <= 'F') high=*i + 10 - 'A'; + else if(*i >= 'a' && *i <= 'f') high=*i + 10 - 'a'; + else throw std::runtime_error("invalid escaped string"); + + ++i; + if (i == s.end()) + throw std::runtime_error("invalid escaped string"); + + int low; + if(*i >= '0' && *i <= '9') low=*i - '0'; + else if(*i >= 'A' && *i <= 'F') low=*i + 10 - 'A'; + else if(*i >= 'a' && *i <= 'f') low=*i + 10 - 'a'; + else throw std::runtime_error("invalid escaped string"); + + ret += char(high * 16 + low); + } + } + return ret; + } + + + std::string escape_string(const char* str, int len) + { + assert(str != 0); + assert(len >= 0); + // http://www.ietf.org/rfc/rfc2396.txt + // section 2.3 + static const char unreserved_chars[] = "-_.!~*'()"; + + std::stringstream ret; + ret << std::hex << std::setfill('0'); + for (int i = 0; i < len; ++i) + { + if (std::isalnum(static_cast(*str)) + || std::count( + unreserved_chars + , unreserved_chars+sizeof(unreserved_chars)-1 + , *str)) + { + ret << *str; + } + else + { + ret << '%' + << std::setw(2) + << (int)static_cast(*str); + } + ++str; + } + return ret.str(); + } +} diff --git a/src/torrent.cpp b/src/torrent.cpp index 80953ac45..606f4c505 100755 --- a/src/torrent.cpp +++ b/src/torrent.cpp @@ -140,79 +140,6 @@ namespace namespace libtorrent { - std::string unescape_string(std::string const& s) - { - std::string ret; - for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) - { - if(*i == '+') - { - ret+=' '; - } - else if (*i != '%') - { - ret += *i; - } - else - { - ++i; - if (i == s.end()) - throw std::runtime_error("invalid escaped string"); - - int high; - if(*i >= '0' && *i <= '9') high=*i - '0'; - else if(*i >= 'A' && *i <= 'F') high=*i + 10 - 'A'; - else if(*i >= 'a' && *i <= 'f') high=*i + 10 - 'a'; - else throw std::runtime_error("invalid escaped string"); - - ++i; - if (i == s.end()) - throw std::runtime_error("invalid escaped string"); - - int low; - if(*i >= '0' && *i <= '9') low=*i - '0'; - else if(*i >= 'A' && *i <= 'F') low=*i + 10 - 'A'; - else if(*i >= 'a' && *i <= 'f') low=*i + 10 - 'a'; - else throw std::runtime_error("invalid escaped string"); - - ret += char(high * 16 + low); - } - } - return ret; - } - - - std::string escape_string(const char* str, int len) - { - assert(str != 0); - assert(len >= 0); - // http://www.ietf.org/rfc/rfc2396.txt - // section 2.3 - static const char unreserved_chars[] = "-_.!~*'()"; - - std::stringstream ret; - ret << std::hex << std::setfill('0'); - for (int i = 0; i < len; ++i) - { - if (std::isalnum(static_cast(*str)) - || std::count( - unreserved_chars - , unreserved_chars+sizeof(unreserved_chars)-1 - , *str)) - { - ret << *str; - } - else - { - ret << '%' - << std::setw(2) - << (int)static_cast(*str); - } - ++str; - } - return ret.str(); - } - torrent::torrent( detail::session_impl& ses , const torrent_info& torrent_file