about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-02-26 17:59:04 +0000
committerJames Booth <boothj5@gmail.com>2012-02-26 17:59:04 +0000
commit72d96a92f3b912d1ddcf2a0fc494905782ef3fe9 (patch)
tree32d157bbd2c914da61d0fe4107b1b894d1430096
parenta0e5cd28bba20e6620993703aaa189ab53f45d7e (diff)
downloadprofani-tty-72d96a92f3b912d1ddcf2a0fc494905782ef3fe9.tar.gz
Added -notls argument and removed server name hack
Added jabber_conn struct to represent connections
-rw-r--r--jabber.c79
-rw-r--r--jabber.h1
-rw-r--r--main.c25
-rw-r--r--profanity.c4
-rw-r--r--profanity.h2
5 files changed, 70 insertions, 41 deletions
diff --git a/jabber.c b/jabber.c
index 08e1e635..18a2df17 100644
--- a/jabber.c
+++ b/jabber.c
@@ -30,13 +30,13 @@
 // log reference
 extern FILE *logp;
 
-// private XMPP structs
-static xmpp_log_t *_log;
-static xmpp_ctx_t *_ctx;
-static xmpp_conn_t *_conn;
-
-// connection status
-static jabber_status_t _conn_status = JABBER_STARTED;
+static struct _jabber_conn_t {
+    xmpp_log_t *log;
+    xmpp_ctx_t *ctx;
+    xmpp_conn_t *conn;
+    jabber_status_t conn_status;
+    int tls_disabled;
+} jabber_conn;
 
 void xmpp_file_logger(void * const userdata, const xmpp_log_level_t level,
     const char * const area, const char * const msg);
@@ -65,72 +65,77 @@ static int _jabber_message_handler(xmpp_conn_t * const conn,
 static int _roster_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
     void * const userdata);
 
+void init_jabber(int disable_tls)
+{
+    jabber_conn.conn_status = JABBER_STARTED;
+    jabber_conn.tls_disabled = disable_tls;
+}
+
 jabber_status_t jabber_connection_status(void)
 {
-    return (_conn_status);
+    return (jabber_conn.conn_status);
 }
 
 jabber_status_t jabber_connect(char *user, char *passwd)
 {
     xmpp_initialize();
 
-    _log = xmpp_get_file_logger();
-    _ctx = xmpp_ctx_new(NULL, _log);
-    _conn = xmpp_conn_new(_ctx);
+    jabber_conn.log = xmpp_get_file_logger();
+    jabber_conn.ctx = xmpp_ctx_new(NULL, jabber_conn.log);
+    jabber_conn.conn = xmpp_conn_new(jabber_conn.ctx);
 
-    xmpp_conn_set_jid(_conn, user);
-    xmpp_conn_set_pass(_conn, passwd);
+    xmpp_conn_set_jid(jabber_conn.conn, user);
+    xmpp_conn_set_pass(jabber_conn.conn, passwd);
 
-    // hack to not attempt tls on framework
-    char *domain = strchr(user, '@');
-    domain++;
-    if (strcmp(domain, "framework") == 0)
-        xmpp_conn_disable_tls(_conn);
+    if (jabber_conn.tls_disabled)
+        xmpp_conn_disable_tls(jabber_conn.conn);
 
-    int connect_status = xmpp_connect_client(_conn, NULL, 0, _jabber_conn_handler, _ctx);
+    int connect_status = xmpp_connect_client(jabber_conn.conn, NULL, 0, 
+        _jabber_conn_handler, jabber_conn.ctx);
 
     if (connect_status == 0)
-        _conn_status = JABBER_CONNECTING;
+        jabber_conn.conn_status = JABBER_CONNECTING;
     else  
-        _conn_status = JABBER_DISCONNECTED;
+        jabber_conn.conn_status = JABBER_DISCONNECTED;
 
-    return _conn_status;
+    return jabber_conn.conn_status;
 }
 
 void jabber_disconnect(void)
 {
-    if (_conn_status == JABBER_CONNECTED) {
-        xmpp_conn_release(_conn);
-        xmpp_ctx_free(_ctx);
+    if (jabber_conn.conn_status == JABBER_CONNECTED) {
+        xmpp_conn_release(jabber_conn.conn);
+        xmpp_ctx_free(jabber_conn.ctx);
         xmpp_shutdown();
-        _conn_status = JABBER_DISCONNECTED;
+        jabber_conn.conn_status = JABBER_DISCONNECTED;
     }
 }
 
 void jabber_process_events(void)
 {
-    if (_conn_status == JABBER_CONNECTED || _conn_status == JABBER_CONNECTING)
-        xmpp_run_once(_ctx, 10);
+    if (jabber_conn.conn_status == JABBER_CONNECTED 
+            || jabber_conn.conn_status == JABBER_CONNECTING)
+        xmpp_run_once(jabber_conn.ctx, 10);
 }
 
 void jabber_send(char *msg, char *recipient)
 {
     xmpp_stanza_t *reply, *body, *text;
 
-    reply = xmpp_stanza_new(_ctx);
+    reply = xmpp_stanza_new(jabber_conn.ctx);
     xmpp_stanza_set_name(reply, "message");
     xmpp_stanza_set_type(reply, "chat");
     xmpp_stanza_set_attribute(reply, "to", recipient);
 
-    body = xmpp_stanza_new(_ctx);
+    body = xmpp_stanza_new(jabber_conn.ctx);
     xmpp_stanza_set_name(body, "body");
 
-    text = xmpp_stanza_new(_ctx);
+    text = xmpp_stanza_new(jabber_conn.ctx);
     xmpp_stanza_set_text(text, msg);
     xmpp_stanza_add_child(body, text);
     xmpp_stanza_add_child(reply, body);
 
-    xmpp_send(_conn, reply);
+    xmpp_send(jabber_conn.conn, reply);
     xmpp_stanza_release(reply);
 }
 
@@ -138,18 +143,18 @@ void jabber_roster_request(void)
 {
     xmpp_stanza_t *iq, *query;
 
-    iq = xmpp_stanza_new(_ctx);
+    iq = xmpp_stanza_new(jabber_conn.ctx);
     xmpp_stanza_set_name(iq, "iq");
     xmpp_stanza_set_type(iq, "get");
     xmpp_stanza_set_id(iq, "roster");
 
-    query = xmpp_stanza_new(_ctx);
+    query = xmpp_stanza_new(jabber_conn.ctx);
     xmpp_stanza_set_name(query, "query");
     xmpp_stanza_set_ns(query, XMPP_NS_ROSTER);
 
     xmpp_stanza_add_child(iq, query);
     xmpp_stanza_release(query);
-    xmpp_send(_conn, iq);
+    xmpp_send(jabber_conn.conn, iq);
     xmpp_stanza_release(iq);
 }
 
@@ -197,13 +202,13 @@ static void _jabber_conn_handler(xmpp_conn_t * const conn,
         xmpp_send(conn, pres);
         xmpp_stanza_release(pres);
         jabber_roster_request();
-        _conn_status = JABBER_CONNECTED;
+        jabber_conn.conn_status = JABBER_CONNECTED;
     }
     else {
         cons_bad_show("Login failed.");
         log_msg(CONN, "disconnected");
         xmpp_stop(ctx);
-        _conn_status = JABBER_DISCONNECTED;
+        jabber_conn.conn_status = JABBER_DISCONNECTED;
     }
 }
 
