Add support for 'server_name' extension in the TLS client hello message. Fix for...
authorSebastien Pouliot <sebastien@xamarin.com>
Wed, 17 Oct 2012 15:26:19 +0000 (11:26 -0400)
committerSebastien Pouliot <sebastien@xamarin.com>
Wed, 17 Oct 2012 15:26:30 +0000 (11:26 -0400)
mcs/class/Mono.Security/Mono.Security.Protocol.Tls.Handshake.Client/TlsClientHello.cs

index 9800ce04c0b26d99bf40b311616c3042c5c7825c..2bb1d7bb8ef203974d79242059f2f5b2251ffd61 100644 (file)
@@ -111,6 +111,18 @@ namespace Mono.Security.Protocol.Tls.Handshake.Client
                        
                        // Compression methods ( 0 = none )
                        this.Write((byte)this.Context.CompressionMethod);
+
+                       // http://www.ietf.org/rfc/rfc3546.txt
+                       TlsStream extensions = new TlsStream ();
+                       byte[] server_name = System.Text.Encoding.UTF8.GetBytes (Context.ClientSettings.TargetHost);
+                       extensions.Write ((short) 0x0000);                      // ExtensionType: server_name (0)
+                       extensions.Write ((short) (server_name.Length + 5));    // ServerNameList (length)
+                       extensions.Write ((short) (server_name.Length + 3));    // ServerName (length)
+                       extensions.Write ((byte) 0x00);                         // NameType: host_name (0)
+                       extensions.Write ((short) server_name.Length);          // HostName (length)
+                       extensions.Write (server_name);                         // HostName (UTF8)
+                       this.Write ((short) extensions.Length);
+                       this.Write (extensions.ToArray ());
                }
 
                #endregion