public bool RunServer() { //MFTestResults testResult = MFTestResults.Fail; bool result = false; SslStream sslStream = null; Socket client = null; try { if (sslServer == null) { IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port); sslServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sslServer.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ExclusiveAddressUse, false); sslServer.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, new byte[] { 0, 0, 0, 0 }); sslServer.Bind(localEndPoint); sslServer.Listen(1); } // Buffer for reading data Byte[] bytes = new Byte[2048]; String data = ""; // Start Listening for a connection. //Log.Comment("Waiting for a connection... on IPAddress: " + localEndPoint.Address.ToString() + " Port: " +localEndPoint.Port.ToString()); // Perform a blocking call to accept requests. // block in listening mode until the desktop app connects. Then we know we can continue. client = sslServer.Accept(); //client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, new byte[] { 0, 0, 0, 0 }); //client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000); //client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 5000); //Log.Comment("Connected!"); // Get a stream object for reading and writing sslStream = new SslStream(client); //SK call of SSL_ServerInit in CLR-Code sslStream.AuthenticateAsServer(certificate, ca, clientCertificateRequired, enabledSslProtocols); sslStream.ReadTimeout = 5000; sslStream.WriteTimeout = 5000; int i = -1; do { // Loop to receive all the data sent by the client. try { i = sslStream.Read(bytes, 0, bytes.Length); } catch (Exception) { //throw; } // Translate data bytes to a string. // The encoding used is application specific. string newStr = new string(System.Text.Encoding.UTF8.GetChars(bytes), 0, i); //Log.Comment("Received: " + newStr); data += newStr; if (data.IndexOf(SslClient.TERMINATOR) != -1) break; } while (i != 0); // Send back a response. //sslStream.Write(bytes, 0, i); // Return a static HTML document to the client. String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<html><head><title>.NET Micro Framework Web Server</title></head>" + "<body>"; sslStream.Write(Encoding.UTF8.GetBytes(s), 0, Encoding.UTF8.GetBytes(s).Length); for(int j = 0; j < 1000; j++) { s = "<p><bold><a href=\"http://www.microsoft.com/netmf/\">Learn more about the .NET Micro Framework by clicking here</a></bold></p>"; sslStream.Write(Encoding.UTF8.GetBytes(s), 0, Encoding.UTF8.GetBytes(s).Length); } s = "</body></html>"; sslStream.Write(Encoding.UTF8.GetBytes(s), 0, Encoding.UTF8.GetBytes(s).Length); //Log.Comment("Sent: " + data); Thread.Sleep(200); result = true; } catch (SocketException e) { if (expectedException) result = true; //Log.Comment("SocketException in StartServer(): " + e.ToString()); //Log.Comment("ErrorCode: " + e.ErrorCode.ToString()); } catch (Exception e) { if (expectedException) result = true; //Log.Comment("Exception in StartServer(): " + e.ToString()); } finally { if (sslStream != null) { sslStream.Close(); sslStream.Dispose(); //sslStream.Flush(); } if (sslServer != null) { // sslServer.Close(); } } return result; }
public MFTestResults RunServer() { MFTestResults testResult = MFTestResults.Fail; SslStream sslStream = null; try { IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port); sslServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //sslServer.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ExclusiveAddressUse, false); sslServer.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, new byte[] { 0, 0, 0, 0 }); sslServer.Bind(localEndPoint); sslServer.Listen(1); // Buffer for reading data Byte[] bytes = new Byte[2048]; String data = ""; // Start Listening for a connection. Log.Comment("Waiting for a connection... on IPAddress: " + localEndPoint.Address.ToString() + " Port: " +localEndPoint.Port.ToString()); // Perform a blocking call to accept requests. // block in listening mode until the desktop app connects. Then we know we can continue. Socket client = sslServer.Accept(); client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, new byte[] { 0, 0, 0, 0 }); //client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 30000); //client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 30000); Log.Comment("Connected!"); // Get a stream object for reading and writing sslStream = new SslStream(client); sslStream.AuthenticateAsServer(certificate, ca, clientCertificateRequired, enabledSslProtocols); int i = -1; do { // Loop to receive all the data sent by the client. i = sslStream.Read(bytes, 0, bytes.Length); // Translate data bytes to a string. // The encoding used is application specific. string newStr = new string(System.Text.Encoding.UTF8.GetChars(bytes), 0, i); Log.Comment("Received: " + newStr); data += newStr; if (data.IndexOf(SslClient.TERMINATOR) != -1) break; } while (i != 0); // Send back a response. sslStream.Write(bytes, 0, i); Log.Comment("Sent: " + data); Thread.Sleep(200); testResult = MFTestResults.Pass; } catch (SocketException e) { if (expectedException) testResult = MFTestResults.Pass; Log.Comment("SocketException in StartServer(): " + e.ToString()); Log.Comment("ErrorCode: " + e.ErrorCode.ToString()); } catch (Exception e) { if (expectedException) testResult = MFTestResults.Pass; Log.Comment("Exception in StartServer(): " + e.ToString()); } finally { if (sslServer != null) { sslServer.Close(); } if (sslStream != null) { sslStream.Dispose(); } } return testResult; }
public MFTestResults RunClient() { MFTestResults testResult = MFTestResults .Pass; try { if (ipAddress == null) Debug.Print("IpAddress must be initialized before calling RunClient()"); else serverEp = new IPEndPoint(ipAddress, port); // Create a TCP/IP client socket. clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); clientSocket.Connect(serverEp); // Create an SSL stream that will close the client's stream. sslClient = new SslStream(clientSocket); Log.Comment("Calling AuthenticateAsClient()"); // The server name must match the name on the server certificate. sslClient.AuthenticateAsClient(targetHost, cert, ca, verify, sslProtocols); // Send hello message to the server. byte[] message = Encoding.UTF8.GetBytes(messageSent); sslClient.Write(message, 0, message.Length); Log.Comment("Sent: " + messageSent); // Read message from the server. messageReceived = ReadMessage(sslClient); Log.Comment("Received: " + messageReceived); if (messageSent != messageReceived) testResult = MFTestResults.Fail; } catch (SocketException e) { if (!expectedException) testResult = MFTestResults.Fail; Log.Comment("ErrorCode: " + e.ErrorCode); Log.Comment("An exception occurred: " + e.Message); } catch (Exception e) { if (!expectedException) testResult = MFTestResults.Fail; Log.Comment("An exception occurred: " + e.Message); } finally { if (sslClient != null) { Thread.Sleep(50); sslClient.Dispose(); sslClient = null; } if (clientSocket != null) { clientSocket.Close(); clientSocket = null; } } return testResult; }