--- a/docs/reference/tmpl/lm-message.sgml Mon Oct 08 14:48:38 2007 +0200
+++ b/docs/reference/tmpl/lm-message.sgml Mon Oct 29 14:49:34 2007 +0100
@@ -42,6 +42,8 @@
@LM_MESSAGE_TYPE_SUCCESS:
@LM_MESSAGE_TYPE_FAILURE:
@LM_MESSAGE_TYPE_STREAM_ERROR: a stream:error element
+@LM_MESSAGE_TYPE_PROCEED:
+@LM_MESSAGE_TYPE_STARTTLS:
@LM_MESSAGE_TYPE_UNKNOWN: incoming message is of some unknown type.
<!-- ##### ENUM LmMessageSubType ##### -->
--- a/docs/reference/tmpl/lm-utils.sgml Mon Oct 08 14:48:38 2007 +0200
+++ b/docs/reference/tmpl/lm-utils.sgml Mon Oct 29 14:49:34 2007 +0100
@@ -17,3 +17,12 @@
<!-- ##### SECTION Stability_Level ##### -->
+<!-- ##### FUNCTION lm_utils_get_localtime ##### -->
+<para>
+
+</para>
+
+@stamp:
+@Returns:
+
+
--- a/docs/reference/tmpl/loudmouth-unused.sgml Mon Oct 08 14:48:38 2007 +0200
+++ b/docs/reference/tmpl/loudmouth-unused.sgml Mon Oct 29 14:49:34 2007 +0100
@@ -91,11 +91,3 @@
@message_node:
-<!-- ##### FUNCTION lm_utils_get_localtime ##### -->
-<para>
-
-</para>
-
-@stamp:
-@Returns:
-
--- a/loudmouth/lm-connection.c Mon Oct 08 14:48:38 2007 +0200
+++ b/loudmouth/lm-connection.c Mon Oct 29 14:49:34 2007 +0100
@@ -76,11 +76,7 @@
LmSASL *sasl;
gchar *resource;
LmMessageHandler *features_cb;
- gboolean use_starttls;
LmMessageHandler *starttls_cb;
- LmSSLFunction ssl_fail_cb;
- gpointer ssl_fail_cb_data;
- gboolean require_starttls;
/* Communication */
guint open_id;
@@ -741,9 +737,11 @@
if (connection->disconnect_cb && connection->disconnect_cb->func) {
LmCallback *cb = connection->disconnect_cb;
+ lm_connection_ref (connection);
(* ((LmDisconnectFunction) cb->func)) (connection,
reason,
cb->user_data);
+ lm_connection_unref (connection);
}
}
@@ -887,16 +885,6 @@
}
}
-static LmSSLResponse
-connection_tls_error (LmSSL *ssl,
- LmSSLStatus status,
- gpointer user_data)
-{
- LmConnection *conn = (LmConnection *) user_data;
-
- return conn->ssl_fail_cb (ssl, status, conn->ssl_fail_cb_data);
-}
-
static LmHandlerResult
connection_bind_reply (LmMessageHandler *handler,
LmConnection *connection,
@@ -944,8 +932,6 @@
LmMessage *message,
gpointer user_data)
{
- connection->ssl = lm_ssl_new (NULL, connection_tls_error, connection, NULL);
- lm_ssl_ref (connection->ssl);
if (lm_socket_starttls (connection->socket, connection->ssl)) {
connection_send_stream_header (connection);
} else {
@@ -967,27 +953,31 @@
LmMessageNode *starttls_node;
starttls_node = lm_message_node_find_child (message->node, "starttls");
- if (connection->use_starttls && starttls_node) {
- LmMessage *msg;
+ if (connection->ssl && lm_ssl_get_use_starttls (connection->ssl)) {
+ if (starttls_node) {
+ LmMessage *msg;
- msg = lm_message_new (NULL, LM_MESSAGE_TYPE_STARTTLS);
+ msg = lm_message_new (NULL, LM_MESSAGE_TYPE_STARTTLS);
- lm_message_node_set_attributes (msg->node,
- "xmlns", XMPP_NS_STARTTLS,
- NULL);
+ lm_message_node_set_attributes (
+ msg->node,
+ "xmlns", XMPP_NS_STARTTLS,
+ NULL);
- lm_connection_send (connection, msg, NULL);
- lm_message_unref (msg);
+ lm_connection_send (connection, msg, NULL);
+ lm_message_unref (msg);
- return LM_HANDLER_RESULT_REMOVE_MESSAGE;
- } else if (!connection->ssl && connection->require_starttls) {
- /* If we don't have ssl set up already, and there
- * were no starttls features present, and we do
- * require it, this is the place to scream */
+ return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+ } else if (lm_ssl_get_require_starttls (connection->ssl)) {
+ /* If there were no starttls features present and we require it, this is
+ * the place to scream. */
- g_debug ("%s: required StartTLS feature not supported by server", G_STRFUNC);
- connection_do_close (connection);
- return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+ g_debug ("%s: required StartTLS feature not supported by server", G_STRFUNC);
+ connection_do_close (connection);
+ connection_signal_disconnect (connection,
+ LM_DISCONNECT_REASON_ERROR);
+ return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+ }
}
bind_node = lm_message_node_find_child (message->node, "bind");
@@ -1343,7 +1333,7 @@
LM_MESSAGE_TYPE_STREAM_FEATURES,
LM_HANDLER_PRIORITY_FIRST);
- if (connection->use_starttls) {
+ if (connection->ssl && lm_ssl_get_use_starttls (connection->ssl)) {
connection->starttls_cb =
lm_message_handler_new (_lm_connection_starttls_cb,
NULL, NULL);
@@ -2028,20 +2018,3 @@
connection_free (connection);
}
}
-
-/*
- * lm_connection_use_startls:
- * @connection: Connection to use STARTTLS on
- */
-void
-lm_connection_use_starttls (LmConnection *connection,
- gboolean require,
- LmSSLFunction ssl_fail_cb,
- gpointer user_data)
-{
- connection->use_starttls = TRUE;
- connection->ssl_fail_cb = ssl_fail_cb;
- connection->ssl_fail_cb_data = user_data;
- connection->require_starttls = require;
-}
-
--- a/loudmouth/lm-connection.h Mon Oct 08 14:48:38 2007 +0200
+++ b/loudmouth/lm-connection.h Mon Oct 29 14:49:34 2007 +0100
@@ -159,10 +159,6 @@
LmConnectionState lm_connection_get_state (LmConnection *connection);
LmConnection* lm_connection_ref (LmConnection *connection);
void lm_connection_unref (LmConnection *connection);
-void lm_connection_use_starttls (LmConnection *connection,
- gboolean require,
- LmSSLFunction ssl_fail_cb,
- gpointer user_data);
G_END_DECLS
--- a/loudmouth/lm-ssl-base.h Mon Oct 08 14:48:38 2007 +0200
+++ b/loudmouth/lm-ssl-base.h Mon Oct 29 14:49:34 2007 +0100
@@ -32,6 +32,8 @@
GDestroyNotify data_notify;
gchar *expected_fingerprint;
char fingerprint[20];
+ gboolean use_starttls;
+ gboolean require_starttls;
gint ref_count;
};
--- a/loudmouth/lm-ssl-generic.c Mon Oct 08 14:48:38 2007 +0200
+++ b/loudmouth/lm-ssl-generic.c Mon Oct 29 14:49:34 2007 +0100
@@ -170,6 +170,52 @@
}
/**
+ * lm_ssl_use_starttls:
+ * @ssl: an #LmSSL
+ *
+ * Set whether STARTTLS should be used.
+ **/
+void
+lm_ssl_use_starttls (LmSSL *ssl,
+ gboolean use_starttls,
+ gboolean require_starttls)
+{
+ LmSSLBase *base;
+
+ base = LM_SSL_BASE (ssl);
+ base->use_starttls = use_starttls;
+ base->require_starttls = require_starttls;
+}
+
+/**
+ * lm_ssl_get_use_starttls:
+ *
+ * Return value: TRUE is @ssl is configured to use STARTTLS.
+ **/
+gboolean
+lm_ssl_get_use_starttls (LmSSL *ssl)
+{
+ LmSSLBase *base;
+
+ base = LM_SSL_BASE (ssl);
+ return base->use_starttls;
+}
+
+/**
+ * lm_ssl_get_require_starttls:
+ *
+ * Return value: TRUE if @ssl requires that STARTTLS succeed.
+ **/
+gboolean
+lm_ssl_get_require_starttls (LmSSL *ssl)
+{
+ LmSSLBase *base;
+
+ base = LM_SSL_BASE (ssl);
+ return base->require_starttls;
+}
+
+/**
* lm_ssl_unref
* @ssl: an #LmSSL
*
--- a/loudmouth/lm-ssl.h Mon Oct 08 14:48:38 2007 +0200
+++ b/loudmouth/lm-ssl.h Mon Oct 29 14:49:34 2007 +0100
@@ -65,6 +65,13 @@
const gchar * lm_ssl_get_fingerprint (LmSSL *ssl);
+void lm_ssl_use_starttls (LmSSL *ssl,
+ gboolean use_starttls,
+ gboolean require);
+
+gboolean lm_ssl_get_use_starttls (LmSSL *ssl);
+
+gboolean lm_ssl_get_require_starttls (LmSSL *ssl);
LmSSL * lm_ssl_ref (LmSSL *ssl);
void lm_ssl_unref (LmSSL *ssl);