package python.net;

import python.lib.Ssl;
import python.lib.ssl.Purpose;
import python.lib.socket.Socket as PSocket;
import sys.net.Host;

class SslSocket extends sys.net.Socket {

	var hostName:String;

	override function __initSocket ():Void {

		#if (python_version >= 3.4)
		var context = Ssl.create_default_context(Purpose.SERVER_AUTH);
		#else
		// hopefully these options are good enough
		var context = new python.lib.ssl.SSLContext(Ssl.PROTOCOL_SSLv23);
		context.verify_mode = Ssl.CERT_REQUIRED;
		context.set_default_verify_paths();
		context.options |= Ssl.OP_NO_SSLv2;
		context.options |= Ssl.OP_NO_SSLv3;
		context.options |= Ssl.OP_NO_COMPRESSION;
		#end
		context.options |= Ssl.OP_NO_TLSv1 #if (python_version >= 3.4) | Ssl.OP_NO_TLSv1_1 #end; // python 3.4 | Ssl.OP_NO_TLSv1_1;
		__s = new PSocket();
		__s = context.wrap_socket(__s,
			false,
			true,
			true,
			this.hostName
		);
	}

	public override function connect( host : Host, port : Int ) : Void {
		 this.hostName = host.host;
		 super.connect(host, port);
	}
	public override function bind( host : Host, port : Int ) : Void {
		throw "not implemented";
	}
}
