diff options
author | Vincent Richard <[email protected]> | 2005-04-14 11:27:49 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2005-04-14 11:27:49 +0000 |
commit | 34595491817bd3d062b05fe0d2bfd4289410ab51 (patch) | |
tree | de05c249d6e43a1b89c36ef95bd6f62743b9ea79 /src/utility/urlUtils.cpp | |
parent | Implemented comparison operators. (diff) | |
download | vmime-34595491817bd3d062b05fe0d2bfd4289410ab51.tar.gz vmime-34595491817bd3d062b05fe0d2bfd4289410ab51.zip |
Moved 'url' and 'urlUtils' classes to 'utility' namespace.
Diffstat (limited to 'src/utility/urlUtils.cpp')
-rw-r--r-- | src/utility/urlUtils.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/utility/urlUtils.cpp b/src/utility/urlUtils.cpp new file mode 100644 index 00000000..6099c19b --- /dev/null +++ b/src/utility/urlUtils.cpp @@ -0,0 +1,94 @@ +// +// VMime library (http://www.vmime.org) +// Copyright (C) 2002-2005 Vincent Richard <[email protected]> +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License as +// published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// + +#include "vmime/utility/urlUtils.hpp" +#include "vmime/parserHelpers.hpp" + + +namespace vmime { +namespace utility { + + +const string urlUtils::encode(const string& s) +{ + string result; + result.reserve(s.length()); + + for (string::const_iterator it = s.begin() ; it != s.end() ; ++it) + { + const char_t c = *it; + + if (parserHelpers::isPrint(c) && c != '%') + { + result += c; + } + else + { + char hex[4]; + + hex[0] = '%'; + hex[1] = c / 16; + hex[2] = c % 16; + hex[3] = 0; + + result += hex; + } + } + + return (result); +} + + +const string urlUtils::decode(const string& s) +{ + string result; + result.reserve(s.length()); + + for (string::const_iterator it = s.begin() ; it != s.end() ; ) + { + const char_t c = *it; + + switch (c) + { + case '%': + { + const char_t p = (++it != s.end() ? *it : 0); + const char_t q = (++it != s.end() ? *it : 0); + + result += static_cast <string::value_type>(p * 16 + q); + + if (it != s.end()) + ++it; + + break; + } + default: + + result += c; + ++it; + break; + } + } + + return (result); +} + + +} // utility +} // vmime |