blob: f14d42a79a8efce59fa7e70fe5d63b061534d3d6 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
// -*- c++ -*-
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// P V S T R I N G URI C L A S S
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#include "pv_string_uri.h"
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//////////////////////////////////////////////////////////////////////////////////////////////////////
OSCL_EXPORT_REF bool PVStringUri::PersentageToEscapedEncoding(char* aUrl, uint32 & aUrlMaxOutLength)
{
int32 err;
uint32 Url_Counter = 0;
uint32 Url_Tmp_Counter = 0;
aUrlMaxOutLength = 0;
mbchar* TempUrlBuffer = NULL;
uint32 iPersentage_Flag = false;
bool iRet = false;
OSCL_TRY(err, TempUrlBuffer = OSCL_ARRAY_NEW(mbchar, MAX_FULL_REQUEST_SIZE));
if ((err != OsclErrNone) || (TempUrlBuffer == NULL))
{
return false;
}
oscl_memset(TempUrlBuffer, 0, sizeof(TempUrlBuffer));
while (aUrl[Url_Counter] != '\0')
{
switch (aUrl[Url_Counter])
{
case PERSENTAGE:
{
if (!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '0') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '1') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == 'A') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '7') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '8') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '9') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == 'B') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '4') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '6') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == 'C') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == 'F') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '5') &&
!(aUrl[Url_Counter+1] == '2' && aUrl[Url_Counter+2] == '3') &&
!(aUrl[Url_Counter+1] == '3' && aUrl[Url_Counter+2] == 'A') &&
!(aUrl[Url_Counter+1] == '3' && aUrl[Url_Counter+2] == 'B') &&
!(aUrl[Url_Counter+1] == '3' && aUrl[Url_Counter+2] == 'D') &&
!(aUrl[Url_Counter+1] == '3' && aUrl[Url_Counter+2] == 'F') &&
!(aUrl[Url_Counter+1] == '5' && aUrl[Url_Counter+2] == 'B') &&
!(aUrl[Url_Counter+1] == '5' && aUrl[Url_Counter+2] == 'D') &&
!(aUrl[Url_Counter+1] == '4' && aUrl[Url_Counter+2] == '0'))
{
TempUrlBuffer[Url_Tmp_Counter] = '%';
TempUrlBuffer[++Url_Tmp_Counter] = '2';
TempUrlBuffer[++Url_Tmp_Counter] = '5';
break;
}
iPersentage_Flag = true;
break;
}
default :
TempUrlBuffer[Url_Tmp_Counter] = aUrl[Url_Counter];
break;
}
if (iPersentage_Flag)
{
TempUrlBuffer[Url_Tmp_Counter] = aUrl[Url_Counter];
iPersentage_Flag = false;
}
Url_Counter++;
Url_Tmp_Counter++;
}
TempUrlBuffer[Url_Tmp_Counter] = '\0';
if (TempUrlBuffer && *TempUrlBuffer)
{
oscl_memset(aUrl, 0, sizeof(aUrl));
oscl_strncpy(aUrl, TempUrlBuffer, (Url_Tmp_Counter));
aUrl[oscl_strlen(TempUrlBuffer)] = '\0';
aUrlMaxOutLength = Url_Tmp_Counter;
iRet = true;
}
OSCL_ARRAY_DELETE(TempUrlBuffer);
TempUrlBuffer = NULL;
return iRet;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
OSCL_EXPORT_REF bool PVStringUri::IllegalCharactersToEscapedEncoding(char* aUrl, uint32 &aUrlMaxOutLength)
{
int32 err;
uint32 Url_Counter = 0;
uint32 Url_Tmp_Counter = 0;
aUrlMaxOutLength = 0;
//mbchar IllegalTmpBuf[4];
unsigned char* IllegalTmpBuf = NULL;
uint32 Lenght = 0;
mbchar* TempUrlBuffer = NULL;
bool iRet = false;
OSCL_TRY(err, TempUrlBuffer = OSCL_ARRAY_NEW(mbchar, MAX_FULL_REQUEST_SIZE));
if ((err != OsclErrNone) || (TempUrlBuffer == NULL))
{
return false;
}
oscl_memset(TempUrlBuffer, 0, sizeof(TempUrlBuffer));
while (aUrl[Url_Counter] != '\0')
{
if (!(aUrl[Url_Counter] >= 63 && aUrl[Url_Counter] <= 91) &&
!(aUrl[Url_Counter] >= 97 && aUrl[Url_Counter] <= 122) &&
!(aUrl[Url_Counter] >= 35 && aUrl[Url_Counter] <= 59) &&
!(aUrl[Url_Counter] == 33) &&
!(aUrl[Url_Counter] == 61) &&
!(aUrl[Url_Counter] == 93) &&
!(aUrl[Url_Counter] == 95))
{
//Dec To Hexa Conversion
IllegalTmpBuf = DecimalToHexConverter(aUrl[Url_Counter] , Lenght);
TempUrlBuffer[Url_Tmp_Counter] = '%';
TempUrlBuffer[++Url_Tmp_Counter] = IllegalTmpBuf[1];
TempUrlBuffer[++Url_Tmp_Counter] = IllegalTmpBuf[2];
OSCL_ARRAY_DELETE(IllegalTmpBuf);
IllegalTmpBuf = NULL;
}
else
{
TempUrlBuffer[Url_Tmp_Counter] = aUrl[Url_Counter];
}
Url_Counter++;
Url_Tmp_Counter++;
}
TempUrlBuffer[Url_Tmp_Counter] = '\0';
if (TempUrlBuffer && *TempUrlBuffer)
{
oscl_memset(aUrl, 0, sizeof(aUrl));
oscl_strncpy(aUrl, TempUrlBuffer, Url_Tmp_Counter);
aUrl[oscl_strlen(TempUrlBuffer)] = '\0';
aUrlMaxOutLength = Url_Tmp_Counter;
iRet = true;
}
OSCL_ARRAY_DELETE(TempUrlBuffer);
TempUrlBuffer = NULL;
return iRet;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
OSCL_EXPORT_REF unsigned char *PVStringUri::DecimalToHexConverter(unsigned char aNumberIn, uint32 & aUrlMaxConvertLenght)
{
unsigned char* FinalBuffer = NULL;
//FinalBuffer = 0;
unsigned char size = sizeof(unsigned char) * 2;
FinalBuffer = OSCL_ARRAY_NEW(unsigned char, (size + 2));
mbchar *LookUpTable = OSCL_CONST_CAST(mbchar*, "0123456789ABCDEF"); //corresponding index.
unsigned char Temp = aNumberIn;
FinalBuffer[0] = ' ';
unsigned char mask = 0x000f;
for (unsigned char Counter = 0; Counter < size; Counter++)
{
Temp = aNumberIn;
Temp >>= (4 * Counter);
Temp &= mask;
FinalBuffer[size - Counter] = LookUpTable[Temp];
}
FinalBuffer[size + 1] = '\0';
aUrlMaxConvertLenght = oscl_strlen((char*)FinalBuffer);
return FinalBuffer;
}