Register starttls handler at the proper moment, when the stream is received.
authorSenko Rasic <senko.rasic@collabora.co.uk>
Sun, 09 Dec 2007 15:02:02 +0100
changeset 320 02b814ccc535
parent 319 2a892980f78b
child 321 d9dc997db56b
Register starttls handler at the proper moment, when the stream is received.
loudmouth/lm-connection.c
--- a/loudmouth/lm-connection.c	Sun Dec 09 14:26:44 2007 +0100
+++ b/loudmouth/lm-connection.c	Sun Dec 09 15:02:02 2007 +0100
@@ -691,6 +691,24 @@
 }
 
 
+static LmHandlerResult
+_lm_connection_starttls_cb (LmMessageHandler *handler,
+			    LmConnection *connection,
+			    LmMessage *message,
+			    gpointer user_data)
+{
+	if (lm_socket_starttls (connection->socket)) {
+		connection->tls_started = TRUE;
+		connection_send_stream_header (connection);
+	} else {
+		connection_do_close (connection);
+		connection_signal_disconnect (connection, 
+					      LM_DISCONNECT_REASON_ERROR);
+	}
+
+	return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+}
+
 static void
 connection_stream_received (LmConnection *connection, LmMessage *m)
 {
@@ -714,6 +732,20 @@
 		 * one sasl mechanism */
 		if (!connection->sasl)
 			connection->sasl = lm_sasl_new(connection);
+
+		/* if we'd like to use tls and we didn't already start
+		 * it, prepare for it now */
+		if (connection->ssl &&
+				lm_ssl_get_use_starttls (connection->ssl) &&
+				!connection->starttls_cb) {
+			connection->starttls_cb  =
+				lm_message_handler_new (_lm_connection_starttls_cb,
+					NULL, NULL);
+			lm_connection_register_message_handler (connection,
+				connection->starttls_cb,
+				LM_MESSAGE_TYPE_PROCEED,
+				LM_HANDLER_PRIORITY_FIRST);
+		}
 	} else {
 		lm_verbose ("Old Jabber stream received: %s\n", 
 			    connection->stream_id);
@@ -988,24 +1020,6 @@
 }
 
 static LmHandlerResult
-_lm_connection_starttls_cb (LmMessageHandler *handler,
-			    LmConnection *connection,
-			    LmMessage *message,
-			    gpointer user_data)
-{
-	if (lm_socket_starttls (connection->socket)) {
-		connection_send_stream_header (connection);
-		connection->tls_started = TRUE;
-	} else {
-		connection_do_close (connection);
-		connection_signal_disconnect (connection, 
-					      LM_DISCONNECT_REASON_ERROR);
-	}
-
-	return LM_HANDLER_RESULT_REMOVE_MESSAGE;
-}
-
-static LmHandlerResult
 connection_features_cb (LmMessageHandler *handler,
 			    LmConnection     *connection,
 			    LmMessage        *message,
@@ -1400,16 +1414,6 @@
 			LM_MESSAGE_TYPE_STREAM_FEATURES,
 			LM_HANDLER_PRIORITY_FIRST);
 
-		if (connection->ssl && lm_ssl_get_use_starttls (connection->ssl)) {
-			connection->starttls_cb  =
-				lm_message_handler_new (_lm_connection_starttls_cb,
-					NULL, NULL);
-			lm_connection_register_message_handler (connection,
-				connection->starttls_cb,
-				LM_MESSAGE_TYPE_PROCEED,
-				LM_HANDLER_PRIORITY_FIRST);
-		}
-
 		return TRUE;
 	}