about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/cmd_funcs.c29
-rw-r--r--src/event/client_events.c8
-rw-r--r--src/event/client_events.h2
-rw-r--r--src/profanity.c1
-rw-r--r--src/xmpp/connection.c17
-rw-r--r--src/xmpp/iq.c5
-rw-r--r--src/xmpp/session.c40
-rw-r--r--src/xmpp/stanza.c3
-rw-r--r--src/xmpp/xmpp.h6
9 files changed, 96 insertions, 15 deletions
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index 68eec91b..07acd266 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -9589,7 +9589,7 @@ cmd_register(ProfWin* window, const char* const command, gchar** args)
 
     char* server = args[1];
 
-    jabber_conn_status_t conn_status = connection_connect_raw(server, port, tls_policy, auth_policy);
+    jabber_conn_status_t conn_status = cl_ev_connect_raw(server, port, tls_policy, auth_policy);
 
     if (conn_status == JABBER_DISCONNECTED) {
         cons_show_error("Connection attempt to server %s port %d failed.", server, port);
@@ -9598,19 +9598,26 @@ cmd_register(ProfWin* window, const char* const command, gchar** args)
     }
 
     char* username = args[0];
-    char* passwd = ui_ask_password(false);
-    char* confirm_passwd = ui_ask_password(true);
+    if (connection_get_status() != JABBER_RAW_CONNECTED) { // FIXME: this is ALWAYS the case, as the connection doesn't finish by this time.
+        cons_show_error("Raw connection attempt failed or not yet completed.");
+        log_info("Raw connection attempt failed or not yet completed.");
+    } //else {
+        char* passwd = ui_ask_password(false);
+        char* confirm_passwd = ui_ask_password(true);
 
-    if (g_strcmp0(passwd, confirm_passwd) == 0) {
-        iq_register_new_account(username, passwd);
-    } else {
-        cons_show("The two passwords do not match.");
-    }
+        if (g_strcmp0(passwd, confirm_passwd) == 0) {
+            log_info("Attempting to register account %s on server %s.", username, server);
+            iq_register_new_account(username, passwd);
+        } else {
+            cons_show("The two passwords do not match.");
+        }
+        free(passwd);
+        free(confirm_passwd);
+    //}
 
-    free(username);
-    free(passwd);
-    free(confirm_passwd);
+    options_destroy(options);
 
+    log_info("we are leaving the registration process");
     return TRUE;
 }
 
diff --git a/src/event/client_events.c b/src/event/client_events.c
index bf519feb..14b5b8c4 100644
--- a/src/event/client_events.c
+++ b/src/event/client_events.c
@@ -81,6 +81,13 @@ cl_ev_connect_account(ProfAccount* account)
     return session_connect_with_account(account);
 }
 
+jabber_conn_status_t
+cl_ev_connect_raw(const char* const altdomain, const int port, const char* const tls_policy, const char* const auth_policy)
+{
+    cons_show("Raw connecting to %s", altdomain);
+    return session_connect_raw(altdomain, port, tls_policy, auth_policy);
+}
+
 void
 cl_ev_disconnect(void)
 {
@@ -262,3 +269,4 @@ cl_ev_send_priv_msg(ProfPrivateWin* privwin, const char* const msg, const char*
         jid_destroy(jidp);
     }
 }
+
diff --git a/src/event/client_events.h b/src/event/client_events.h
index fed2bb37..8fbc7a05 100644
--- a/src/event/client_events.h
+++ b/src/event/client_events.h
@@ -40,6 +40,7 @@
 
 jabber_conn_status_t cl_ev_connect_jid(const char* const jid, const char* const passwd, const char* const altdomain, const int port, const char* const tls_policy, const char* const auth_policy);
 jabber_conn_status_t cl_ev_connect_account(ProfAccount* account);
+jabber_conn_status_t cl_ev_connect_raw(const char* const altdomain, const int port, const char* const tls_policy, const char* const auth_policy);
 
 void cl_ev_disconnect(void);
 
@@ -52,3 +53,4 @@ void cl_ev_send_muc_msg(ProfMucWin* mucwin, const char* const msg, const char* c
 void cl_ev_send_priv_msg(ProfPrivateWin* privwin, const char* const msg, const char* const oob_url);
 
 #endif
+
diff --git a/src/profanity.c b/src/profanity.c
index eb829bad..a74f26d2 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -268,3 +268,4 @@ _shutdown(void)
     ui_close();
     prefs_close();
 }
