/*
* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
#include "CReferrerHelper.h"
#include "urlloader_urlloaderint.h"
#include "nwx_http_defs.h" // For NW_URL_METHOD_GET
#include "nwx_settings.h"
// -----------------------------------------------------------------------------
// SetReferrerHeader
// Set Referrer Header
// -----------------------------------------------------------------------------
//
void SetReferrerHeader(NW_HED_UrlRequest_t* urlRequest,
NW_Ucs2* referrerUrl)
{
TUrlLoaderScheme urlScheme;
NW_Text_Length_t urlLength;
NW_Uint8 urlFreeNeeded = NW_FALSE;
NW_Ucs2* requestUrl;
// Get scheme of request url for later use
requestUrl = (NW_Ucs2*) NW_Text_GetUCS2Buffer (urlRequest->url,
NW_Text_Flags_NullTerminated | NW_Text_Flags_Aligned,
&urlLength, &urlFreeNeeded);
urlScheme = UrlLoader_FindUrlScheme(requestUrl);
if (urlFreeNeeded)
{
NW_Mem_Free(requestUrl);
}
// Make sure Schema is valid before going forward
if (urlScheme == ESchemeInvalid)
{
return;
}
// Don't pass referrer header if it is not get requests
if (NW_HED_UrlRequest_GetMethod (urlRequest) == NW_URL_METHOD_GET)
{ // If yes, then create referrer header
TUrlLoaderScheme referrerUrlScheme = UrlLoader_FindUrlScheme(referrerUrl);
if ( referrerUrlScheme != ESchemeInvalid &&
!(referrerUrlScheme == ESchemeHttps && urlScheme == ESchemeHttp) )
{ // No referrer header sent from https to http, othercase send referrer header
// First check if referrerUrl has fragment in it or not, if so, remove it
NW_Uint32 referrerUrlLength = NW_Str_Strlen(referrerUrl);
NW_Ucs2* newReferrerUrl = NW_Str_New(referrerUrlLength + 1);
if(newReferrerUrl != NULL)
{ // Not out of memory, referrer header will be created
NW_Uint32 i = 0;
while ( i < referrerUrlLength && referrerUrl[i] != '#')
{
newReferrerUrl[i] = referrerUrl[i];
i++;
}
// Terminate the string
newReferrerUrl[i] = '\0';
HttpRequestHeaders* referHeader = (HttpRequestHeaders*)UrlLoader_HeadersNew(NULL,
NULL,
newReferrerUrl,
NULL,
0,
NULL);
urlRequest->header = referHeader;
// Free newReferrerUrl
NW_Str_Delete(newReferrerUrl);
newReferrerUrl = NULL;
}
// else: Out of memory, no referrer header sent
}
}
}