diff --git a/jabber.h b/jabber.h
index c22c7565..a50d1734 100644
--- a/jabber.h
+++ b/jabber.h
@@ -30,6 +30,7 @@ typedef enum {
     JABBER_DISCONNECTED
 } jabber_status_t;
 
+void init_jabber(int disable_tls);
 jabber_status_t jabber_connection_status(void);
 jabber_status_t jabber_connect(char *user, char *passwd);
 void jabber_disconnect(void);
diff --git a/main.c b/main.c
index fd45aaa0..a9a8b6b8 100644
--- a/main.c
+++ b/main.c
@@ -20,16 +20,37 @@
  *
  */
 
+#include <stdio.h>
+#include <string.h>
+
 #include "log.h"
 #include "windows.h"
 #include "profanity.h"
 
-int main(void)
+int main(int argc, char **argv)
 {   
+    int disable_tls = 0;
+
+    // more than one argument
+    if (argc > 2) {
+        printf("Usage: profanity [-notls]\n");
+        return 1;
+
+    // argument is not -notls
+    } else if (argc == 2) {
+        char *arg1 = argv[1];
+        if (strcmp(arg1, "-notls") != 0) {
+            printf("Usage: profanity [-notls]\n");
+            return 1;
+        } else {
+            disable_tls = 1;
+        }
+    }
+
     log_init();
     gui_init();
 
-    profanity_main();
+    profanity_main(disable_tls);
         
     gui_close();
     log_close();
diff --git a/profanity.c b/profanity.c
index 17b7ccb0..063a7d6f 100644
--- a/profanity.c
+++ b/profanity.c
@@ -34,10 +34,12 @@
 static void _profanity_event_loop(int *ch, char *cmd, int *size);
 static void _process_special_keys(int *ch);
 
-void profanity_main(void)
+void profanity_main(int disable_tls)
 {
     int cmd_result = TRUE;
 
+    init_jabber(disable_tls);
+
     inp_non_block();
     while(cmd_result == TRUE) {
         int ch = ERR;
diff --git a/profanity.h b/profanity.h
index 236a640b..6a0999f8 100644
--- a/profanity.h
+++ b/profanity.h
@@ -23,6 +23,6 @@
 #ifndef PROFANITY_H
 #define PROFANITY_H
 
-void profanity_main(void);
+void profanity_main(int disable_tls);
 
 #endif