mirror of https://github.com/TakeV-Lambda/dino.git
39 lines
1.4 KiB
Vala
39 lines
1.4 KiB
Vala
public class Xmpp.DirectTlsXmppStream : TlsXmppStream {
|
|
|
|
const string[] ADVERTISED_PROTOCOLS = {"xmpp-client", null};
|
|
|
|
string host;
|
|
uint16 port;
|
|
TlsXmppStream.OnInvalidCertWrapper on_invalid_cert;
|
|
|
|
public DirectTlsXmppStream(Jid remote_name, string host, uint16 port, TlsXmppStream.OnInvalidCertWrapper on_invalid_cert) {
|
|
base(remote_name);
|
|
this.host = host;
|
|
this.port = port;
|
|
this.on_invalid_cert = on_invalid_cert;
|
|
}
|
|
|
|
public override async void connect() throws IOError {
|
|
SocketClient client = new SocketClient();
|
|
try {
|
|
debug("Connecting to %s:%i (tls)", host, port);
|
|
IOStream? io_stream = yield client.connect_to_host_async(host, port);
|
|
TlsConnection tls_connection = TlsClientConnection.new(io_stream, new NetworkAddress(remote_name.to_string(), port));
|
|
#if GLIB_2_60
|
|
tls_connection.set_advertised_protocols(ADVERTISED_PROTOCOLS);
|
|
#endif
|
|
tls_connection.accept_certificate.connect(on_invalid_certificate);
|
|
tls_connection.accept_certificate.connect((cert, flags) => on_invalid_cert.func(cert, flags));
|
|
reset_stream(tls_connection);
|
|
|
|
yield setup();
|
|
|
|
attach_negotation_modules();
|
|
} catch (IOError e) {
|
|
throw e;
|
|
} catch (Error e) {
|
|
throw new IOError.CONNECTION_REFUSED("Failed connecting to %s:%i (tls): %s", host, port, e.message);
|
|
}
|
|
}
|
|
}
|