+
diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c
index 43833205..49da1dc3 100644
--- a/src/xmpp/connection.c
+++ b/src/xmpp/connection.c
@@ -342,7 +342,7 @@ connection_connect_raw(const char* const altdomain, int port,
 #endif
 
     if (connect_status == 0) {
-        conn.conn_status = JABBER_CONNECTING;
+        conn.conn_status = JABBER_RAW_CONNECTING;
     } else {
         conn.conn_status = JABBER_DISCONNECTED;
     }
@@ -686,6 +686,21 @@ _connection_handler(xmpp_conn_t* const xmpp_conn, const xmpp_conn_event_t status
 
         break;
 
+    // raw connection success
+    case XMPP_CONN_RAW_CONNECT:
+        log_debug("Connection handler: XMPP_CONN_RAW_CONNECT");
+        conn.conn_status = JABBER_RAW_CONNECTED;
+
+        Jid* my_raw_jid = jid_create(xmpp_conn_get_jid(conn.xmpp_conn));
+        log_debug("jid: %s", xmpp_conn_get_jid(conn.xmpp_conn));
+        conn.domain = strdup(my_raw_jid->domainpart);
+        jid_destroy(my_raw_jid);
+
+        conn.features_by_jid = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)g_hash_table_destroy);
+        g_hash_table_insert(conn.features_by_jid, strdup(conn.domain), g_hash_table_new_full(g_str_hash, g_str_equal, free, NULL));
+
+        break;
+
     // disconnected
     case XMPP_CONN_DISCONNECT:
         log_debug("Connection handler: XMPP_CONN_DISCONNECT");
diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c
index a35144ff..2490fd9c 100644
--- a/src/xmpp/iq.c
+++ b/src/xmpp/iq.c
@@ -2658,14 +2658,15 @@ _mam_rsm_id_handler(xmpp_stanza_t* const stanza, void* const userdata)
 void
 iq_register_new_account(const char* const user, const char* const password)
 {
-    //char* id = connection_create_stanza_id();
     xmpp_ctx_t* const ctx = connection_get_ctx();
     xmpp_stanza_t* iq = stanza_register_new_account(ctx, user, password);
 
     const char* id = xmpp_stanza_get_id(iq);
-    iq_id_handler_add(id, _register_new_account_result_id_handler, NULL, NULL);
+    iq_id_handler_add(id, _register_new_account_result_id_handler, NULL, NULL); // FIXME: function doesn't seem to ever run?
 
+    log_debug("HI hi sending registration stanza");
     iq_send_stanza(iq);
+    log_debug("registration stanza has been sent");
     xmpp_stanza_release(iq);
 }
 
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);
 }
+
diff --git a/src/xmpp/stanza.c b/src/xmpp/stanza.c
index b1958799..4849f3e1 100644
--- a/src/xmpp/stanza.c
+++ b/src/xmpp/stanza.c
@@ -2782,6 +2782,9 @@ stanza_register_new_account(xmpp_ctx_t* ctx, const char* const user, const char*
     xmpp_stanza_add_child(register_new_account, password_st);
     xmpp_stanza_release(password_st);
 
+    xmpp_stanza_add_child(iq, register_new_account);
+    xmpp_stanza_release(register_new_account);
+
     return iq;
 }
 
diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h
index 686a0dc8..0bdf6934 100644
--- a/src/xmpp/xmpp.h
+++ b/src/xmpp/xmpp.h
@@ -76,7 +76,9 @@ typedef enum {
     JABBER_CONNECTING,
     JABBER_CONNECTED,
     JABBER_DISCONNECTING,
-    JABBER_DISCONNECTED
+    JABBER_DISCONNECTED,
+    JABBER_RAW_CONNECTING,
+    JABBER_RAW_CONNECTED
 } jabber_conn_status_t;
 
 typedef enum {
@@ -183,6 +185,8 @@ void session_init(void);
 jabber_conn_status_t session_connect_with_details(const char* const jid, const char* const passwd,
                                                   const char* const altdomain, const int port, const char* const tls_policy, const char* const auth_policy);
 jabber_conn_status_t session_connect_with_account(const ProfAccount* const account);
+
+jabber_conn_status_t session_connect_raw(const char* const altdomain, const int port, const char* const tls_policy, const char* const auth_policy);
 void session_disconnect(void);
 void session_shutdown(void);
 void session_process_events(void);