summaryrefslogtreecommitdiffstats
path: root/chat-irc/bitlbee/jabber.patch
diff options
context:
space:
mode:
Diffstat (limited to 'chat-irc/bitlbee/jabber.patch')
-rw-r--r--chat-irc/bitlbee/jabber.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/chat-irc/bitlbee/jabber.patch b/chat-irc/bitlbee/jabber.patch
new file mode 100644
index 0000000000..7fb836c1da
--- /dev/null
+++ b/chat-irc/bitlbee/jabber.patch
@@ -0,0 +1,63 @@
+diff -uNr protocols/jabber/jabber.c protocols/jabber/jabber.c
+--- protocols/jabber/jabber.c 2004-11-14 22:37:47.000000000 +0100
++++ protocols/jabber/jabber.c 2005-08-24 09:47:25.000000000 +0200
+@@ -565,16 +565,27 @@
+ {
+ struct aim_user *user;
+ int port = -1, ssl = 0;
++ char *server = NULL, *s;
+
+ if (!gjc || gjc->state != JCONN_STATE_OFF)
+ return;
+
+ user = GJ_GC(gjc)->user;
+ if (*user->proto_opt[0]) {
+- if (isdigit(user->proto_opt[0][0]))
+- sscanf(user->proto_opt[0], "%d", &port);
++ /* If there's a dot, assume there's a hostname in the beginning */
++ if (strchr(user->proto_opt[0], '.')) {
++ server = g_strdup(user->proto_opt[0]);
++ if ((s = strchr(server, ':')))
++ *s = 0;
++ }
++
++ /* After the hostname, there can be a port number */
++ s = strchr(user->proto_opt[0], ':');
++ if (s && isdigit(s[1]))
++ sscanf(s + 1, "%d", &port);
+
+- if (strstr(user->proto_opt[0], "ssl"))
++ /* And if there's the string ssl, the user wants an SSL-connection */
++ if (strstr(user->proto_opt[0], ":ssl") || g_strcasecmp(user->proto_opt[0], "ssl") == 0)
+ ssl = 1;
+ }
+
+@@ -582,6 +593,9 @@
+ port = DEFAULT_PORT;
+ else if (port == -1 && ssl)
+ port = DEFAULT_PORT_SSL;
++
++ if (server == NULL)
++ server = g_strdup(gjc->user->server);
+
+ gjc->parser = XML_ParserCreate(NULL);
+ XML_SetUserData(gjc->parser, (void *)gjc);
+@@ -589,14 +603,16 @@
+ XML_SetCharacterDataHandler(gjc->parser, charData);
+
+ if (ssl) {
+- if ((gjc->ssl = ssl_connect(gjc->user->server, port, gjab_connected_ssl, GJ_GC(gjc))))
++ if ((gjc->ssl = ssl_connect(server, port, gjab_connected_ssl, GJ_GC(gjc))))
+ gjc->fd = ssl_getfd(gjc->ssl);
+ else
+ gjc->fd = -1;
+ } else {
+- gjc->fd = proxy_connect(gjc->user->server, port, gjab_connected, GJ_GC(gjc));
++ gjc->fd = proxy_connect(server, port, gjab_connected, GJ_GC(gjc));
+ }
+
++ g_free(server);
++
+ if (!user->gc || (gjc->fd < 0)) {
+ STATE_EVT(JCONN_STATE_OFF)
+ return;