private string GetKnowHeaderHelper(HttpSysRequestHeader header, long fixup, HttpApiTypes.HTTP_REQUEST *request) { int headerIndex = (int)header; string value = null; HttpApiTypes.HTTP_KNOWN_HEADER *pKnownHeader = (&request->Headers.KnownHeaders) + headerIndex; // For known headers, when header value is empty, RawValueLength will be 0 and // pRawValue will point to empty string ("\0") if (pKnownHeader->RawValueLength > 0) { value = HeaderEncoding.GetString(pKnownHeader->pRawValue + fixup, pKnownHeader->RawValueLength); } return(value); }
// These methods are for accessing the request structure after it has been unpinned. They need to adjust addresses // in case GC has moved the original object. internal string GetKnownHeader(HttpSysRequestHeader header) { if (_permanentlyPinned) { return(GetKnowHeaderHelper(header, 0, _nativeRequest)); } else { fixed(byte *pMemoryBlob = _backingBuffer) { var request = (HttpApiTypes.HTTP_REQUEST *)(pMemoryBlob + _bufferAlignment); long fixup = pMemoryBlob - (byte *)_originalBufferAddress; return(GetKnowHeaderHelper(header, fixup, request)); } } }
private string?GetKnownHeader(HttpSysRequestHeader header) { return(_requestMemoryBlob.GetKnownHeader(header)); }
private string GetKnownHeader(HttpSysRequestHeader header) { return(UnsafeNclNativeMethods.HttpApi.GetKnownHeader(_requestMemoryBlob.RequestBuffer, _requestMemoryBlob.OriginalBlobAddress, (int)header)); }