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