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