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);
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; }
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; }