/* * 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" 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(); input.ToLower(); for(int i=0; iDefine(this); m_object->Validate(); } // Escape the space, colon and percent characters for serializing to Key-Value-Pair text void UrlSerializer::EscapeUrl(CStdString& in, CStdString& out) { //####### fixme, need unescaping out = in; } // Unescape the space, colon and percent characters for serializing to Key-Value-Pair text void UrlSerializer::UnEscapeUrl(CStdString& in, CStdString& out) { // ###### fixme, need escaping out = in; } CStdString UrlSerializer::FindClass(CStdString& input) { CStdString result; int equalsPostion = input.Find('='); if (equalsPostion != -1) { int ampersandPostion = input.Find('&'); if (ampersandPostion > 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; }