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