private void ProcessRequestWorker(object parm) { SocketWrapperBase sock = (SocketWrapperBase)parm; var et = Environment.TickCount; try { var client = (sock.RemoteEndPoint as IPEndPoint).Address; lock (m_clients) { if (!m_clients.Contains(client)) { if (m_clients.Count >= m_maxConnections) { var errorHandler = new DefaultWorkerRequest(sock, m_logProvider); HttpRuntime.ProcessError(errorHandler, HttpErrorCode.Forbidden, "Maximum Connections Exceeded"); return; } else { m_clients.Add(client); } } } ThreadPool.QueueUserWorkItem(delegate { try { HttpWorkerRequest wr = new AsyncWorkerRequest(sock, m_logProvider); HttpRuntime.ProcessRequest(wr, m_logProvider); } catch (Exception ex) { string text = string.Format("HttpRuntime.ProcessRequest thread threw {0}: {1}", ex.GetType().Name, ex.Message); m_logProvider.LogPadarnError(text, null); } finally { lock (m_clients) { m_clients.Remove(client); } } }); } catch (Exception ex) { string text = string.Format("HttpRequestListener.ProcessRequest threw {0}: {1}", ex.GetType().Name, ex.Message); m_logProvider.LogPadarnError(text, null); } finally { et = Environment.TickCount - et; } }
public void IsCustomHandlerChecksVerb() { DefaultWorkerRequest target = new DefaultWorkerRequest(new SocketWrapperBaseMock(), new LogProviderMock()); DefaultWorkerRequest_Accessor a = DefaultWorkerRequest_Accessor.AttachShadow(target); // fake out the config ServerConfig cfg = new ServerConfig(); cfg.HttpHandlers.Add(new HttpHandler(HttpMethod.GET, "/mypath", "HttpHandlerMock")); ServerConfig_Accessor.m_instance = cfg; Assert.IsNull(a.GetCustomHandler("/mypath", HttpMethod_Accessor.POST)); }
public void GetHandlerForFilenameTest() { DefaultWorkerRequest target = new DefaultWorkerRequest(new SocketWrapperBaseMock(), new LogProviderMock()); DefaultWorkerRequest_Accessor a = DefaultWorkerRequest_Accessor.AttachShadow(target); string fileName = "/mypath"; string mimeType = string.Empty; // TODO: Initialize to an appropriate value IHttpHandler actual; ServerConfig cfg = new ServerConfig(); cfg.HttpHandlers.Add(new HttpHandler(HttpMethod.ANY, fileName, "HttpHandlerMock")); ServerConfig_Accessor.m_instance = cfg; actual = a.GetHandlerForFilename(fileName, mimeType, HttpMethod_Accessor.ANY); Assert.AreEqual(typeof(HttpHandlerMock), actual.GetType()); }