diff --git a/loudmouth/lm-connection.c b/loudmouth/lm-connection.c index 13ae1d3..93c3fa8 100644 --- a/loudmouth/lm-connection.c +++ b/loudmouth/lm-connection.c @@ -927,7 +927,7 @@ _lm_connection_starttls_cb (LmMessageHandler *handler, LmMessage *message, gpointer user_data) { - if (lm_socket_starttls (connection->socket, connection->ssl)) { + if (lm_socket_starttls (connection->socket)) { connection_send_stream_header (connection); } else { connection_do_close (connection); diff --git a/loudmouth/lm-socket.c b/loudmouth/lm-socket.c index 4b61c7c..bb8989f 100644 --- a/loudmouth/lm-socket.c +++ b/loudmouth/lm-socket.c @@ -340,18 +340,13 @@ _lm_socket_ssl_init (LmSocket *socket, gboolean delayed) } gboolean -lm_socket_starttls (LmSocket *socket, LmSSL *ssl) +lm_socket_starttls (LmSocket *socket) { - /* no-op if we're using old-style ssl (so ssl is set up already) */ - if (socket->ssl) - return TRUE; + g_return_val_if_fail (lm_ssl_get_use_starttls(socket->ssl) == FALSE, FALSE); - socket->ssl = ssl; return _lm_socket_ssl_init (socket, TRUE); } - - void _lm_socket_succeeded (LmConnectData *connect_data) { @@ -996,7 +991,7 @@ lm_socket_create (GMainContext *context, socket->server = g_strdup (server); socket->port = port; socket->cancel_open = FALSE; - socket->ssl = NULL; + socket->ssl = ssl; socket->proxy = NULL; socket->blocking = blocking; socket->data_func = data_func; @@ -1012,8 +1007,7 @@ lm_socket_create (GMainContext *context, socket->proxy = lm_proxy_ref (proxy); } - if (ssl) { - socket->ssl = lm_ssl_ref (ssl); + if (socket->ssl && !lm_ssl_get_use_starttls (socket->ssl)) { _lm_ssl_initialize (socket->ssl); } diff --git a/loudmouth/lm-socket.h b/loudmouth/lm-socket.h index 2d8287b..2758f6f 100644 --- a/loudmouth/lm-socket.h +++ b/loudmouth/lm-socket.h @@ -69,7 +69,7 @@ void lm_socket_unref (LmSocket *socket); #ifdef HAVE_ASYNCNS void _asyncns_cancel (LmSocket *socket); #endif -gboolean lm_socket_starttls (LmSocket *socket, LmSSL *ssl); +gboolean lm_socket_starttls (LmSocket *socket); #endif /* __LM_SOCKET_H__ */