Ejemplo n.º 1
0
        private void RunServer()
        {
            try
            {
                running = true;
                listener.Start();
                Log.Comment("[Server] Starting listener...");

                evtStarted.Set();

                while (running)
                {
                    HttpListenerContext context = listener.GetContext();
                    if (context == null)
                    {
                        continue;
                    }

                    HttpListenerRequest request = context.Request;

                    // request header validation
                    if (this.RequestHeaders != null)
                    {
                        foreach (string header in this.RequestHeaders.AllKeys)
                        {
                            if (this.RequestHeaders[header] != request.Headers[header])
                            {
                                this.result = MFTestResults.Fail;
                                Log.Exception("[Server] Expected " + header + ":" + this.RequestHeaders[header] +
                                              ", but got " + header + ":" + request.Headers[header]);
                            }
                        }
                    }

                    HttpTests.PrintHeaders("Server", request.Headers);
                    // BUGBUG: Check inbound stream once 54503 & 54507 are fixed
                    //HttpTests.ReadStream("Client", request.InputStream);

                    HttpListenerResponse response = context.Response;
                    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(this.ResponseString);
                    response.Headers.Add("Server", ".Net Micro Framework Device/4.0");
                    response.SendChunked = this.SendChunked;
                    if (!this.SendChunked)
                    {
                        response.ContentLength64 = buffer.Length;
                    }

                    response.OutputStream.Write(buffer, 0, buffer.Length);
                    response.Close();
                }
                listener.Stop();
            }
            catch (Exception ex)
            {
                Log.Exception("[Server] Unexpected Server Exception", ex);
            }
            finally
            {
                if (listener.IsListening)
                {
                    listener.Abort();
                }

                running = false;
            }
        }
Ejemplo n.º 2
0
        private void RunServer()
        {
            try
            {
                running = true;

                if (serverPrefix == "https")
                {
                    if (Microsoft.SPOT.Hardware.SystemInfo.SystemID.SKU == 3)
                    {
                        listener.HttpsCert = new X509Certificate(m_emulatorCertData, "NetMF");
                    }
                    else
                    {
                        //string serverCertAsString = HttpServer.Resource1.GetString(HttpServer.Resource1.StringResources.cert_device_microsoft_com);
                        //byte[] serverCertAsArray = System.Text.Encoding.UTF8.GetBytes(serverCertAsString);
                        //listener.HttpsCert = new X509Certificate(serverCertAsArray);
                    }
                }

                listener.Start();
                Log.Comment("[Server] Starting listener...");

                evtStarted.Set();

                while (running)
                {
                    HttpListenerContext context = listener.GetContext();
                    if (context == null)
                    {
                        continue;
                    }

                    HttpListenerRequest request = context.Request;

                    HttpTests.PrintHeaders("Server Received request: ", request.Headers);

                    HttpListenerResponse listenerResponse = context.Response;
                    listenerResponse.KeepAlive = false;

                    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(this.ResponseString);

                    switch (request.HttpMethod.ToUpper())
                    {
                    case "GET": ProcessClientGetRequest(context); break;

                    case "POST": ProcessClientPostRequest(context); break;

                    case "HEAD": ProcessException(context, this); break;
                    }

                    listenerResponse.OutputStream.Write(buffer, 0, buffer.Length);
                    listenerResponse.Close();
                }
            }
            catch (ThreadAbortException)
            {
            }
            catch (WebException wex)
            {
                Log.Exception("Server throw exception:  ", wex);
                return;
            }
            catch (Exception ex)
            {
                Log.Exception("[Server] Unexpected Server Exception", ex);
            }
            finally
            {
                if (running)
                {
                    listener.Stop();
                }
            }
        }
Ejemplo n.º 3
0
        public MFTestResults FunctionalChunkTests()
        {
            MFTestResults  result = MFTestResults.Pass;
            HttpWebRequest wr     = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:" + HttpTestServer.s_CurrentPort.ToString() + "/");

            wr.UserAgent = ".Net Micro Framwork Device/4.0";
            wr.KeepAlive = true;
            HttpTestServer server = new HttpTestServer("http", ref result)
            {
                RequestUri     = wr.RequestUri,
                RequestHeaders = wr.Headers,
                ResponseString = MFUtilities.GetRandomSafeString(5000),
            };

            try
            {
                // Setup server
                server.StartServer();

                Log.Comment("Send UnChunked");
                wr.SendChunked = false;
                HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
                HttpTests.PrintHeaders("Client", response.Headers);
                using (Stream responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        string page = HttpTests.ReadStream("Client", responseStream);
                        if (page != server.ResponseString)
                        {
                            result = MFTestResults.Fail;
                            Log.Exception("[Client] Send UnChunked - Corrupt Page!");
                            Log.Exception("[Client] Expected: " + server.ResponseString);
                            Log.Exception("[Client] Received: " + page);
                        }
                    }
                    else
                    {
                        result = MFTestResults.Fail;
                        Log.Exception("[Client] Expected stream, but got null");
                    }
                }

                Log.Comment("Send Chunked");
                wr                    = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:" + HttpTestServer.s_CurrentPort.ToString() + "/");
                wr.UserAgent          = ".Net Micro Framwork Device/4.0";
                wr.SendChunked        = true;
                server.SendChunked    = true;
                server.RequestHeaders = wr.Headers;
                response              = (HttpWebResponse)wr.GetResponse();
                HttpTests.PrintHeaders("Client", response.Headers);
                using (Stream responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        string page = HttpTests.ReadStream("Client", responseStream);
                        if (page != server.ResponseString)
                        {
                            result = MFTestResults.Fail;
                            Log.Exception("[Client] Send Chunked - Corrupt Page!");
                            Log.Exception("[Client] Expected: " + server.ResponseString);
                            Log.Exception("[Client] Received: " + page);
                        }
                    }
                    else
                    {
                        result = MFTestResults.Fail;
                        Log.Exception("[Client] Expected stream, but got null");
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Exception("[Client] Unexpected Exception", ex);
                result = MFTestResults.Fail;
            }
            finally
            {
                // Stop server
                server.StopServer();
            }
            return(result);
        }