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 } |
|