public void Test16() { // 1 single write with headers + body (size > 8kB) _listener = CreateAndStartListener("http://127.0.0.1:9000/test16/"); MyNetworkStream ns = CreateNS(9000); StringBuilder sb = new StringBuilder(); sb.Append("POST /test16/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 8888\r\n\r\n"); string eights = new string ('b', 8888); sb.Append(eights); string data = sb.ToString(); Send(ns, data); HttpListenerContext c = _listener.GetContext(); HttpListenerRequest req = c.Request; using (StreamReader r = new StreamReader(req.InputStream)) { read_to_end = r.ReadToEnd(); } Assert.AreEqual(read_to_end.Length, read_to_end.Length, "Wrong length"); Assert.IsTrue(eights == read_to_end, "Wrong data"); c.Response.Close(); ns.Close(); }
public void Test14() { _listener = NetworkHelpers.CreateAndStartHttpListener("http://127.0.0.1:", out var port, "/test14/"); MyNetworkStream ns = CreateNS(port); Send(ns, "POST /test14/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123"); HttpListenerContext c = _listener.GetContext(); test14_request = c.Request; test_evt = new ManualResetEvent(false); Thread thread = new Thread(ReadToEnd); thread.Start(); if (test_evt.WaitOne(3000, false) == false) { #if MONO_FEATURE_THREAD_ABORT thread.Abort(); #else thread.Interrupt(); #endif test_evt.Close(); Assert.IsTrue(false, "Timed out"); } test_evt.Close(); c.Response.Close(); ns.Close(); Assert.AreEqual("123", read_to_end, "Did not get the expected input."); }
protected override void Open() { bool isUnix = Settings.ConnectionProtocol == MySqlConnectionProtocol.Unix || Settings.ConnectionProtocol == MySqlConnectionProtocol.UnixSocket; _stream = MyNetworkStream.CreateStream(Settings.Server, Settings.ConnectTimeout, Settings.Keepalive, Settings.Port, isUnix); if (_stream == null) { throw new MySqlException(ResourcesX.UnableToConnect); } _reader = new XPacketReaderWriter(_stream); _writer = new XPacketReaderWriter(_stream); protocol = new XProtocol(_reader, _writer); Settings.CharacterSet = String.IsNullOrWhiteSpace(Settings.CharacterSet) ? "utf8mb4" : Settings.CharacterSet; var encoding = Encoding.GetEncoding(String.Compare(Settings.CharacterSet, "utf8mb4", true) == 0 ? "UTF-8" : Settings.CharacterSet); SetState(SessionState.Connecting, false); GetAndSetCapabilities(); // Validates use of TLS. if (Settings.SslMode != MySqlSslMode.None) { if (serverSupportsTls) { new Ssl( Settings.Server, Settings.SslMode, Settings.CertificateFile, Settings.CertificateStoreLocation, Settings.CertificatePassword, Settings.CertificateThumbprint, Settings.SslCa, Settings.SslCert, Settings.SslKey) .StartSSL(ref _stream, encoding, Settings.ToString()); _reader = new XPacketReaderWriter(_stream); _writer = new XPacketReaderWriter(_stream); protocol.SetXPackets(_reader, _writer); } else { // Client requires SSL connections. string message = String.Format(Resources.NoServerSSLSupport, Settings.Server); throw new MySqlException(message); } } Authenticate(); SetState(SessionState.Open, false); }
public void Test13 () { // 0.9 _listener = CreateAndStartListener ("http://127.0.0.1:9000/test13/"); MyNetworkStream ns = CreateNS (9000); Send (ns, "GEt /test13/ HTTP/0.9\r\nHost: 127.0.0.1\r\n\r\n"); ns.GetSocket ().Shutdown (SocketShutdown.Send); string input = Receive (ns, 512); ns.Close (); Assert.IsTrue (input.StartsWith ("HTTP/1.1 400")); }
public void Test12 () { // 0.9 _listener = NetworkHelpers.CreateAndStartHttpListener ("http://127.0.0.1:", out var port, "/test12/"); MyNetworkStream ns = CreateNS (port); Send (ns, "POST /test12/ HTTP/0.9\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123"); ns.GetSocket ().Shutdown (SocketShutdown.Send); string input = Receive (ns, 512); ns.Close (); Assert.IsTrue(input.StartsWith ("HTTP/1.1 400")); }
public void Test12() { // 0.9 using (HttpListener listener = CreateAndStartListener("http://127.0.0.1:9000/test12/")) { MyNetworkStream ns = CreateNS(9000); Send(ns, "POST /test12/ HTTP/0.9\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123"); ns.GetSocket().Shutdown(SocketShutdown.Send); string input = Receive(ns, 512); ns.Close(); Assert.IsTrue(input.StartsWith("HTTP/1.1 400")); } }
public void Test10 () { // Same as Test9, but now we shutdown the socket for sending. _listener = CreateAndStartListener ("http://127.0.0.1:9000/test10/"); MyNetworkStream ns = CreateNS (9000); Send (ns, "POST /test10/ HTTP/1.0\r\nHost: 127.0.0.1\r\nTransfer-Encoding: chunked\r\n\r\n3\r\n123\r\n0\r\n\r\n"); ns.GetSocket ().Shutdown (SocketShutdown.Send); bool timeout; string response = ReceiveWithTimeout (ns, 512, 1000, out timeout); ns.Close (); Assert.IsFalse (timeout); Assert.IsTrue (response.StartsWith ("HTTP/1.1 411")); }
public void Test11() { var port = NetworkHelpers.FindFreePort(); // 0.9 _listener = CreateAndStartListener("http://127.0.0.1:" + port + "/test11/"); MyNetworkStream ns = CreateNS(port); Send(ns, "POST /test11/ HTTP/0.9\r\nHost: 127.0.0.1\r\n\r\n123"); ns.GetSocket().Shutdown(SocketShutdown.Send); string input = Receive(ns, 512); ns.Close(); Assert.IsTrue(input.StartsWith("HTTP/1.1 400")); }
private Stream CreateSocketStream(IPAddress ip, bool unix) { EndPoint endPoint; if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && unix) { endPoint = new Mono.Unix.UnixEndPoint(hostList); } else { endPoint = new IPEndPoint(ip, (int)port); } Socket socket = unix ? new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP) : new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if (keepalive > 0) { SetKeepAlive(socket, keepalive); } IAsyncResult ias = socket.BeginConnect(endPoint, null, null); if (!ias.AsyncWaitHandle.WaitOne((int)timeOut * 1000)) { socket.Dispose(); return(null); } try { socket.EndConnect(ias); } catch (Exception) { socket.Dispose(); throw; } MyNetworkStream stream = new MyNetworkStream(socket, true); GC.SuppressFinalize(socket); GC.SuppressFinalize(stream); return(stream); }
public void Test15 () { // 2 separate writes -> 2 packets. Body size > 8kB _listener = CreateAndStartListener ("http://127.0.0.1:9000/test15/"); MyNetworkStream ns = CreateNS (9000); Send (ns, "POST /test15/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 8888\r\n\r\n"); Thread.Sleep (800); string data = new string ('a', 8888); Send (ns, data); HttpListenerContext c = _listener.GetContext (); HttpListenerRequest req = c.Request; using (StreamReader r = new StreamReader (req.InputStream)) { read_to_end = r.ReadToEnd (); } Assert.AreEqual (read_to_end.Length, data.Length, "Wrong length"); Assert.IsTrue (data == read_to_end, "Wrong data"); c.Response.Close (); ns.Close (); }
public void Test14 () { _listener = CreateAndStartListener ("http://127.0.0.1:9000/test14/"); MyNetworkStream ns = CreateNS (9000); Send (ns, "POST /test14/ HTTP/1.0\r\nHost: 127.0.0.1\r\nContent-Length: 3\r\n\r\n123"); HttpListenerContext c = _listener.GetContext (); test14_request = c.Request; test_evt = new ManualResetEvent (false); Thread thread = new Thread (ReadToEnd); thread.Start (); if (test_evt.WaitOne (3000, false) == false) { thread.Abort (); test_evt.Close (); Assert.IsTrue (false, "Timed out"); } test_evt.Close (); c.Response.Close (); ns.Close (); Assert.AreEqual ("123", read_to_end, "Did not get the expected input."); }
private Stream CreateSocketStream(IPAddress ip, bool unix) { EndPoint endPoint; if (!Platform.IsWindows() && unix) endPoint = CreateUnixEndPoint(hostList); else endPoint = new IPEndPoint(ip, (int)port); Socket socket = unix ? new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP) : new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp); if (keepalive > 0) { SetKeepAlive(socket, keepalive); } IAsyncResult ias = socket.BeginConnect(endPoint, null, null); if (!ias.AsyncWaitHandle.WaitOne((int)timeOut * 1000, false)) { socket.Close(); return null; } try { socket.EndConnect(ias); } catch (Exception) { socket.Close(); throw; } MyNetworkStream stream = new MyNetworkStream(socket, true); GC.SuppressFinalize(socket); GC.SuppressFinalize(stream); return stream; }
protected override void Open() { if (Settings.ConnectionProtocol == MySqlConnectionProtocol.Tcp && Settings.IsSshEnabled()) { _sshHandler = new Ssh( Settings.SshHostName, Settings.SshUserName, Settings.SshPassword, Settings.SshKeyFile, Settings.SshPassphrase, Settings.SshPort, Settings.Server, Settings.Port, true); _sshHandler.StartClient(); } bool isUnix = Settings.ConnectionProtocol == MySqlConnectionProtocol.Unix || Settings.ConnectionProtocol == MySqlConnectionProtocol.UnixSocket; _stream = MyNetworkStream.CreateStream( Settings.Server == "127.0.0.1" || Settings.Server == "::1" ? "localhost" : Settings.Server, Settings.ConnectTimeout, Settings.Keepalive, Settings.Port, isUnix); if (_stream == null) { throw new MySqlException(ResourcesX.UnableToConnect); } _reader = new XPacketReaderWriter(_stream); _writer = new XPacketReaderWriter(_stream); protocol = new XProtocol(_reader, _writer); Settings.CharacterSet = string.IsNullOrWhiteSpace(Settings.CharacterSet) ? "utf8mb4" : Settings.CharacterSet; var encoding = Encoding.GetEncoding(string.Compare(Settings.CharacterSet, "utf8mb4", true) == 0 ? "UTF-8" : Settings.CharacterSet); SetState(SessionState.Connecting, false); try { GetAndSetCapabilities(); } catch (Exception) { if (Settings.ConnectionProtocol == MySqlConnectionProtocol.Tcp && Settings.IsSshEnabled()) { _sshHandler?.StopClient(); } throw; } // Validates use of TLS. if (Settings.SslMode != MySqlSslMode.None) { if (serverSupportsTls) { new Ssl( Settings.Server, Settings.SslMode, Settings.CertificateFile, Settings.CertificateStoreLocation, Settings.CertificatePassword, Settings.CertificateThumbprint, Settings.SslCa, Settings.SslCert, Settings.SslKey, Settings.TlsVersion) .StartSSL(ref _stream, encoding, Settings.ToString()); if (_readerCompressionController != null && _readerCompressionController.IsCompressionEnabled) { _reader = new XPacketReaderWriter(_stream, _readerCompressionController); _writer = new XPacketReaderWriter(_stream, _writerCompressionController); } else { _reader = new XPacketReaderWriter(_stream); _writer = new XPacketReaderWriter(_stream); } protocol.SetXPackets(_reader, _writer); } else { // Client requires SSL connections. string message = String.Format(Resources.NoServerSSLSupport, Settings.Server); throw new MySqlException(message); } } else if (_readerCompressionController != null && _readerCompressionController.IsCompressionEnabled) { _reader = new XPacketReaderWriter(_stream, _readerCompressionController); _writer = new XPacketReaderWriter(_stream, _writerCompressionController); protocol.SetXPackets(_reader, _writer); } Authenticate(); SetState(SessionState.Open, false); }
protected override void Open() { bool isUnix = Settings.ConnectionProtocol == MySqlConnectionProtocol.Unix || Settings.ConnectionProtocol == MySqlConnectionProtocol.UnixSocket; _stream = MyNetworkStream.CreateStream(Settings, isUnix); if (_stream == null) { throw new MySqlException(ResourcesX.UnableToConnect); } _reader = new XPacketReaderWriter(_stream); _writer = new XPacketReaderWriter(_stream); protocol = new XProtocol(_reader, _writer); Settings.CharacterSet = String.IsNullOrWhiteSpace(Settings.CharacterSet) ? "utf8mb4" : Settings.CharacterSet; var encoding = Encoding.GetEncoding(String.Compare(Settings.CharacterSet, "utf8mb4", true) == 0 ? "UTF-8" : Settings.CharacterSet); SetState(SessionState.Connecting, false); GetAndSetCapabilities(); // validates TLS use if (Settings.SslMode != MySqlSslMode.None) { if (serverSupportsTls) { new Ssl(Settings).StartSSL(ref _stream, encoding, Settings.ToString()); _reader = new XPacketReaderWriter(_stream); _writer = new XPacketReaderWriter(_stream); protocol.SetXPackets(_reader, _writer); } else { // Client requires SSL connections. string message = String.Format(Resources.NoServerSSLSupport, Settings.Server); throw new MySqlException(message); } } // Default authentication if (Settings.Auth == MySqlAuthenticationMode.Default) { if ((Settings.SslMode != MySqlSslMode.None && serverSupportsTls) || Settings.ConnectionProtocol == MySqlConnectionProtocol.Unix) { Settings.Auth = MySqlAuthenticationMode.PLAIN; AuthenticatePlain(); } else { Settings.Auth = MySqlAuthenticationMode.MYSQL41; AuthenticateMySQL41(); } } // User defined authentication else { switch (Settings.Auth) { case MySqlAuthenticationMode.PLAIN: AuthenticatePlain(); break; case MySqlAuthenticationMode.MYSQL41: AuthenticateMySQL41(); break; case MySqlAuthenticationMode.EXTERNAL: AuthenticateExternal(); break; } } SetState(SessionState.Open, false); }