Beispiel #1
0
        public static void Process(HttpListenerRequest request)
        {
            Type         typeHttpListenerRequest = typeof(HttpListenerRequest);
            PropertyInfo propRequestBuffer       = typeHttpListenerRequest.GetProperty(
                "RequestBuffer",
                BindingFlags.NonPublic | BindingFlags.Instance);

            byte[] requestBuffer = (byte[])propRequestBuffer.GetValue(request, null);

            GCHandle pinnedRequestBuffer = GCHandle.Alloc(requestBuffer, GCHandleType.Pinned);

            try
            {
                HTTP_REQUEST httpRequest = (HTTP_REQUEST)Marshal.PtrToStructure(
                    pinnedRequestBuffer.AddrOfPinnedObject(),
                    typeof(HTTP_REQUEST));
                httpRequest.Headers.TransferEncoding.FixFirstChar();
            }
            finally
            {
                pinnedRequestBuffer.Free();
            }
        }
 internal unsafe static string GetVerb(HTTP_REQUEST* request)
 {
     return GetVerb(request, 0);
 }
            private unsafe static string GetVerb(HTTP_REQUEST* request, long fixup)
            {
                GlobalLog.Enter("HttpApi::GetVerb()");
                string verb = null;

                if ((int) request->Verb > (int) HTTP_VERB.HttpVerbUnknown && (int) request->Verb < (int) HTTP_VERB.HttpVerbMaximum)
                {
                    verb = HttpVerbs[(int) request->Verb];
                }
                else if (request->Verb == HTTP_VERB.HttpVerbUnknown && request->pUnknownVerb != null)
                {
                    verb = new string(request->pUnknownVerb + fixup, 0, request->UnknownVerbLength);
                }

                GlobalLog.Leave("HttpApi::GetVerb() return:" + ValidationHelper.ToString(verb));
                return verb;
            }
 internal static string GetKnownHeader(HTTP_REQUEST* request, int headerIndex)
 {
     return GetKnownHeader(request, 0, headerIndex);
 }
            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;
            }
 internal static extern uint HttpReceiveHttpRequest(CriticalHandle requestQueueHandle, ulong requestId, uint flags, HTTP_REQUEST* pRequestBuffer, uint requestBufferLength, uint* pBytesReturned, NativeOverlapped* pOverlapped);
Beispiel #7
0
        private unsafe static string GetVerb(HTTP_REQUEST* request, long fixup)
        {
            string verb = null;

            if ((int)request->Verb > (int)HTTP_VERB.HttpVerbUnknown && (int)request->Verb < (int)HTTP_VERB.HttpVerbMaximum)
            {
                verb = HttpVerbs[(int)request->Verb];
            }
            else if (request->Verb == HTTP_VERB.HttpVerbUnknown && request->pUnknownVerb != null)
            {
                verb = new string(request->pUnknownVerb + fixup, 0, request->UnknownVerbLength);
            }

            return verb;
        }
Beispiel #8
0
        private unsafe static 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;
        }
 private static unsafe string GetVerb(HTTP_REQUEST* request, long fixup)
 {
     string str = null;
     if ((request.Verb > HTTP_VERB.HttpVerbUnknown) && (request.Verb < HTTP_VERB.HttpVerbMaximum))
     {
         return HttpVerbs[(int) request.Verb];
     }
     if ((request.Verb == HTTP_VERB.HttpVerbUnknown) && (request.pUnknownVerb != null))
     {
         str = new string(request.pUnknownVerb + ((sbyte*) fixup), 0, request.UnknownVerbLength);
     }
     return str;
 }
 private static unsafe string GetKnownHeader(HTTP_REQUEST* request, long fixup, int headerIndex)
 {
     string str = null;
     HTTP_KNOWN_HEADER* http_known_headerPtr = &request.Headers.KnownHeaders + headerIndex;
     if (http_known_headerPtr->pRawValue != null)
     {
         str = new string(http_known_headerPtr->pRawValue + ((sbyte*) fixup), 0, http_known_headerPtr->RawValueLength);
     }
     return str;
 }