| 862 | } |
| 863 | |
| 864 | SC::Result SC::HttpClientSession::prepareRequest(const HttpClientRequest& source, HttpClientRequest& prepared) |
| 865 | { |
| 866 | SC_TRY_MSG(initialized, "HttpClientSession: not initialized"); |
| 867 | SC_TRY_MSG(source.headers.sizeInElements() <= sessionMemory.requestHeaders.sizeInElements(), |
| 868 | "HttpClientSession: request header capacity exhausted"); |
| 869 | |
| 870 | headerScratchUsed = 0; |
| 871 | size_t numHeaders = 0; |
| 872 | for (size_t idx = 0; idx < source.headers.sizeInElements(); ++idx) |
| 873 | { |
| 874 | sessionMemory.requestHeaders[numHeaders++] = source.headers[idx]; |
| 875 | } |
| 876 | |
| 877 | if (not sessionRequestHasHeader(source, StringSpan("Cookie"))) |
| 878 | { |
| 879 | SC_TRY(appendMatchingCookies(source.url, numHeaders)); |
| 880 | } |
| 881 | |
| 882 | if (not sessionRequestHasHeader(source, StringSpan("Authorization"))) |
| 883 | { |
| 884 | ParsedUrl parsed; |
| 885 | SC_TRY_MSG(parseUrl(source.url, parsed), "HttpClientSession: invalid request URL"); |
| 886 | for (size_t idx = 0; idx < sessionMemory.authEntries.sizeInElements(); ++idx) |
| 887 | { |
| 888 | const HttpClientSessionAuthCacheEntry& entry = sessionMemory.authEntries[idx]; |
| 889 | if (entry.isInUse() and sessionAsciiEqualsIgnoreCase(entry.origin, parsed.origin)) |
| 890 | { |
| 891 | SC_TRY(appendPreparedHeader(StringSpan("Authorization"), entry.authorizationHeader, numHeaders)); |
| 892 | break; |
| 893 | } |
| 894 | } |
| 895 | } |
| 896 | |
| 897 | prepared = source; |
| 898 | prepared.headers = {sessionMemory.requestHeaders.data(), numHeaders}; |
| 899 | return Result(true); |
| 900 | } |
| 901 | |
| 902 | SC::Result SC::HttpClientSession::captureSetCookie(StringSpan requestUrl, StringSpan setCookie) |
| 903 | { |
nothing calls this directly
no test coverage detected