Beispiel #1
0
        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());
        }