4 * Created on: 2013. 10. 21.
11 #include "eURIDecoder.h"
12 //-------------------------------------------------------------------------------
14 eURIDecoder::eURIDecoder()
17 //-------------------------------------------------------------------------------
19 eURIDecoder::~eURIDecoder()
22 //-------------------------------------------------------------------------------
24 unsigned char eURIDecoder::H2I(wchar_t aHexDigit)
37 return (unsigned char)(9 + aHexDigit - _UL_('9'));
44 return (unsigned char)(15 + aHexDigit - _UL_('f'));
51 return (unsigned char)(15 + aHexDigit - _UL_('F'));
56 //-------------------------------------------------------------------------------
58 const wchar_t* eURIDecoder::DecodeURI(wchar_t* aData, int aBreakCond)
60 wchar_t* read = aData;
61 wchar_t* write = aData;
62 bool prevWasCr = false;
72 write[0] = _UL_('\0');
123 const unsigned char left = H2I(read[1]);
124 const unsigned char right = H2I(read[2]);
125 const int code = 16 * left + right;
128 switch (aBreakCond) {
131 write[0] = (wchar_t)10;
138 write[0] = (wchar_t)13;
139 write[1] = (wchar_t)10;
146 write[0] = (wchar_t)13;
153 write[0] = (wchar_t)10;
161 switch (aBreakCond) {
163 write[0] = (wchar_t)10;
168 write[0] = (wchar_t)13;
169 write[1] = (wchar_t)10;
174 write[0] = (wchar_t)13;
180 write[0] = (wchar_t)13;
188 write[0] = (wchar_t)(code);
223 write[0] = _UL_(' ');
242 //-------------------------------------------------------------------------------
244 std::wstring eURIDecoder::Decode(const wchar_t* aInput)
246 wchar_t working[1024] = {0};
248 wcscpy(working, aInput);
249 DecodeURI(working, BR_DONT_TOUCH);
251 return std::wstring(working);
253 //-------------------------------------------------------------------------------
255 std::string eURIDecoder::Decode(const char* aInput)
257 std::string tmp = aInput;
258 std::wstring in = L"";
259 in.assign(tmp.begin(), tmp.end());
261 std::wstring decode = Decode(in.c_str());
263 tmp.assign(decode.begin(), decode.end());
267 //-------------------------------------------------------------------------------
273 std::string in = "/home/kos/work/workspace/tsstreamproxy/test/20130528%201415%20-%20ZDF%20-%20Die%20K%C3%BCchenschlacht.ts";
274 std::string out = URIDecoder().Decode(in.c_str());
278 FILE* fp = fopen(out.c_str(), "rb");
280 cout << (fp == NULL) ? "OPEN FAIL!!" : "OPEN OK" << endl;