/* * Oreka -- A media capture and retrieval platform * * Copyright (C) 2005, orecx LLC * * http://www.orecx.com * * This program is free software, distributed under the terms of * the GNU General Public License. * Please refer to http://www.gnu.org/copyleft/gpl.html * */ #include "ace/OS_NS_ctype.h" #include "Utils.h" #include "UrlSerializer.h" static char url_ok_chars[] = "*-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"; static char hex_digits[17] = "0123456789ABCDEF"; void UrlSerializer::AddString(const char* key, CStdString& value) { CStdString pair; CStdString escapedValue; EscapeUrl(value, escapedValue); pair.Format("%s=%s&", key, (PCSTR)escapedValue); m_output += pair; } CStdString UrlSerializer::Serialize() { m_deSerialize = false; // Set Serialize mode m_object->Define(this); return m_output; } typedef enum {UrlStartState, UrlKeyState, UrlValueState, UrlErrorState} UrlState; void UrlSerializer::DeSerialize(CStdString& input) { // read string and extract values into map UrlState state = UrlStartState; CStdString key; CStdString value; CStdString errorDescription; input.Trim(); for(int i=0; i> 4]; out += hex_digits[in.GetAt(i) & 0x0F]; } } } void UrlSerializer::UnEscapeUrl(CStdString& in, CStdString& out) { // Translates all %xx escaped sequences to corresponding ascii characters out = ""; char pchHex[3]; for (int i = 0; i equalsPostion) { // there is at least one parameter result = input.Mid(equalsPostion+1, ampersandPostion-equalsPostion-1); } else { // there is no parameter result = input.Mid(equalsPostion+1, input.GetLength() - equalsPostion - 1); } } result.ToLower(); return result; }