diff options
Diffstat (limited to 'src/ca/scahttpheader7.cpp')
| -rw-r--r-- | src/ca/scahttpheader7.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/ca/scahttpheader7.cpp b/src/ca/scahttpheader7.cpp new file mode 100644 index 00000000..645dd8d4 --- /dev/null +++ b/src/ca/scahttpheader7.cpp | |||
| @@ -0,0 +1,130 @@ | |||
| 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 | //} | ||
