webengine/wmlengine/src/utils/src/CReferrerHelper.cpp
branchGCC_SURGE
changeset 88 cb5ac135d1df
parent 82 1c386166cb87
parent 87 a1c10d5ad3d9
child 89 184e728497f3
equal deleted inserted replaced
82:1c386166cb87 88:cb5ac135d1df
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "CReferrerHelper.h"
       
    20 #include "urlloader_urlloaderint.h"
       
    21 #include "nwx_http_defs.h"	// For NW_URL_METHOD_GET
       
    22 #include "nwx_settings.h"
       
    23 
       
    24 // -----------------------------------------------------------------------------
       
    25 // SetReferrerHeader
       
    26 // Set Referrer Header
       
    27 // -----------------------------------------------------------------------------
       
    28 //
       
    29 void SetReferrerHeader(NW_HED_UrlRequest_t* urlRequest,
       
    30 					   NW_Ucs2* referrerUrl)
       
    31 {
       
    32 	TUrlLoaderScheme urlScheme;
       
    33 	NW_Text_Length_t urlLength;
       
    34 	NW_Uint8 urlFreeNeeded = NW_FALSE;
       
    35 	NW_Ucs2* requestUrl;
       
    36 
       
    37 	// Get scheme of request url for later use 
       
    38 	requestUrl = (NW_Ucs2*) NW_Text_GetUCS2Buffer (urlRequest->url, 
       
    39 								NW_Text_Flags_NullTerminated | NW_Text_Flags_Aligned,
       
    40 								&urlLength, &urlFreeNeeded);
       
    41 
       
    42 	urlScheme = UrlLoader_FindUrlScheme(requestUrl);
       
    43     if (urlFreeNeeded) 
       
    44 	{
       
    45 		NW_Mem_Free(requestUrl);
       
    46 	}
       
    47 
       
    48 	// Make sure Schema is valid before going forward
       
    49 	if (urlScheme == ESchemeInvalid)
       
    50 	{	
       
    51 		return;
       
    52 	}
       
    53 
       
    54 	// Don't pass referrer header if it is not get requests 
       
    55 	if (NW_HED_UrlRequest_GetMethod (urlRequest) == NW_URL_METHOD_GET) 
       
    56 	{	// If yes, then create referrer header
       
    57 		TUrlLoaderScheme referrerUrlScheme = UrlLoader_FindUrlScheme(referrerUrl);
       
    58 
       
    59 		if ( referrerUrlScheme != ESchemeInvalid &&
       
    60 				 !(referrerUrlScheme == ESchemeHttps && urlScheme == ESchemeHttp) )
       
    61 		{	// No referrer header sent from https to http, othercase send referrer header
       
    62 			// First check if referrerUrl has fragment in it or not, if so, remove it
       
    63 
       
    64   		    NW_Uint32 referrerUrlLength = NW_Str_Strlen(referrerUrl);
       
    65 			NW_Ucs2* newReferrerUrl = NW_Str_New(referrerUrlLength + 1); 
       
    66 			if(newReferrerUrl != NULL) 
       
    67 			{	// Not out of memory, referrer header will be created
       
    68 				NW_Uint32 i = 0;
       
    69 				while ( i < referrerUrlLength && referrerUrl[i] != '#')
       
    70 				{
       
    71 					newReferrerUrl[i] = referrerUrl[i];
       
    72 					i++;
       
    73 				}					
       
    74 						
       
    75 				// Terminate the string
       
    76 				newReferrerUrl[i] = '\0';
       
    77 
       
    78 				HttpRequestHeaders* referHeader = (HttpRequestHeaders*)UrlLoader_HeadersNew(NULL,
       
    79 															   NULL,
       
    80 															   newReferrerUrl,
       
    81 															   NULL,
       
    82 															   0,
       
    83                                                                NULL);
       
    84 				urlRequest->header = referHeader;
       
    85 				// Free newReferrerUrl
       
    86 				NW_Str_Delete(newReferrerUrl);
       
    87 				newReferrerUrl = NULL;
       
    88 			}
       
    89 			// else: Out of memory, no referrer header sent
       
    90 		}
       
    91 	} 
       
    92 }