about summary refs log tree commit diff stats
path: root/src/xmpp/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmpp/session.c')
-rw-r--r--src/xmpp/session.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/xmpp/session.c b/src/xmpp/session.c
index e81d55ae..ccd36865 100644
--- a/src/xmpp/session.c
+++ b/src/xmpp/session.c
@@ -204,6 +204,43 @@ session_connect_with_details(const char* const jid, const char* const passwd, co
         saved_details.auth_policy);
 }
 
+jabber_conn_status_t
+session_connect_raw(const char* const altdomain, const int port, const char* const tls_policy,
+                    const char* const auth_policy)
+{
+    assert(altdomain != NULL);
+
+    _session_free_saved_account();
+    _session_free_saved_details();
+
+    // save details for reconnect
+    saved_details.altdomain = strdup(altdomain);
+    if (port != 0) {
+        saved_details.port = port;
+    } else {
+        saved_details.port = 0;
+    }
+    if (tls_policy) {
+        saved_details.tls_policy = strdup(tls_policy);
+    } else {
+        saved_details.tls_policy = NULL;
+    }
+    if (auth_policy) {
+        saved_details.auth_policy = strdup(auth_policy);
+    } else {
+        saved_details.auth_policy = NULL;
+    }
+
+    // raw connect
+    log_info("Raw connecting to server: %s", altdomain);
+
+    return connection_connect_raw(
+        saved_details.altdomain,
+        saved_details.port,
+        saved_details.tls_policy,
+        saved_details.auth_policy);
+}
+
 void
 session_autoping_fail(void)
 {
@@ -261,6 +298,8 @@ session_process_events(void)
     switch (conn_status) {
     case JABBER_CONNECTED:
     case JABBER_CONNECTING:
+    case JABBER_RAW_CONNECTED:
+    case JABBER_RAW_CONNECTING:
     case JABBER_DISCONNECTING:
         connection_check_events();
         break;
@@ -543,3 +582,4 @@ _session_free_saved_details(void)
     FREE_SET_NULL(saved_details.tls_policy);
     FREE_SET_NULL(saved_details.auth_policy);
 }
+