plugins/jabber/jabber.c

Thu, 21 Dec 2000 13:54:22 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Thu, 21 Dec 2000 13:54:22 +0000
changeset 1345
51a8dbeadbef
parent 1344
db71cfb65383
child 1347
6fa6aa0d4d6e
permissions
-rw-r--r--

[gaim-migrate @ 1355]
ok. messages work. transports sort of work (you'll sign into them if you have them, but you won't see them and you can't add or remove them). resource is not a part of buddy's names, which is a very very big plus, since it means things will work incredibly well now. at some point the resource may be added back somehow but if it is it won't be part of the name.

1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 /*
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 * gaim
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 *
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 *
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * (at your option) any later version.
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 *
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 * GNU General Public License for more details.
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 *
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 *
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 */
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 #include "../config.h"
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 #endif
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28
1312
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
29 #include <gtk/gtk.h>
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
30 #ifdef MAX
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
31 #undef MAX
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
32 #endif
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
33 #ifdef MIN
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
34 #undef MIN
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
35 #endif
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 #include <netdb.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 #include <unistd.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 #include <errno.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 #include <netinet/in.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40 #include <arpa/inet.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 #include <string.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 #include <stdlib.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43 #include <stdio.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44 #include <time.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 #include <sys/socket.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 #include <sys/stat.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 #include "multi.h"
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 #include "prpl.h"
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49 #include "gaim.h"
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50 #include <jabber/jabber.h>
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51
1344
db71cfb65383 [gaim-migrate @ 1354]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1331
diff changeset
52 #include "pixmaps/available.xpm"
db71cfb65383 [gaim-migrate @ 1354]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1331
diff changeset
53
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54 /* The priv member of gjconn's is a gaim_connection for now. */
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55 #define GJ_GC(x) ((struct gaim_connection *)(x)->priv)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 #define IQ_NONE -1
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
58 #define IQ_AUTH 0
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
59 #define IQ_ROSTER 1
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
61 typedef struct gjconn_struct {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
62 /* Core structure */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
63 pool p; /* Memory allocation pool */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
64 int state; /* Connection state flag */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
65 int fd; /* Connection file descriptor */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
66 jid user; /* User info */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
67 char *pass; /* User passwd */
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
69 /* Stream stuff */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
70 int id; /* id counter for jab_getid() function */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
71 char idbuf[9]; /* temporary storage for jab_getid() */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
72 char *sid; /* stream id from server, for digest auth */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
73 XML_Parser parser; /* Parser instance */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
74 xmlnode current; /* Current node in parsing instance.. */
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
75
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
76 /* Event callback ptrs */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
77 void (*on_state) (struct gjconn_struct * j, int state);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
78 void (*on_packet) (struct gjconn_struct * j, jpacket p);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
80 void *priv;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 } *gjconn, gjconn_struct;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 typedef void (*gjconn_state_h)(gjconn j, int state);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85 typedef void (*gjconn_packet_h)(gjconn j, jpacket p);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 static gjconn gjab_new(char *user, char *pass, void *priv);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 static void gjab_delete(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89 static void gjab_state_handler(gjconn j, gjconn_state_h h);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90 static void gjab_packet_handler(gjconn j, gjconn_packet_h h);
1331
e3414af7b5ab [gaim-migrate @ 1341]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1316
diff changeset
91 static void gjab_start(gjconn j);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92 static void gjab_stop(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 static int gjab_getfd(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 static jid gjab_getjid(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 static char *gjab_getsid(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96 static char *gjab_getid(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 static void gjab_send(gjconn j, xmlnode x);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98 static void gjab_send_raw(gjconn j, const char *str);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99 static void gjab_recv(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100 static char *gjab_auth(gjconn j);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102 struct jabber_data {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
103 gjconn jc;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104 };
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
106 static char *jabber_name()
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
107 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 return "Jabber";
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
109 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
111 char *name()
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
112 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113 return "Jabber";
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
114 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
116 char *description()
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
117 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 return "Allows gaim to use the Jabber protocol";
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
119 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
120
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
121 #define STATE_EVT(arg) if(j->on_state) { (j->on_state)(j, (arg) ); }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
122
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
123 static gjconn gjab_new(char *user, char *pass, void *priv)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
124 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
125 pool p;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
126 gjconn j;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
128 if (!user)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
129 return (NULL);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
131 p = pool_new();
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
132 if (!p)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
133 return (NULL);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
134 j = pmalloc_x(p, sizeof(gjconn_struct), 0);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
135 if (!j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
136 return (NULL);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
137 j->p = p;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
139 j->user = jid_new(p, user);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
140 j->pass = pstrdup(p, pass);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
142 j->state = JCONN_STATE_OFF;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
143 j->id = 1;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
144 j->fd = -1;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
146 j->priv = priv;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
148 return j;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
151 static void gjab_delete(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
153 if (!j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
154 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
155
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
156 gjab_stop(j);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
157 pool_free(j->p);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
158 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
159
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160 static void gjab_state_handler(gjconn j, gjconn_state_h h)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
162 if (!j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
163 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
165 j->on_state = h;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
167
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
168 static void gjab_packet_handler(gjconn j, gjconn_packet_h h)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
170 if (!j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
171 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
172
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
173 j->on_packet = h;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
175
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176 static void gjab_stop(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
178 if (!j || j->state == JCONN_STATE_OFF)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
179 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
181 j->state = JCONN_STATE_OFF;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
182 gjab_send_raw(j, "</stream:stream>");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
183 close(j->fd);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
184 j->fd = -1;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
185 XML_ParserFree(j->parser);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 static int gjab_getfd(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
190 if (j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
191 return j->fd;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
192 else
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
193 return -1;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 static jid gjab_getjid(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
198 if (j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
199 return (j->user);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
200 else
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
201 return NULL;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 static char *gjab_getsid(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
206 if (j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
207 return (j->sid);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
208 else
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
209 return NULL;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 static char *gjab_getid(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
214 snprintf(j->idbuf, 8, "%d", j->id++);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
215 return &j->idbuf[0];
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
217
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 static void gjab_send(gjconn j, xmlnode x)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
220 if (j && j->state != JCONN_STATE_OFF) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
221 char *buf = xmlnode2str(x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
222 if (buf)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
223 write(j->fd, buf, strlen(buf));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
224 debug_printf("gjab_send: %s\n", buf);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
225 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228 static void gjab_send_raw(gjconn j, const char *str)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
229 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
230 if (j && j->state != JCONN_STATE_OFF) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
231 write(j->fd, str, strlen(str));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
232 debug_printf("gjab_send_raw: %s\n", str);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
233 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
235
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
236 static void gjab_reqroster(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
237 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
238 xmlnode x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
239 char *id;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
240
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
241 x = jutil_iqnew(JPACKET__GET, NS_ROSTER);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
242 id = gjab_getid(j);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
243 xmlnode_put_attrib(x, "id", id);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
244
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
245 gjab_send(j, x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
246 xmlnode_free(x);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
247 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249 static char *gjab_auth(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
250 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
251 xmlnode x, y, z;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
252 char *hash, *user, *id;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
253
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
254 if (!j)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
255 return NULL;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
257 x = jutil_iqnew(JPACKET__SET, NS_AUTH);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
258 id = gjab_getid(j);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
259 xmlnode_put_attrib(x, "id", id);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
260 y = xmlnode_get_tag(x, "query");
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
262 user = j->user->user;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
264 if (user) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
265 z = xmlnode_insert_tag(y, "username");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
266 xmlnode_insert_cdata(z, user, -1);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
267 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
269 z = xmlnode_insert_tag(y, "resource");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
270 xmlnode_insert_cdata(z, j->user->resource, -1);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
271
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
272 if (j->sid) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
273 z = xmlnode_insert_tag(y, "digest");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
274 hash = pmalloc(x->p, strlen(j->sid) + strlen(j->pass) + 1);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
275 strcpy(hash, j->sid);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
276 strcat(hash, j->pass);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
277 hash = shahash(hash);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
278 xmlnode_insert_cdata(z, hash, 40);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
279 } else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
280 z = xmlnode_insert_tag(y, "password");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
281 xmlnode_insert_cdata(z, j->pass, -1);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
282 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
283
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
284 gjab_send(j, x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
285 xmlnode_free(x);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
286
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
287 return id;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
288 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
289
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
290 static void gjab_recv(gjconn j)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
291 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
292 static char buf[4096];
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
293 int len;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
294
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
295 if (!j || j->state == JCONN_STATE_OFF)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
296 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
297
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
298 if ((len = read(j->fd, buf, sizeof(buf) - 1))) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
299 buf[len] = '\0';
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
300 debug_printf("input: %s\n", buf);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
301 XML_Parse(j->parser, buf, len, 0);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
302 } else if (len < 0) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
303 STATE_EVT(JCONN_STATE_OFF);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
304 gjab_stop(j);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
305 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
306 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
308 static void startElement(void *userdata, const char *name, const char **attribs)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
309 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
310 xmlnode x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
311 gjconn j = (gjconn) userdata;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
312
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
313 if (j->current) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
314 /* Append the node to the current one */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
315 x = xmlnode_insert_tag(j->current, name);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
316 xmlnode_put_expat_attribs(x, attribs);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
318 j->current = x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
319 } else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
320 x = xmlnode_new_tag(name);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
321 xmlnode_put_expat_attribs(x, attribs);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
322 if (strcmp(name, "stream:stream") == 0) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
323 /* special case: name == stream:stream */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
324 /* id attrib of stream is stored for digest auth */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
325 j->sid = xmlnode_get_attrib(x, "id");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
326 /* STATE_EVT(JCONN_STATE_AUTH) */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
327 } else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
328 j->current = x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
329 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
330 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
331 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
332
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
333 static void endElement(void *userdata, const char *name)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
334 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
335 gjconn j = (gjconn) userdata;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
336 xmlnode x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
337 jpacket p;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
338
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
339 if (j->current == NULL) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
340 /* we got </stream:stream> */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
341 STATE_EVT(JCONN_STATE_OFF)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
342 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
343 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
344
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
345 x = xmlnode_get_parent(j->current);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
346
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
347 if (!x) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
348 /* it is time to fire the event */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
349 p = jpacket_new(j->current);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
350
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
351 if (j->on_packet)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
352 (j->on_packet) (j, p);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
353 else
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
354 xmlnode_free(j->current);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
355 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
356
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
357 j->current = x;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
358 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
359
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
360 static void charData(void *userdata, const char *s, int slen)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
361 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
362 gjconn j = (gjconn) userdata;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
363
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
364 if (j->current)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
365 xmlnode_insert_cdata(j->current, s, slen);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
366 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
367
1331
e3414af7b5ab [gaim-migrate @ 1341]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1316
diff changeset
368 static void gjab_start(gjconn j)
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
369 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
370 xmlnode x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
371 char *t, *t2;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
372
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
373 if (!j || j->state != JCONN_STATE_OFF)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
374 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
375
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
376 j->parser = XML_ParserCreate(NULL);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
377 XML_SetUserData(j->parser, (void *)j);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
378 XML_SetElementHandler(j->parser, startElement, endElement);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
379 XML_SetCharacterDataHandler(j->parser, charData);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
380
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
381 j->fd = make_netsocket(5222, j->user->server, NETSOCKET_CLIENT);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
382 if (j->fd < 0) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
383 STATE_EVT(JCONN_STATE_OFF)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
384 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
385 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
386 j->state = JCONN_STATE_CONNECTED;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
387 STATE_EVT(JCONN_STATE_CONNECTED)
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
388
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
389 /* start stream */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
390 x = jutil_header(NS_CLIENT, j->user->server);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
391 t = xmlnode2str(x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
392 /* this is ugly, we can create the string here instead of jutil_header */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
393 /* what do you think about it? -madcat */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
394 t2 = strstr(t, "/>");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
395 *t2++ = '>';
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
396 *t2 = '\0';
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
397 gjab_send_raw(j, "<?xml version='1.0'?>");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
398 gjab_send_raw(j, t);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
399 xmlnode_free(x);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
400
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
401 j->state = JCONN_STATE_ON;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
402 STATE_EVT(JCONN_STATE_ON)
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
403 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
404
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
405 static void jabber_callback(gpointer data, gint source, GdkInputCondition condition)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
406 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
407 struct gaim_connection *gc = (struct gaim_connection *)data;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
408 struct jabber_data *jd = (struct jabber_data *)gc->proto_data;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
409
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
410 gjab_recv(jd->jc);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
411 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
412
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
413 static void jabber_handlemessage(gjconn j, jpacket p)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
414 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
415 xmlnode y;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
416
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
417 char *from = NULL, *msg = NULL;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
418
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
419 from = jid_full(p->from);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
420 if ((y = xmlnode_get_tag(p->x, "body"))) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
421 msg = xmlnode_get_data(y);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
422 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
423
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
424 if (!from || !msg) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
425 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
426 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
427
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
428 serv_got_im(GJ_GC(j), from, msg, 0);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
429
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
430 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
431 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
432
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
433 static void jabber_handlepresence(gjconn j, jpacket p)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
434 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
435 char *to, *from, *type;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
436 struct buddy *b;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
437 jid who;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
438 char *buddy;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
439
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
440 to = xmlnode_get_attrib(p->x, "to");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
441 from = xmlnode_get_attrib(p->x, "from");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
442 type = xmlnode_get_attrib(p->x, "type");
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
443
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
444 debug_printf("jabber: presence: %s, %s %s\n", to, from, type);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
445 who = jid_new(j->p, from);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
446 if (who->user == NULL) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
447 /* FIXME: transport */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
448 debug_printf("user was NULL in handlepresence!\n");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
449 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
450 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
451
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
452 buddy = g_strdup_printf("%s@%s", who->user, who->server);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
453
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
454 if (!(b = find_buddy(GJ_GC(j), buddy))) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
455 add_buddy(GJ_GC(j), "Buddies", buddy, buddy);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
456 build_edit_tree();
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
457 do_export(NULL, NULL);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
458 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
459
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
460 if (type && (strcasecmp(type, "unavailable") == 0))
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
461 serv_got_update(GJ_GC(j), buddy, 0, 0, 0, 0, 0, 0);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
462 else
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
463 serv_got_update(GJ_GC(j), buddy, 1, 0, 0, 0, 0, 0);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
464
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
465 g_free(buddy);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
466
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
467 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
468 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
469
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
470 static void jabber_handles10n(gjconn j, jpacket p)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
471 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
472 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
473
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
474 static void jabber_handleroster(gjconn j, xmlnode querynode)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
475 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
476 xmlnode x;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
477
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
478 x = xmlnode_get_firstchild(querynode);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
479 while (x) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
480 xmlnode g;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
481 char *Jid, *name, *sub, *ask;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
482 jid who;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
483
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
484 Jid = xmlnode_get_attrib(x, "jid");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
485 name = xmlnode_get_attrib(x, "name");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
486 sub = xmlnode_get_attrib(x, "subscription");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
487 ask = xmlnode_get_attrib(x, "ask");
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
488
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
489 if (ask) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
490 /* XXX do something
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
491 debug_printf("jabber: unhandled subscription request (%s/%s/%s/%s)\n", Jid, name,
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
492 sub, ask);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
493 */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
494 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
495
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
496 if ((g = xmlnode_get_firstchild(x))) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
497 while (g) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
498 if (strncasecmp(xmlnode_get_name(g), "group", 5) == 0) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
499 struct buddy *b;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
500 char *groupname, *buddyname;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
501
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
502 groupname = xmlnode_get_data(xmlnode_get_firstchild(g));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
503 who = jid_new(j->p, Jid);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
504 if (who->user == NULL) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
505 /* FIXME: transport */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
506 debug_printf("user was NULL in handleroster!\n");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
507 g = xmlnode_get_nextsibling(g);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
508 continue;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
509 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
510 buddyname = g_strdup_printf("%s@%s", who->user, who->server);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
511 if (!(b = find_buddy(GJ_GC(j), buddyname))) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
512 debug_printf("adding buddy: %s\n", buddyname);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
513 b =
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
514 add_buddy(GJ_GC(j), groupname, buddyname,
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
515 name ? name : buddyname);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
516 build_edit_tree();
1344
db71cfb65383 [gaim-migrate @ 1354]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1331
diff changeset
517 do_export(0, 0);
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
518 } else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
519 debug_printf("updating buddy: %s/%s\n", buddyname, name);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
520 g_snprintf(b->name, sizeof(b->name), "%s", buddyname);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
521 g_snprintf(b->show, sizeof(b->show), "%s",
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
522 name ? name : buddyname);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
523 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
524 g_free(buddyname);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
525 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
526 g = xmlnode_get_nextsibling(g);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
527 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
528 } else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
529 struct buddy *b;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
530 char *buddyname;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
531
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
532 who = jid_new(j->p, Jid);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
533 if (who->user == NULL) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
534 /* FIXME: transport */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
535 debug_printf("user was NULL in handleroster!\n");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
536 x = xmlnode_get_nextsibling(x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
537 continue;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
538 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
539 buddyname = g_strdup_printf("%s@%s", who->user, who->server);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
540 if (!(b = find_buddy(GJ_GC(j), buddyname))) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
541 b = add_buddy(GJ_GC(j), "Buddies", buddyname, name ? name : Jid);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
542 build_edit_tree();
1344
db71cfb65383 [gaim-migrate @ 1354]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1331
diff changeset
543 do_export(0, 0);
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
544 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
545 g_free(buddyname);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
546 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
547
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
548 x = xmlnode_get_nextsibling(x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
549 }
1331
e3414af7b5ab [gaim-migrate @ 1341]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1316
diff changeset
550
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
551 x = jutil_presnew(0, NULL, "Online");
1331
e3414af7b5ab [gaim-migrate @ 1341]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1316
diff changeset
552 gjab_send(j, x);
e3414af7b5ab [gaim-migrate @ 1341]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1316
diff changeset
553 xmlnode_free(x);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
554 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
555
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
556 static void jabber_handlepacket(gjconn j, jpacket p)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
557 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
558 switch (p->type) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
559 case JPACKET_MESSAGE:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
560 jabber_handlemessage(j, p);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
561 break;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
562 case JPACKET_PRESENCE:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
563 jabber_handlepresence(j, p);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
564 break;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
565 case JPACKET_IQ:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
566 debug_printf("jpacket_subtype: %d\n", jpacket_subtype(p));
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
567
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
568 if (jpacket_subtype(p) == JPACKET__SET) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
569 } else if (jpacket_subtype(p) == JPACKET__RESULT) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
570 xmlnode querynode;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
571 char *xmlns;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
572
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
573 querynode = xmlnode_get_tag(p->x, "query");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
574 xmlns = xmlnode_get_attrib(querynode, "xmlns");
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
575
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
576 if (!xmlns || NSCHECK(querynode, NS_AUTH)) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
577 debug_printf("auth success\n");
1331
e3414af7b5ab [gaim-migrate @ 1341]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1316
diff changeset
578
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
579 account_online(GJ_GC(j));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
580 serv_finish_login(GJ_GC(j));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
581
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
582 if (bud_list_cache_exists(GJ_GC(j)))
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
583 do_import(NULL, GJ_GC(j));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
584
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
585 gjab_reqroster(j);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
586
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
587 } else if (NSCHECK(querynode, NS_ROSTER)) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
588 jabber_handleroster(j, querynode);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
589 } else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
590 /* debug_printf("jabber:iq:query: %s\n", xmlns); */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
591 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
592 } else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
593 xmlnode x;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
594
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
595 debug_printf("auth failed\n");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
596 x = xmlnode_get_tag(p->x, "error");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
597 if (x) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
598 debug_printf("error %d: %s\n\n",
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
599 atoi(xmlnode_get_attrib(x, "code")),
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
600 xmlnode_get_data(xmlnode_get_firstchild(x)));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
601 hide_login_progress(GJ_GC(j),
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
602 xmlnode_get_data(xmlnode_get_firstchild(x)));
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
603
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
604 } else
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
605 hide_login_progress(GJ_GC(j), "unknown error");
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
606
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
607 signoff(GJ_GC(j));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
608 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
609 break;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
610 case JPACKET_S10N:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
611 jabber_handles10n(j, p);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
612 break;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
613 default:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
614 debug_printf("jabber: packet type %d (%s)\n", p->type, xmlnode2str(p->x));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
615 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
616
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
617 xmlnode_free(p->x);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
618
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
619 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
620 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
621
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
622 static void jabber_handlestate(gjconn j, int state)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
623 {
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
624 switch (state) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
625 case JCONN_STATE_OFF:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
626 hide_login_progress(GJ_GC(j), "Unable to connect");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
627 signoff(GJ_GC(j));
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
628 break;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
629 case JCONN_STATE_CONNECTED:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
630 set_login_progress(GJ_GC(j), 3, "Connected");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
631 break;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
632 case JCONN_STATE_ON:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
633 set_login_progress(GJ_GC(j), 5, "Logging in...");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
634 gjab_auth(j);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
635 break;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
636 default:
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
637 debug_printf("state change: %d\n", state);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
638 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
639 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
640 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
641
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
642 static void jabber_login(struct aim_user *user)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
643 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
644 struct gaim_connection *gc = new_gaim_conn(user);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
645 struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
646
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
647 set_login_progress(gc, 1, "Connecting");
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
648
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
649 if (!(jd->jc = gjab_new(user->username, user->password, gc))) {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
650 debug_printf("jabber: unable to connect (jab_new failed)\n");
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
651 hide_login_progress(gc, "Unable to connect");
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
652 signoff(gc);
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
653 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
654 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
655
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
656 gjab_state_handler(jd->jc, jabber_handlestate);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
657 gjab_packet_handler(jd->jc, jabber_handlepacket);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
658 gjab_start(jd->jc);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
659
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
660
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
661 gc->inpa = gdk_input_add(jd->jc->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, jabber_callback, gc);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
662
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
663 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
664 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
665
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
666 static void jabber_close(struct gaim_connection *gc)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
667 {
1312
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
668 struct jabber_data *jd = gc->proto_data;
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
669 gdk_input_remove(gc->inpa);
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
670 gjab_stop(jd->jc);
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
671 g_free(jd);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
672 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
673
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
674 static void jabber_send_im(struct gaim_connection *gc, char *who, char *message, int away)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
675 {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
676 xmlnode x, y;
1316
f9973f9cd01c [gaim-migrate @ 1326]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1315
diff changeset
677 char *realwho;
f9973f9cd01c [gaim-migrate @ 1326]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1315
diff changeset
678 gjconn j = ((struct jabber_data *)gc->proto_data)->jc;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
679
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
680 if (!who || !message)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
681 return;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
682
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
683 x = xmlnode_new_tag("message");
1316
f9973f9cd01c [gaim-migrate @ 1326]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1315
diff changeset
684 if (!strchr(who, '@'))
f9973f9cd01c [gaim-migrate @ 1326]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1315
diff changeset
685 realwho = g_strdup_printf("%s@%s", who, j->user->server);
f9973f9cd01c [gaim-migrate @ 1326]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1315
diff changeset
686 else
f9973f9cd01c [gaim-migrate @ 1326]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1315
diff changeset
687 realwho = g_strdup(who);
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
688 xmlnode_put_attrib(x, "to", realwho);
1316
f9973f9cd01c [gaim-migrate @ 1326]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1315
diff changeset
689 g_free(realwho);
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
690
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
691 xmlnode_put_attrib(x, "type", "chat");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
692
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
693 if (message && strlen(message)) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
694 y = xmlnode_insert_tag(x, "body");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
695 xmlnode_insert_cdata(y, message, -1);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
696 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
697
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
698 gjab_send(((struct jabber_data *)gc->proto_data)->jc, x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
699 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
700
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
701 static void jabber_add_buddy(struct gaim_connection *gc, char *name)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
702 {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
703 xmlnode x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
704 char *realwho;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
705 gjconn j = ((struct jabber_data *)gc->proto_data)->jc;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
706
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
707 if (!name)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
708 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
709
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
710 x = xmlnode_new_tag("presence");
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
711
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
712 if (!strchr(name, '@'))
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
713 realwho = g_strdup_printf("%s@%s", name, j->user->server);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
714 else {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
715 jid who = jid_new(j->p, name);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
716 if (who->user == NULL) {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
717 /* FIXME: transport */
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
718 debug_printf("user was NULL in add_buddy!\n");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
719 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
720 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
721 realwho = g_strdup_printf("%s@%s", who->user, who->server);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
722 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
723 xmlnode_put_attrib(x, "to", realwho);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
724 g_free(realwho);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
725
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
726 xmlnode_put_attrib(x, "type", "subscribe");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
727
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
728 gjab_send(((struct jabber_data *)gc->proto_data)->jc, x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
729 }
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
730
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
731 static void jabber_remove_buddy(struct gaim_connection *gc, char *name)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
732 {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
733 xmlnode x;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
734 char *realwho;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
735 gjconn j = ((struct jabber_data *)gc->proto_data)->jc;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
736
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
737 if (!name)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
738 return;
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
739
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
740 x = xmlnode_new_tag("presence");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
741
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
742 if (!strchr(name, '@'))
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
743 realwho = g_strdup_printf("%s@%s", name, j->user->server);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
744 else
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
745 realwho = g_strdup(name);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
746 xmlnode_put_attrib(x, "to", realwho);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
747 g_free(realwho);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
748
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
749 xmlnode_put_attrib(x, "type", "unsubscribe");
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
750
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
751 gjab_send(((struct jabber_data *)gc->proto_data)->jc, x);
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
752 }
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
753
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
754 static char **jabber_list_icon(int uc)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
755 {
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
756 return available_xpm;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
757 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
758
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
759 static struct prpl *my_protocol = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
760
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
761 void Jabber_init(struct prpl *ret)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
762 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
763 /* the NULL's aren't required but they're nice to have */
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
764 ret->protocol = PROTO_JABBER;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
765 ret->name = jabber_name;
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
766 ret->list_icon = jabber_list_icon;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
767 ret->action_menu = NULL;
1331
e3414af7b5ab [gaim-migrate @ 1341]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1316
diff changeset
768 ret->user_opts = NULL;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
769 ret->login = jabber_login;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
770 ret->close = jabber_close;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
771 ret->send_im = jabber_send_im;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
772 ret->set_info = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
773 ret->get_info = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
774 ret->set_away = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
775 ret->get_away_msg = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
776 ret->set_dir = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
777 ret->get_dir = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
778 ret->dir_search = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
779 ret->set_idle = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
780 ret->change_passwd = NULL;
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
781 ret->add_buddy = jabber_add_buddy;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
782 ret->add_buddies = NULL;
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
783 ret->remove_buddy = jabber_remove_buddy;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
784 ret->add_permit = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
785 ret->add_deny = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
786 ret->rem_permit = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
787 ret->rem_deny = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
788 ret->set_permit_deny = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
789 ret->warn = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
790 ret->accept_chat = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
791 ret->join_chat = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
792 ret->chat_invite = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
793 ret->chat_leave = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
794 ret->chat_whisper = NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
795 ret->chat_send = NULL;
1312
b099116cf994 [gaim-migrate @ 1322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1311
diff changeset
796 ret->keepalive = NULL;
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
797
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
798 my_protocol = ret;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
799 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
800
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
801 char *gaim_plugin_init(GModule *handle)
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
802 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
803 load_protocol(Jabber_init);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
804 return NULL;
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
805 }
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
806
1345
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
807 void gaim_plugin_remove()
51a8dbeadbef [gaim-migrate @ 1355]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1344
diff changeset
808 {
1311
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
809 struct prpl *p = find_prpl(PROTO_JABBER);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
810 if (p == my_protocol)
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
811 unload_protocol(p);
4e1135415c73 [gaim-migrate @ 1321]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
812 }

mercurial