main
cpp 130 lines 3.42 KB
Raw
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 #include "precomp.h"
4
5 HRESULT ScaGetHttpHeader7(
6 __in int iParentType,
7 __in_z LPCWSTR wzParentValue,
8 __in SCA_HTTP_HEADER** ppshhList,
9 __out SCA_HTTP_HEADER** ppshhOut
10 )
11 {
12 HRESULT hr = S_OK;
13 SCA_HTTP_HEADER* pshhAdd = NULL;
14 SCA_HTTP_HEADER* pshhLast = NULL;
15
16 *ppshhOut = NULL;
17
18 if (!*ppshhList)
19 {
20 return hr;
21 }
22
23 SCA_HTTP_HEADER* pshh = *ppshhList;
24 while (pshh)
25 {
26 if (iParentType == pshh->iParentType && 0 == wcscmp(wzParentValue, pshh->wzParentValue))
27 {
28 // Found a match, take this one out of the list and add it to the matched out list
29 pshhAdd = pshh;
30
31 if (pshhLast)
32 {
33 // If we're not at the beginning of the list tell the last node about it's new next (since we're taking away it's current next)
34 pshhLast->pshhNext = pshhAdd->pshhNext;
35 }
36 else
37 {
38 // If we are at the beginning (no pshhLast) update the beginning (since we're taking it)
39 *ppshhList = pshh->pshhNext;
40 }
41 pshh = pshh->pshhNext; // move on
42
43 // Add the one we've removed to the beginning of the out list
44 pshhAdd->pshhNext = *ppshhOut;
45 *ppshhOut = pshhAdd;
46 }
47 else
48 {
49 pshhLast = pshh; // remember the last we that didn't match
50 pshh = pshh->pshhNext; // move on
51 }
52 }
53
54 return hr;
55 }
56
57
58 HRESULT ScaWriteHttpHeader7(
59 __in_z LPCWSTR wzWebName,
60 __in_z LPCWSTR wzRoot,
61 SCA_HTTP_HEADER* pshhList
62 )
63 {
64
65 HRESULT hr = S_OK;
66
67 hr = ScaWriteConfigID(IIS_HTTP_HEADER_BEGIN);
68 ExitOnFailure(hr, "Fail to write httpHeader begin ID");
69
70 hr = ScaWriteConfigString(wzWebName);
71 ExitOnFailure(hr, "Fail to write httpHeader Web Key");
72
73 hr = ScaWriteConfigString(wzRoot);
74 ExitOnFailure(hr, "Fail to write httpHeader Vdir key");
75
76 // Loop through the HTTP headers
77 for (SCA_HTTP_HEADER* pshh = pshhList; pshh; pshh = pshh->pshhNext)
78 {
79 hr = ScaWriteConfigID(IIS_HTTP_HEADER);
80 ExitOnFailure(hr, "Fail to write httpHeader ID");
81
82 hr = ScaWriteConfigString(pshh->wzName);
83 ExitOnFailure(hr, "Fail to write httpHeader name");
84
85 hr = ScaWriteConfigString(pshh->wzValue);
86 ExitOnFailure(hr, "Fail to write httpHeader value");
87 }
88
89 hr = ScaWriteConfigID(IIS_HTTP_HEADER_END);
90 ExitOnFailure(hr, "Fail to write httpHeader end ID");
91
92 LExit:
93 return hr;
94 }
95
96
97 HRESULT ScaHttpHeaderCheckList7(
98 __in SCA_HTTP_HEADER* pshhList
99 )
100 {
101 if (!pshhList)
102 {
103 return S_OK;
104 }
105
106 while (pshhList)
107 {
108 WcaLog(LOGMSG_STANDARD, "Http Header: %ls for parent: %ls not used!", pshhList->wzName, pshhList->wzParentValue);
109 pshhList = pshhList->pshhNext;
110 }
111
112 return E_FAIL;
113 }
114
115
116 //static HRESULT AddHttpHeaderToList(
117 // __in SCA_HTTP_HEADER** ppshhList
118 // )
119 //{
120 // HRESULT hr = S_OK;
121 //
122 // SCA_HTTP_HEADER* pshh = static_cast<SCA_HTTP_HEADER*>(MemAlloc(sizeof(SCA_HTTP_HEADER), TRUE));
123 // ExitOnNull(pshh, hr, E_OUTOFMEMORY, "failed to allocate memory for new http header list element");
124 //
125 // pshh->pshhNext = *ppshhList;
126 // *ppshhList = pshh;
127 //
128 //LExit:
129 // return hr;
130 //}