private static unsafe string GetKnownHeader(HTTP_REQUEST *request, long fixup, int headerIndex) { if (NetEventSource.IsEnabled) { NetEventSource.Enter(null); } string header = null; HTTP_KNOWN_HEADER *pKnownHeader = (&request->Headers.KnownHeaders) + headerIndex; if (NetEventSource.IsEnabled) { NetEventSource.Info(null, $"HttpApi::GetKnownHeader() pKnownHeader:0x{(IntPtr)pKnownHeader}"); NetEventSource.Info(null, $"HttpApi::GetKnownHeader() pRawValue:0x{(IntPtr)pKnownHeader->pRawValue} RawValueLength:{pKnownHeader->RawValueLength}"); } // For known headers, when header value is empty, RawValueLength will be 0 and // pRawValue will point to empty string if (pKnownHeader->pRawValue != null) { header = new string(pKnownHeader->pRawValue + fixup, 0, pKnownHeader->RawValueLength); } if (NetEventSource.IsEnabled) { NetEventSource.Exit(null, $"HttpApi::GetKnownHeader() return:{header}"); } return(header); }
// Server API internal static unsafe WebHeaderCollection GetHeaders(byte[] memoryBlob, IntPtr originalAddress) { NetEventSource.Enter(null); // Return value. WebHeaderCollection headerCollection = new WebHeaderCollection(); fixed(byte *pMemoryBlob = memoryBlob) { HTTP_REQUEST *request = (HTTP_REQUEST *)pMemoryBlob; long fixup = pMemoryBlob - (byte *)originalAddress; int index; // unknown headers if (request->Headers.UnknownHeaderCount != 0) { HTTP_UNKNOWN_HEADER *pUnknownHeader = (HTTP_UNKNOWN_HEADER *)(fixup + (byte *)request->Headers.pUnknownHeaders); for (index = 0; index < request->Headers.UnknownHeaderCount; index++) { // For unknown headers, when header value is empty, RawValueLength will be 0 and // pRawValue will be null. if (pUnknownHeader->pName != null && pUnknownHeader->NameLength > 0) { string headerName = new string(pUnknownHeader->pName + fixup, 0, pUnknownHeader->NameLength); string headerValue; if (pUnknownHeader->pRawValue != null && pUnknownHeader->RawValueLength > 0) { headerValue = new string(pUnknownHeader->pRawValue + fixup, 0, pUnknownHeader->RawValueLength); } else { headerValue = string.Empty; } headerCollection.Add(headerName, headerValue); } pUnknownHeader++; } } // known headers HTTP_KNOWN_HEADER *pKnownHeader = &request->Headers.KnownHeaders; for (index = 0; index < HttpHeaderRequestMaximum; index++) { // For known headers, when header value is empty, RawValueLength will be 0 and // pRawValue will point to empty string ("\0") if (pKnownHeader->pRawValue != null) { string headerValue = new string(pKnownHeader->pRawValue + fixup, 0, pKnownHeader->RawValueLength); headerCollection.Add(HTTP_REQUEST_HEADER_ID.ToString(index), headerValue); } pKnownHeader++; } } NetEventSource.Exit(null); return(headerCollection); }
private static string GetKnownHeader(HTTP_REQUEST *request, long fixup, int headerIndex) { GlobalLog.Enter("HttpApi::GetKnownHeader()"); string header = null; HTTP_KNOWN_HEADER *pKnownHeader = (&request->Headers.KnownHeaders) + headerIndex; GlobalLog.Print("HttpApi::GetKnownHeader() pKnownHeader:0x" + ((IntPtr)pKnownHeader).ToString("x")); GlobalLog.Print("HttpApi::GetKnownHeader() pRawValue:0x" + ((IntPtr)pKnownHeader->pRawValue).ToString("x") + " RawValueLength:" + pKnownHeader->RawValueLength.ToString()); // For known headers, when header value is empty, RawValueLength will be 0 and // pRawValue will point to empty string ("\0") if (pKnownHeader->pRawValue != null) { header = new string(pKnownHeader->pRawValue + fixup, 0, pKnownHeader->RawValueLength); } GlobalLog.Leave("HttpApi::GetKnownHeader() return:" + ValidationHelper.ToString(header)); return(header); }