Allow a different server name than the jid domain name
Sync libjabber with upstream (centericq). The libjabber patch is from
Ian Johannesen.
This allows connecting to Google Talk, for example.
--- a/mcabber/libjabber/jabber.h Mon Aug 22 20:33:11 2005 +0200
+++ b/mcabber/libjabber/jabber.h Sat Aug 27 11:21:27 2005 +0200
@@ -271,6 +271,7 @@
int state; /* Connection state flag */
int cw_state; /* Low level connection state flag */
int fd; /* Connection file descriptor */
+ char *server; /* The server we'll connect too */
int port;
int ssl;
jid user; /* User info */
@@ -294,7 +295,7 @@
typedef void (*jconn_packet_h)(jconn j, jpacket p);
typedef void (*jconn_logger)(jconn j, int inout, const char *p);
-jconn jab_new(char *user, char *pass, int port, int ssl);
+jconn jab_new(char *user, char *pass, char *server, int port, int ssl);
void jab_delete(jconn j);
void jab_state_handler(jconn j, jconn_state_h h);
void jab_packet_handler(jconn j, jconn_packet_h h);
--- a/mcabber/libjabber/jconn.c Mon Aug 22 20:33:11 2005 +0200
+++ b/mcabber/libjabber/jconn.c Sat Aug 27 11:21:27 2005 +0200
@@ -41,7 +41,7 @@
* a pointer to the connection structure
* or NULL if allocations failed
*/
-jconn jab_new(char *user, char *pass, int port, int ssl)
+jconn jab_new(char *user, char *pass, char *server, int port, int ssl)
{
pool p;
jconn j;
@@ -57,6 +57,7 @@
j->user = jid_new(p, user);
j->pass = pstrdup(p, pass);
j->port = port;
+ j->server = server;
j->state = JCONN_STATE_OFF;
j->cw_state = 0;
@@ -139,10 +140,10 @@
XML_SetCharacterDataHandler(j->parser, charData);
if (j->cw_state & CW_CONNECT_BLOCKING)
- j->fd = make_netsocket(j->port, j->user->server, NETSOCKET_CLIENT, j->ssl);
+ j->fd = make_netsocket(j->port, j->server, NETSOCKET_CLIENT, j->ssl);
else
- j->fd = make_nb_netsocket(j->port, j->user->server, NETSOCKET_CLIENT, j->ssl, &j->cw_state);
-
+ j->fd = make_nb_netsocket(j->port, j->server, NETSOCKET_CLIENT, j->ssl, &j->cw_state);
+
if(j->fd < 0) {
STATE_EVT(JCONN_STATE_OFF);
return;
--- a/mcabber/src/jabglue.c Mon Aug 22 20:33:11 2005 +0200
+++ b/mcabber/src/jabglue.c Sat Aug 27 11:21:27 2005 +0200
@@ -114,14 +114,17 @@
char *jid = g_new(char, 3 +
strlen(username) + strlen(servername) + strlen(resource));
strcpy(jid, username);
- strcat(jid, "@");
- strcat(jid, servername);
+ if (!strchr(jid, '@')) {
+ strcat(jid, "@");
+ strcat(jid, servername);
+ }
strcat(jid, "/");
strcat(jid, resource);
return jid;
}
-jconn jb_connect(const char *jid, unsigned int port, int ssl, const char *pass)
+jconn jb_connect(const char *jid, const char *server, unsigned int port,
+ int ssl, const char *pass)
{
if (!port) {
if (ssl)
@@ -133,7 +136,7 @@
jb_disconnect();
s_id = 1;
- jc = jab_new((char*)jid, (char*)pass, port, ssl);
+ jc = jab_new((char*)jid, (char*)pass, (char*)server, port, ssl);
/* These 3 functions can deal with a NULL jc, no worry... */
jab_logger(jc, logger);
--- a/mcabber/src/jabglue.h Mon Aug 22 20:33:11 2005 +0200
+++ b/mcabber/src/jabglue.h Sat Aug 27 11:21:27 2005 +0200
@@ -38,7 +38,8 @@
char *compose_jid(const char *username, const char *servername,
const char *resource);
-jconn jb_connect(const char *jid, unsigned int port, int ssl, const char *pass);
+jconn jb_connect(const char *jid, const char *server, unsigned int port,
+ int ssl, const char *pass);
void jb_disconnect(void);
void jb_main();
void jb_addbuddy(const char *jid, const char *name, const char *group);
--- a/mcabber/src/main.c Mon Aug 22 20:33:11 2005 +0200
+++ b/mcabber/src/main.c Sat Aug 27 11:21:27 2005 +0200
@@ -82,7 +82,7 @@
scr_LogPrint(LPRINT_NORMAL|LPRINT_DEBUG, " using port %d", port);
jid = compose_jid(username, servername, resource);
- jc = jb_connect(jid, port, ssl, password);
+ jc = jb_connect(jid, servername, port, ssl, password);
g_free(jid);
if (!jc)