예제 #1
0
        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);
        }
예제 #2
0
        // 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));
                }
            }
        }
예제 #3
0
 private string?GetKnownHeader(HttpSysRequestHeader header)
 {
     return(_requestMemoryBlob.GetKnownHeader(header));
 }
예제 #4
0
 private string GetKnownHeader(HttpSysRequestHeader header)
 {
     return(UnsafeNclNativeMethods.HttpApi.GetKnownHeader(_requestMemoryBlob.RequestBuffer,
                                                          _requestMemoryBlob.OriginalBlobAddress, (int)header));
 }