# HG changeset patch # User Paul Aurich # Date 1228982783 0 # Node ID c6772d61af1f8d23d4bd008afa6299e98db035d9 # Parent d3f47707e2603c2ba11ea7338554ae424fc4ae44 Use purple_proxy_connect + purple_ssl_connect_with_host_fd() to hopefully silence warnings (I get more warnings because I don't have the certificate in a trusted store) diff -r d3f47707e260 -r c6772d61af1f libpurple/protocols/oscar/flap_connection.c --- a/libpurple/protocols/oscar/flap_connection.c Thu Dec 11 07:14:50 2008 +0000 +++ b/libpurple/protocols/oscar/flap_connection.c Thu Dec 11 08:06:23 2008 +0000 @@ -476,6 +476,7 @@ g_free(conn->error_message); g_free(conn->cookie); + g_free(conn->ssl_cert_cn); /* * Free conn->internal, if necessary diff -r d3f47707e260 -r c6772d61af1f libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Thu Dec 11 07:14:50 2008 +0000 +++ b/libpurple/protocols/oscar/oscar.c Thu Dec 11 08:06:23 2008 +0000 @@ -1227,6 +1227,32 @@ } static void +ssl_proxy_conn_established_cb(gpointer data, gint source, const gchar *error_message) +{ + OscarData *od; + PurpleConnection *gc; + PurpleAccount *account; + FlapConnection *conn; + + conn = data; + od = conn->od; + gc = od->gc; + account = purple_connection_get_account(gc); + + conn->connect_data = NULL; + + if (source < 0) + { + connection_common_error_cb(conn, error_message); + return; + } + + conn->gsc = purple_ssl_connect_with_host_fd(account, source, + ssl_connection_established_cb, ssl_connection_error_cb, + conn->ssl_cert_cn, conn); +} + +static void flap_connection_established_bos(OscarData *od, FlapConnection *conn) { PurpleConnection *gc = od->gc; @@ -1992,9 +2018,13 @@ if (redir->use_ssl) { - newconn->gsc = purple_ssl_connect(account, host, port, - ssl_connection_established_cb, ssl_connection_error_cb, - newconn); + /* FIXME: It should be possible to specify a certificate common name + * distinct from the host we're passing to purple_ssl_connect. The + * way to work around that is to use purple_proxy_connect + + * purple_ssl_connect_with_host_fd */ + newconn->ssl_cert_cn = g_strdup(redir->ssl_cert_cn); + newconn->connect_data = purple_proxy_connect(NULL, account, host, port, + ssl_proxy_conn_established_cb, newconn); } else { diff -r d3f47707e260 -r c6772d61af1f libpurple/protocols/oscar/oscar.h --- a/libpurple/protocols/oscar/oscar.h Thu Dec 11 07:14:50 2008 +0000 +++ b/libpurple/protocols/oscar/oscar.h Thu Dec 11 08:06:23 2008 +0000 @@ -417,6 +417,7 @@ guint16 cookielen; guint8 *cookie; gpointer new_conn_data; + gchar *ssl_cert_cn; int fd; PurpleSslConnection *gsc;