aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/jabber/jabber.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/jabber/jabber.c')
-rw-r--r--protocols/jabber/jabber.c89
1 files changed, 60 insertions, 29 deletions
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c
index c8e8ceca..e7f4534e 100644
--- a/protocols/jabber/jabber.c
+++ b/protocols/jabber/jabber.c
@@ -562,35 +562,17 @@ static void gjab_start(gjconn gjc)
{
account_t *acc;
int port = -1, ssl = 0;
- char *server = NULL, *s;
+ char *server = NULL;
if (!gjc || gjc->state != JCONN_STATE_OFF)
return;
acc = GJ_GC(gjc)->acc;
- if (acc->server) {
- /* If there's a dot, assume there's a hostname in the beginning */
- if (strchr(acc->server, '.')) {
- server = g_strdup(acc->server);
- if ((s = strchr(server, ':')))
- *s = 0;
- }
-
- /* After the hostname, there can be a port number */
- s = strchr(acc->server, ':');
- if (s && isdigit(s[1]))
- sscanf(s + 1, "%d", &port);
-
- /* And if there's the string ssl, the user wants an SSL-connection */
- if (strstr(acc->server, ":ssl") || g_strcasecmp(acc->server, "ssl") == 0)
- ssl = 1;
- }
+ server = acc->server;
+ port = set_getint(&acc->set, "port");
+ ssl = set_getbool(&acc->set, "ssl");
- if (port == -1 && !ssl)
- port = DEFAULT_PORT;
- else if (port == -1 && ssl)
- port = DEFAULT_PORT_SSL;
- else if (port < JABBER_PORT_MIN || port > JABBER_PORT_MAX) {
+ if (port < JABBER_PORT_MIN || port > JABBER_PORT_MAX) {
serv_got_crap(GJ_GC(gjc), "For security reasons, the Jabber port number must be in the %d-%d range.", JABBER_PORT_MIN, JABBER_PORT_MAX);
STATE_EVT(JCONN_STATE_OFF)
return;
@@ -613,8 +595,6 @@ static void gjab_start(gjconn gjc)
gjc->fd = proxy_connect(server, port, gjab_connected, GJ_GC(gjc));
}
- g_free(server);
-
if (!acc->gc || (gjc->fd < 0)) {
STATE_EVT(JCONN_STATE_OFF)
return;
@@ -1515,12 +1495,62 @@ static void jabber_handlestate(gjconn gjc, int state)
return;
}
-static void jabber_login(account_t *acc)
+static void jabber_acc_init(account_t *acc)
{
- struct gaim_connection *gc = new_gaim_conn(acc);
- struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1);
- char *loginname = create_valid_jid(acc->user, DEFAULT_SERVER, "BitlBee");
+ set_t *s;
+
+ s = set_add( &acc->set, "port", "5222", set_eval_int, acc );
+ s->flags |= ACC_SET_OFFLINE_ONLY;
+
+ s = set_add( &acc->set, "resource", "BitlBee", NULL, acc );
+ s->flags |= ACC_SET_OFFLINE_ONLY;
+
+ s = set_add( &acc->set, "server", NULL, set_eval_account, acc );
+ s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY;
+
+ s = set_add( &acc->set, "ssl", "false", set_eval_bool, acc );
+ s->flags |= ACC_SET_OFFLINE_ONLY;
+}
+static void jabber_login(account_t *acc)
+{
+ struct gaim_connection *gc;
+ struct jabber_data *jd;
+ char *resource, *loginname;
+
+ /* Time to move some data/things from the old syntax to the new one: */
+ if (acc->server) {
+ char *s, *tmp_server;
+ int port;
+
+ if (g_strcasecmp(acc->server, "ssl") == 0) {
+ set_setstr(&acc->set, "server", "");
+ set_setint(&acc->set, "port", DEFAULT_PORT_SSL);
+ set_setstr(&acc->set, "ssl", "true");
+
+ g_free(acc->server);
+ acc->server = NULL;
+ } else if ((s = strchr(acc->server, ':'))) {
+ if (strstr(acc->server, ":ssl")) {
+ set_setint(&acc->set, "port", DEFAULT_PORT_SSL);
+ set_setstr(&acc->set, "ssl", "true");
+ }
+ if (isdigit(s[1])) {
+ if (sscanf(s + 1, "%d", &port) == 1)
+ set_setint(&acc->set, "port", port);
+ }
+ tmp_server = g_strndup(acc->server, s - acc->server);
+ set_setstr(&acc->set, "server", tmp_server);
+ g_free(tmp_server);
+ }
+ }
+
+ gc = new_gaim_conn(acc);
+ jd = gc->proto_data = g_new0(struct jabber_data, 1);
+
+ resource = set_getstr(&acc->set, "resource");
+ loginname = create_valid_jid(acc->user, DEFAULT_SERVER, resource);
+
jd->hash = g_hash_table_new(g_str_hash, g_str_equal);
jd->chats = NULL; /* we have no chats yet */
@@ -2336,6 +2366,7 @@ void jabber_init()
ret->name = "jabber";
ret->away_states = jabber_away_states;
+ ret->acc_init = jabber_acc_init;
ret->login = jabber_login;
ret->close = jabber_close;
ret->send_im = jabber_send_im;