blob: 09798bf079069c57266c3e822f8a82b2321707a1 [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.
* -------------------------------------------------------------------
*/
#ifndef PVRTSP_CLIENT_ENGINE_UTILS_H
#include "pvrtsp_client_engine_utils.h"
#endif
#include "oscl_mem.h"
#include "oscl_mem_basic_functions.h"
bool composeURL(const char *baseURL, const char *relativeURL, char *completeURL, unsigned int &completeURLLen)
{
char* copyOfBaseURL = OSCL_ARRAY_NEW(char, 8 * MAX_LONG_TEXT_LEN);
if (NULL == copyOfBaseURL)
{
return false;
}
URLType urlType = findRelativeURLType(relativeURL);
switch (urlType)
{
case CONCATENATE:
{
int len = oscl_strlen(baseURL);
oscl_strncpy(copyOfBaseURL, baseURL, (len + 1));
if ((copyOfBaseURL[len-1] != '/') && (len > 0))
{
copyOfBaseURL[len] = '/';
copyOfBaseURL[len+1] = 0;
len++;
}
if (completeURLLen <= (len + oscl_strlen(relativeURL)))
{
OSCL_ARRAY_DELETE(copyOfBaseURL);
return false;
}
oscl_strncpy(completeURL, copyOfBaseURL, (oscl_strlen(copyOfBaseURL) + 1));
oscl_strcat(completeURL, relativeURL);
completeURLLen = oscl_strlen(completeURL);
break;
}
case REPLACE_PATH:
{
oscl_strncpy(copyOfBaseURL, baseURL, (oscl_strlen(baseURL) + 1));
if (completeURLLen <= (oscl_strlen(copyOfBaseURL) + oscl_strlen(relativeURL)))
{
OSCL_ARRAY_DELETE(copyOfBaseURL);
return false;
}
oscl_strncpy(completeURL, copyOfBaseURL, (oscl_strlen(copyOfBaseURL) + 1));
oscl_strcat(completeURL, relativeURL);
completeURLLen = oscl_strlen(completeURL);
break;
}
case REPLACE_HOST:
{
const char RTSP[] = "rtsp:";
if (completeURLLen > (oscl_strlen(RTSP) + oscl_strlen(relativeURL)))
{
oscl_strncpy(completeURL, RTSP, (oscl_strlen(RTSP) + 1));
oscl_strcat(completeURL, relativeURL);
completeURLLen = oscl_strlen(completeURL);
}
else
{
OSCL_ARRAY_DELETE(copyOfBaseURL);
return false;
}
break;
}
case UNKNOWN:
{
OSCL_ARRAY_DELETE(copyOfBaseURL);
return false;
// break; This statement was removed to avoid compiler warning for Unreachable Code
}
}
if (copyOfBaseURL)
OSCL_ARRAY_DELETE(copyOfBaseURL);
return true;
}
const char* findRelativeURL(const char *aURL)
{
int i = 0;
while (aURL[i] != '\0')
{
if (aURL[i] == FWD_SLASH)
{
if (aURL[i+1] != FWD_SLASH)
{
return &(aURL[i]);
}
else
{// "//"
i++;
}
}
i++;
}
return NULL;
}
URLType findRelativeURLType(const char *relativeURL)
{
if ((FWD_SLASH == relativeURL[0]) && (FWD_SLASH == relativeURL[1]))
{
return REPLACE_HOST;
}
else if ((FWD_SLASH == relativeURL[0]) && (FWD_SLASH != relativeURL[1]))
{
return REPLACE_PATH;
}
else if ((oscl_strstr(relativeURL, &COLON) != NULL) || (DOT == relativeURL[0]))
{
return UNKNOWN;
}
else
{
return CONCATENATE;
}
}
void dropTextAfterLastSlash(char *copyOfBaseURL)
{
int textLen = oscl_strlen(copyOfBaseURL) - 1;
for (int ii = textLen; ii > 0; ii--)
{
if ((FWD_SLASH == copyOfBaseURL[ii]) && (ii == textLen))
{
return;
}
else if ((FWD_SLASH != copyOfBaseURL[ii-1]) &&
(FWD_SLASH == copyOfBaseURL[ii]) &&
(FWD_SLASH != copyOfBaseURL[ii+1]))
{
copyOfBaseURL[ii+1] = '\0';//NULL;
return;
}
}
//We reach this point only if we a base URL that is not terminated with a '/'.
//So, we need to append '/' to the string.
if (8*MAX_LONG_TEXT_LEN >= (textLen + 2))
{
copyOfBaseURL[textLen+1] = FWD_SLASH;
copyOfBaseURL[textLen+2] = '\0';//NULL;
}
return;
}
void dropTextAfterFirstSlash(char *copyOfBaseURL)
{
int textLen = oscl_strlen(copyOfBaseURL);
int ii;
for (ii = 1; ii < textLen - 1; ii++)
{
if ((FWD_SLASH != copyOfBaseURL[ii-1]) &&
(FWD_SLASH == copyOfBaseURL[ii]) &&
(FWD_SLASH != copyOfBaseURL[ii+1]))
{
copyOfBaseURL[ii] = '\0';//NULL;
return;
}
}
//We reach this point if we were not able to find a '/' in the end of the clip.
if (FWD_SLASH == copyOfBaseURL[ii])
{
copyOfBaseURL[ii] = '\0';//NULL;
}
return;
}
#ifndef OSCL_TIME_H_INCLUDED
#include "oscl_time.h"
#endif
#ifndef OSCL_SNPRINTF_H_INCLUDED
#include "oscl_snprintf.h"
#endif
#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
#include "oscl_string_containers.h"
#endif
bool generatePseudoUUID(OSCL_String& aUUID)
{
aUUID = NULL;
return true;
}