src/protocols/jabber/jabber.c

Wed, 17 Sep 2003 21:42:27 +0000

author
Nathan Walp <nwalp@pidgin.im>
date
Wed, 17 Sep 2003 21:42:27 +0000
changeset 6880
69def428c334
parent 6817
23cea6ca0b8e
child 6953
2e781bcc1f23
permissions
-rw-r--r--

[gaim-migrate @ 7426]
so I don't have to change the name of this option later

2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 /*
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 * gaim
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 * Some code copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 * libfaim code copyright 1998, 1999 Adam Fritzler <afritz@auk.cx>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * (at your option) any later version.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 * GNU General Public License for more details.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 */
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
22 #include "internal.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
23
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
24 #ifdef _WIN32
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
25 # include "utsname.h"
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 #endif
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
28 #include "account.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
29 #include "accountopt.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
30 #include "conversation.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
31 #include "debug.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
32 #include "ft.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
33 #include "multi.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
34 #include "notify.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
35 #include "prpl.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
36 #include "request.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
37 #include "util.h"
6115
ac81410298f2 [gaim-migrate @ 6578]
Christian Hammond <chipx86@chipx86.com>
parents: 6106
diff changeset
38 #include "html.h"
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
39 #include "sslconn.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
40
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
41 /* XXX */
4608
c165a90c65fc [gaim-migrate @ 4896]
Nathan Walp <nwalp@pidgin.im>
parents: 4591
diff changeset
42 #include "gaim.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
43
2232
8af3b178de6b [gaim-migrate @ 2242]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2231
diff changeset
44 #ifdef MAX
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
45 # undef MAX
2232
8af3b178de6b [gaim-migrate @ 2242]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2231
diff changeset
46 #endif
8af3b178de6b [gaim-migrate @ 2242]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2231
diff changeset
47 #ifdef MIN
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
48 # undef MIN
2232
8af3b178de6b [gaim-migrate @ 2242]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2231
diff changeset
49 #endif
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
50
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51 #include "jabber.h"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 #include "proxy.h"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
54 static GaimPlugin *my_protocol = NULL;
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
55
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 /* The priv member of gjconn's is a gaim_connection for now. */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
57 #define GJ_GC(x) ((GaimConnection *)(x)->priv)
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
58 /* Confused? That makes three of us. -Robot101 */
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
59 #define GC_GJ(x) ((gjconn)((struct jabber_data *)(x)->proto_data)->gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60
5894
0e5f40d4450b [gaim-migrate @ 6326]
Mark Doliner <markdoliner@pidgin.im>
parents: 5872
diff changeset
61 #define JABBER_CONNECT_STEPS 5
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
62
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63 #define IQID_AUTH "__AUTH__"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65 #define IQ_NONE -1
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
66 #define IQ_AUTH 0
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
67 #define IQ_ROSTER 1
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68
3259
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
69 #define UC_AWAY (0x02 | UC_UNAVAILABLE)
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
70 #define UC_CHAT 0x04
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
71 #define UC_XA (0x08 | UC_UNAVAILABLE)
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
72 #define UC_DND (0x10 | UC_UNAVAILABLE)
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
73 #define UC_ERROR (0x20 | UC_UNAVAILABLE)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74
4917
97bf38cec756 [gaim-migrate @ 5251]
Sean Egan <seanegan@pidgin.im>
parents: 4916
diff changeset
75 #define DEFAULT_SERVER "jabber.org"
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76 #define DEFAULT_GROUPCHAT "conference.jabber.org"
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 #define DEFAULT_PORT 5222
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 #define USEROPT_PORT 0
4436
b32bb57a6b3d [gaim-migrate @ 4711]
Nathan Walp <nwalp@pidgin.im>
parents: 4366
diff changeset
80 #define USEROPT_CONN_SERVER 1
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
82 #define JABBER_TYPING_NOTIFY_INT 15 /* Delay (in seconds) between sending typing notifications */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
83
4450
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
84 #define JABBER_KEEPALIVE_STRING " \t "
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
85
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
86 /*
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
87 * Note: "was_connected" may seem redundant, but it was needed and I
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
88 * didn't want to touch the Jabber state stuff not specific to Gaim.
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
89 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
90 typedef struct gjconn_struct {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
91 /* Core structure */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
92 pool p; /* Memory allocation pool */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 int state; /* Connection state flag */
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
94 int was_connected; /* We were once connected */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95 int fd; /* Connection file descriptor */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96 jid user; /* User info */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 char *pass; /* User passwd */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99 /* Stream stuff */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100 int id; /* id counter for jab_getid() function */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101 char idbuf[9]; /* temporary storage for jab_getid() */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102 char *sid; /* stream id from server, for digest auth */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103 XML_Parser parser; /* Parser instance */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104 xmlnode current; /* Current node in parsing instance.. */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
105
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 /* Event callback ptrs */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
107 void (*on_state)(struct gjconn_struct *gjc, int state);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
108 void (*on_packet)(struct gjconn_struct *gjc, jpacket p);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
109
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
110 GHashTable *queries; /* query tracker */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
111
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
112 void *priv;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
114 GaimSslConnection *gsc;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
115
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
116 } *gjconn, gjconn_struct;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
117
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
118 typedef void (*gjconn_state_h)(gjconn gjc, int state);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
119 typedef void (*gjconn_packet_h)(gjconn gjc, jpacket p);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
120
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
121 static gjconn gjab_new(char *user, char *pass, void *priv);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
122 static void gjab_delete(gjconn gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
123 static void gjab_state_handler(gjconn gjc, gjconn_state_h h);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
124 static void gjab_packet_handler(gjconn gjc, gjconn_packet_h h);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
125 static void gjab_start(gjconn gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
126 static void gjab_stop(gjconn gjc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 /*
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
128 static int gjab_getfd(gjconn gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
129 static jid gjab_getjid(gjconn gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
130 static char *gjab_getsid(gjconn gjc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131 */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
132 static char *gjab_getid(gjconn gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
133 static void gjab_send(gjconn gjc, xmlnode x);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
134 static void gjab_send_raw(gjconn gjc, const char *str);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
135 static void gjab_recv(gjconn gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
136 static void gjab_auth(gjconn gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
137
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
138 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
139 * It is *this* to which we point the gaim_connection proto_data
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
140 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 struct jabber_data {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
142 gjconn gjc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 gboolean did_import;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
144 GSList *chats;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 time_t idle;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
146 GHashTable *buddies;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
147 GSList *file_transfers;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148 };
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
150 /*
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
151 * Used in jabber_buddy_data.invisible, below
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
152 */
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
153 #define JABBER_NOT_INVIS 0x00
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
154 #define JABBER_SERV_INVIS 0x01 /* Invisible set on server */
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
155 #define JABBER_BUD_INVIS 0x02 /* Invisible set on buddy */
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
156
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
157 /*
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
158 * Used in jabber_buddy_data.subscription, below
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
159 */
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
160 #define JABBER_SUB_NONE 0x0
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
161 #define JABBER_SUB_PENDING 0x1
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
162 #define JABBER_SUB_TO 0x2
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
163 #define JABBER_SUB_FROM 0x4
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
164 #define JABBER_SUB_BOTH (JABBER_SUB_TO | JABBER_SUB_FROM)
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
165
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
166
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
167 /*
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
168 * It is *this* to which we point the buddy proto_data
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
169 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
170 struct jabber_buddy_data {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
171 GSList *resources;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
172 char *error_msg;
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
173 unsigned invisible; /* We've set presence type invisible for this buddy */
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
174 unsigned subscription; /* subscription type for this buddy */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
175 };
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
176
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
177 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
178 * per-resource info
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
179 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
180 typedef struct jabber_resource_info {
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
181 char *name;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
182 int priority;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
183 int state;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
184 char *away_msg;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
185 char *thread_id;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
186 gboolean has_composing;
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
187 gboolean has_xhtml;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
188 } *jab_res_info;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
189
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
190 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
191 * For our own jid handling
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
192 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
193 * We do our own so we can cleanly parse buddy names
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
194 * (user@server/resource) and rid ourselves of the
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
195 * struct when we're done with it. The Jabber lib
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
196 * structs last the life of the pool--we frequently
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
197 * don't want that.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
198 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
199 * We use the real jid structs so we can make use of
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
200 * jid_safe(), jid_cmp() and some others.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
201 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
202 * BE CAREFUL using the Jabber lib routines.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
203 * Many of them assume pool use and are not
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
204 * amenable to use with our own!
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
205 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
206 * We give them special names so we know, throughout
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
207 * the code, that they're not alloc'd out of pool
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
208 * memory and we can, and must, dispose of them when
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
209 * we're done with 'em.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
210 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
211 #define gaim_jid_struct jid_struct
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
212 typedef struct gaim_jid_struct *gaim_jid;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
213
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
214 /*
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
215 * Jabber "chat group" info. Pointers to these go in jabber_data
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
216 * pending and existing chats lists.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
217 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 struct jabber_chat {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
219 gaim_jid gjid;
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
220 GaimConnection *gc;
5679
943eb70954b6 [gaim-migrate @ 6097]
Nathan Walp <nwalp@pidgin.im>
parents: 5638
diff changeset
221 GaimConversation *b;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
222 int id;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
223 int state;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 };
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
226 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
227 * Jabber chat states...
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
228 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
229 * Note: due to a bug in one version of the Jabber server, subscriptions
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
230 * to chat groups aren't (always?) properly removed at the server. The
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
231 * result is clients receive Jabber "presence" notifications for JIDs
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
232 * they no longer care about. The problem with such vestigial notifies is
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
233 * that we really have no way of telling if it's vestigial or if it's a
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
234 * valid "buddy" presence notification. So we keep jabber_chat structs
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
235 * around after leaving a chat group and simply mark them "closed." That
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
236 * way we can test for such errant presence notifications. I.e.: if we
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
237 * get a presence notfication from a JID that matches a chat group JID,
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
238 * we disregard it.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
239 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
240 #define JCS_PENDING 1 /* pending */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
241 #define JCS_ACTIVE 2 /* active */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
242 #define JCS_CLOSED 3 /* closed */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
243
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
244
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
245 #define STATE_EVT(arg) if(gjc->on_state) { (gjc->on_state)(gjc, (arg) ); }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
246
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
247 static void jabber_handlevcard(gjconn, xmlnode, char *);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
249 static char *jabber_normalize(const char *s);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
250
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
251 static char *create_valid_jid(const char *given, char *server, char *resource)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
252 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
253 char *valid;
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
254 char *tmp;
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
255
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
256 if (!(tmp = strchr(given, '@')))
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
257 valid = g_strdup_printf("%s@%s/%s", given, server, resource);
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
258 else if (!strchr(tmp, '/'))
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
259 valid = g_strdup_printf("%s/%s", given, resource);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
260 else
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261 valid = g_strdup(given);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
262
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 return valid;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
264 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
265
4915
9e39899447b8 [gaim-migrate @ 5249]
Robert McQueen <robot101@debian.org>
parents: 4874
diff changeset
266
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
267 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
268 * Dispose of a gaim_jid_struct
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
269 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
270 static void gaim_jid_free(gaim_jid gjid)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
271 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
272 if(gjid) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
273 if(gjid->resource)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
274 free(gjid->resource);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
275 if(gjid->user)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
276 free(gjid->user);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
277 if(gjid->server)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
278 free(gjid->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
279 if(gjid->full)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
280 free(gjid->full);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
281 free(gjid);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
282 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
283 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
284
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
285 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
286 * Create a new gjid struct
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
287 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
288 * Unlike jid_new(), also creates "full."
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
289 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
290 * Shamelessly copied, in part, from jid.c: jid_new()
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
291 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
292 * Caller is responsible for freeing the space allocated by this via
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
293 * gaim_jid_free().
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
294 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
295 * JFIXME: Has a local declaration for jid.c:jid_safe(). I've put in a
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
296 * request to have that added to libjabber's lib.h file. (JSeymour)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
297 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
298 static gaim_jid gaim_jid_new(char *name)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
299 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
300 extern jid jid_safe(jid); /* *retch* */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
301
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
302 gaim_jid gjid = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
303
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
304 if(name && strlen(name)) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
305 char *server, *resource, *type, *str;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
306 int full_len = 0;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
307
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
308 /* user@server/resource */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
309
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
310 str = strdup(name); /* we mangle a copy */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
312 gjid = calloc(1, sizeof(struct gaim_jid_struct));
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
313
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
314 if((resource = strstr(str, "/")) != NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
315 *resource = '\0';
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
316 ++resource;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
317 if((full_len = strlen(resource)) > 0) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
318 gjid->resource = strdup(resource);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
319 ++full_len; /* for later "/" addition */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
320 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
321 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
322 resource = str + strlen(str); /* point to end */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
323 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
324
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
325 type = strstr(str, ":");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
326 if(type != NULL && type < resource) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
327 *type = '\0';
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
328 ++type;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
329 str = type; /* ignore the type: prefix */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
330 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
331
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
332 server = strstr(str, "@");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
333
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
334 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
335 * if there's no @, it's just the server address
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
336 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
337 if(server == NULL || server > resource) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
338 gjid->server = strdup(str);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
339 full_len += strlen(str);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
340 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
341 *server = '\0';
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
342 ++server;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
343 gjid->server = strdup(server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
344 full_len += strlen(server) + 1; /* account for later "@" */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
345 if(strlen(str) > 0) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
346 gjid->user = strdup(str);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
347 full_len += strlen(str);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
348 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
349 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
350
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
351 free(str);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
352
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
353 if(!jid_safe(gjid)) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
354 gaim_jid_free(gjid);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
355 gjid = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
356 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
357 if(full_len) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
358 char *s = gjid->full = malloc(++full_len);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
359
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
360 if(gjid->user) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
361 strcpy(s, gjid->user);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
362 s += strlen(gjid->user);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
363 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
364 if(gjid->server) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
365 if(s > gjid->full)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
366 *(s++) = '@';
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
367 strcpy(s, gjid->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
368 s += strlen(gjid->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
369 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
370 if(gjid->resource) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
371 *(s++) = '/';
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
372 strcpy(s, gjid->resource);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
373 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
374 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
375 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
376 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
377
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
378 return gjid;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
379 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
380
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
381 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
382 * Get a "username@server" from unadorned "username"
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
383 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
384 * If there's no "@server" part and "who" doesn't match the
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
385 * gjconn server (which would indicate that "who" *is* the
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
386 * server in case of server messages), the gjconn server is
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
387 * appended.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
388 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
389 * If incl_resource is TRUE (non-0), the returned string
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
390 * includes the "/resource" part (if it exists), otherwise not.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
391 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
392 * Allocates space for returned string. Caller is
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
393 * responsible for freeing it with g_free().
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
394 *
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
395 * If "gjid" is non-null, sets that as well. Caller is
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
396 * reponsible for freeing that via gaim_jid_free() when done
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
397 * with it.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
398 */
3466
db8d35ad8480 [gaim-migrate @ 3516]
Sean Egan <seanegan@pidgin.im>
parents: 3456
diff changeset
399 static gchar *get_realwho(gjconn gjc, const char *who, int incl_resource, gaim_jid *gjid)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
400 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
401 gaim_jid my_gjid;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
402 gchar *my_who;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
403 gchar *realwho = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
404
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
405 if(!(who && who[0])) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
406 return NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
407 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
408
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
409 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
410 * Bare username and "username" not the server itself?
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
411 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
412 if(!strchr(who, '@') && strcasecmp(who, gjc->user->server)) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
413 my_who = g_strdup_printf("%s@%s", who, gjc->user->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
414 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
415 my_who = g_strdup(who);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
416 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
417
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
418 if((my_gjid = gaim_jid_new(my_who)) != NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
419 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
420 * If there's no "user" part, "who" was just the server or perhaps a transport (?)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
421 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
422 if(my_gjid->user) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
423 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
424 * Include "/resource" bit?
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
425 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
426 if(incl_resource) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
427 realwho = g_strdup(my_gjid->full);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
428 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
429 realwho = g_strdup_printf("%s@%s", my_gjid->user, my_gjid->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
430 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
431 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
432 realwho = g_strdup(my_gjid->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
433 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
434 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
435
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
436 g_free(my_who);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
437
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
438 if(gjid) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
439 *gjid = my_gjid;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
440 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
441 gaim_jid_free(my_gjid);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
442 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
443
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
444 return realwho;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
445 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
446
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
447 static gjconn gjab_new(char *user, char *pass, void *priv)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
448 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
449 pool p;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
450 gjconn gjc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
451
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
452 if (!user)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
453 return (NULL);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
454
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
455 p = pool_new();
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
456 if (!p)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
457 return (NULL);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
458 gjc = pmalloc_x(p, sizeof(gjconn_struct), 0);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
459 if (!gjc) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
460 pool_free(p); /* no need for this anymore! */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
461 return (NULL);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
462 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
463 gjc->p = p;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
464
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
465 if((gjc->user = jid_new(p, user)) == NULL) {
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
466 pool_free(p); /* no need for this anymore! */
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
467 return (NULL);
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
468 }
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
469
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
470 gjc->pass = strdup(pass);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
471
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
472 gjc->state = JCONN_STATE_OFF;
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
473 gjc->was_connected = 0;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
474 gjc->id = 1;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
475 gjc->fd = -1;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
476
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
477 gjc->priv = priv;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
478
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
479 return gjc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
480 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
481
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
482 static void gjab_delete(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
483 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
484 if (!gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
485 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
486
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
487 gjab_stop(gjc);
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
488 free(gjc->pass);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
489 pool_free(gjc->p);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
490 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
491
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
492 static void gjab_state_handler(gjconn gjc, gjconn_state_h h)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
493 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
494 if (!gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
495 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
496
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
497 gjc->on_state = h;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
498 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
499
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
500 static void gjab_packet_handler(gjconn gjc, gjconn_packet_h h)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
501 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
502 if (!gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
503 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
504
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
505 gjc->on_packet = h;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
506 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
507
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
508 static void gjab_stop(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
509 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
510 if (!gjc || gjc->state == JCONN_STATE_OFF)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
511 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
512
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
513 gjab_send_raw(gjc, "</stream:stream>");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
514 gjc->state = JCONN_STATE_OFF;
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
515 gjc->was_connected = 0;
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
516 if(gjc->gsc)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
517 gaim_ssl_close(gjc->gsc);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
518 else
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
519 close(gjc->fd);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
520 gjc->fd = -1;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
521 XML_ParserFree(gjc->parser);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
522 gjc->parser = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
523 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
524
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
525 /*
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
526 static int gjab_getfd(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
527 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
528 if (gjc)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
529 return gjc->fd;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
530 else
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
531 return -1;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
532 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
533
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
534 static jid gjab_getjid(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
535 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
536 if (gjc)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
537 return (gjc->user);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
538 else
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
539 return NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
540 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
541
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
542 static char *gjab_getsid(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
543 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
544 if (gjc)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
545 return (gjc->sid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
546 else
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
547 return NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
548 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
549 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
550
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
551 static char *gjab_getid(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
552 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
553 snprintf(gjc->idbuf, 8, "%d", gjc->id++);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
554 return &gjc->idbuf[0];
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
555 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
556
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
557 static void gjab_send(gjconn gjc, xmlnode x)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
558 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
559 if (gjc && gjc->state != JCONN_STATE_OFF) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
560 char *buf = xmlnode2str(x);
6076
16de7b224a77 [gaim-migrate @ 6535]
Nathan Walp <nwalp@pidgin.im>
parents: 6059
diff changeset
561 if (buf) {
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
562 if(gjc->gsc) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
563 if(gaim_ssl_write(gjc->gsc, buf, strlen(buf)) < 0) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
564 gaim_connection_error(GJ_GC(gjc), _("Write error"));
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
565 } else {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
566 gaim_debug(GAIM_DEBUG_MISC, "jabber", "gjab_send (ssl): %s\n", buf);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
567 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
568 } else {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
569 #ifndef _WIN32
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
570 if(write(gjc->fd, buf, strlen(buf)) < 0) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
571 #else
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
572 if(send(gjc->fd, buf, strlen(buf), 0) < 0) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
573 #endif
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
574 gaim_connection_error(GJ_GC(gjc), _("Write error"));
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
575 } else {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
576 gaim_debug(GAIM_DEBUG_MISC, "jabber", "gjab_send: %s\n", buf);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
577 }
6076
16de7b224a77 [gaim-migrate @ 6535]
Nathan Walp <nwalp@pidgin.im>
parents: 6059
diff changeset
578 }
16de7b224a77 [gaim-migrate @ 6535]
Nathan Walp <nwalp@pidgin.im>
parents: 6059
diff changeset
579 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
580 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
581 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
582
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
583 static void gjab_send_raw(gjconn gjc, const char *str)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
584 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
585 if (gjc && gjc->state != JCONN_STATE_OFF) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
586 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
587 * JFIXME: No error detection?!?!
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
588 */
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
589 if(gjc->gsc) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
590 if(gaim_ssl_write(gjc->gsc, str, strlen(str)) < 0) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
591 gaim_connection_error(GJ_GC(gjc), _("Write error"));
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
592 } else {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
593 gaim_debug(GAIM_DEBUG_MISC, "jabber", "gjab_send_raw (ssl): %s\n", str);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
594 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
595 } else {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
596 #ifndef _WIN32
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
597 if(write(gjc->fd, str, strlen(str)) < 0) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
598 #else
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
599 if(send(gjc->fd, str, strlen(str), 0) < 0) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
600 #endif
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
601 gaim_connection_error(GJ_GC(gjc), _("Write error"));
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
602 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
603 /* printing keepalives to the debug window is really annoying */
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
604 if(strcmp(str, JABBER_KEEPALIVE_STRING))
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
605 gaim_debug(GAIM_DEBUG_MISC, "jabber", "gjab_send_raw: %s\n", str);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
606 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
607 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
608 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
609
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
610 static void gjab_reqroster(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
611 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
612 xmlnode x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
613
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
614 x = jutil_iqnew(JPACKET__GET, NS_ROSTER);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
615 xmlnode_put_attrib(x, "id", gjab_getid(gjc));
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
616
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
617 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
618 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
619 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
620
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
621 static void gjab_reqauth(gjconn gjc)
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
622 {
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
623 xmlnode x, y, z;
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
624 char *user;
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
625
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
626 if (!gjc)
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
627 return;
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
628
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
629 x = jutil_iqnew(JPACKET__GET, NS_AUTH);
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
630 xmlnode_put_attrib(x, "id", IQID_AUTH);
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
631 y = xmlnode_get_tag(x, "query");
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
632
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
633 user = gjc->user->user;
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
634
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
635 if (user) {
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
636 z = xmlnode_insert_tag(y, "username");
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
637 xmlnode_insert_cdata(z, user, -1);
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
638 }
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
639
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
640 gjab_send(gjc, x);
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
641 xmlnode_free(x);
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
642 }
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
643
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
644 static void gjab_auth(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
645 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
646 xmlnode x, y, z;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
647 char *hash, *user;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
648
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
649 if (!gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
650 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
651
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
652 x = jutil_iqnew(JPACKET__SET, NS_AUTH);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
653 xmlnode_put_attrib(x, "id", IQID_AUTH);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
654 y = xmlnode_get_tag(x, "query");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
655
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
656 user = gjc->user->user;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
657
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
658 if (user) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
659 z = xmlnode_insert_tag(y, "username");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
660 xmlnode_insert_cdata(z, user, -1);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
661 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
662
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
663 z = xmlnode_insert_tag(y, "resource");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
664 xmlnode_insert_cdata(z, gjc->user->resource, -1);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
665
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
666 if (gjc->sid) {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
667 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
668 "digest authentication (sid %s)\n", gjc->sid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
669 z = xmlnode_insert_tag(y, "digest");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
670 hash = pmalloc(x->p, strlen(gjc->sid) + strlen(gjc->pass) + 1);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
671 strcpy(hash, gjc->sid);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
672 strcat(hash, gjc->pass);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
673 hash = shahash(hash);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
674 xmlnode_insert_cdata(z, hash, 40);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
675 } else {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
676 z = xmlnode_insert_tag(y, "password");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
677 xmlnode_insert_cdata(z, gjc->pass, -1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
678 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
679
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
680 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
681 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
682
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
683 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
684 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
685
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
686 static void gjab_recv(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
687 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
688 static char buf[4096];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
689 int len;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
690
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
691 if (!gjc || gjc->state == JCONN_STATE_OFF)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
692 return;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
693 #ifndef _WIN32
3234
8a2c6913db8e [gaim-migrate @ 3251]
rwscott
parents: 3229
diff changeset
694 if ((len = read(gjc->fd, buf, sizeof(buf) - 1)) > 0) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
695 #else
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
696 if ((len = recv(gjc->fd, buf, sizeof(buf) - 1, 0)) > 0) {
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
697 #endif
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
698 buf[len] = '\0';
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
699 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
700 "input (len %d): %s\n", len, buf);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
701 XML_Parse(gjc->parser, buf, len, 0);
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
702 } else if (len < 0 || errno != EAGAIN) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
703 STATE_EVT(JCONN_STATE_OFF)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
704 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
705 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
706
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
707 static void gjab_ssl_recv(gpointer data, GaimSslConnection *gsc,
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
708 GaimInputCondition cond)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
709 {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
710 static char buf[4096];
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
711 int len;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
712 GaimConnection *gc = data;
6768
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
713 struct jabber_data *jd;
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
714 gjconn gjc;
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
715
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
716
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
717 if (!g_list_find(gaim_connections_get_all(), gc)) {
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
718 gaim_ssl_close(gsc);
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
719 return;
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
720 }
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
721
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
722 jd = gc->proto_data;
64384a76f515 [gaim-migrate @ 7305]
Nathan Walp <nwalp@pidgin.im>
parents: 6764
diff changeset
723 gjc= jd->gjc;
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
724
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
725 if (!gjc || gjc->state == JCONN_STATE_OFF)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
726 return;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
727
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
728 if((len = gaim_ssl_read(gsc, buf, sizeof(buf) -1)) > 0) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
729 buf[len] = '\0';
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
730 gaim_debug(GAIM_DEBUG_MISC, "jabber",
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
731 "input (ssl) (len %d): %s\n", len, buf);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
732 XML_Parse(gjc->parser, buf, len, 0);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
733 } else if(len < 0) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
734 STATE_EVT(JCONN_STATE_OFF)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
735 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
736 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
737
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
738 static void startElement(void *userdata, const char *name, const char **attribs)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
739 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
740 xmlnode x;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
741 gjconn gjc = (gjconn) userdata;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
742
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
743 if (gjc->current) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
744 /* Append the node to the current one */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
745 x = xmlnode_insert_tag(gjc->current, name);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
746 xmlnode_put_expat_attribs(x, attribs);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
747
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
748 gjc->current = x;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
749 } else {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
750 x = xmlnode_new_tag(name);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
751 xmlnode_put_expat_attribs(x, attribs);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
752 if (strcmp(name, "stream:stream") == 0) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
753 /* special case: name == stream:stream */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
754 /* id attrib of stream is stored for digest auth */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
755 gjc->sid = g_strdup(xmlnode_get_attrib(x, "id"));
6638
a52bdae83933 [gaim-migrate @ 7163]
Nathan Walp <nwalp@pidgin.im>
parents: 6623
diff changeset
756 gjc->state = JCONN_STATE_ON;
a52bdae83933 [gaim-migrate @ 7163]
Nathan Walp <nwalp@pidgin.im>
parents: 6623
diff changeset
757 STATE_EVT(JCONN_STATE_ON);
2635
60897108c74c [gaim-migrate @ 2648]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2607
diff changeset
758 xmlnode_free(x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
759 } else {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
760 gjc->current = x;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
761 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
762 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
763 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
764
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
765 static void endElement(void *userdata, const char *name)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
766 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
767 gjconn gjc = (gjconn) userdata;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
768 xmlnode x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
769 jpacket p;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
770
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
771 if (gjc->current == NULL) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
772 /* we got </stream:stream> */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
773 STATE_EVT(JCONN_STATE_OFF)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
774 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
775 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
776
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
777 x = xmlnode_get_parent(gjc->current);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
778
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
779 if (!x) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
780 /* it is time to fire the event */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
781 p = jpacket_new(gjc->current);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
782
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
783 if (gjc->on_packet)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
784 (gjc->on_packet) (gjc, p);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
785 else
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
786 xmlnode_free(gjc->current);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
787 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
788
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
789 gjc->current = x;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
790 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
791
2090
bab8b7e309db [gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
792 static void jabber_callback(gpointer data, gint source, GaimInputCondition condition)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
793 {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
794 GaimConnection *gc = data;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
795 struct jabber_data *jd = (struct jabber_data *)gc->proto_data;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
796
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
797 gjab_recv(jd->gjc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
798 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
799
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
800 static void charData(void *userdata, const char *s, int slen)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
801 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
802 gjconn gjc = (gjconn) userdata;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
803
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
804 if (gjc->current)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
805 xmlnode_insert_cdata(gjc->current, s, slen);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
806 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
807
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
808
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
809 static void gjab_start_stream(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
810 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
811 xmlnode x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
812 char *t, *t2;
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
813
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
814 gjc->state = JCONN_STATE_CONNECTED;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
815 STATE_EVT(JCONN_STATE_CONNECTED)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
816
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
817 /* start stream */
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
818 x = jutil_header(NS_CLIENT, gjc->user->server);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
819 t = xmlnode2str(x);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
820 /* this is ugly, we can create the string here instead of jutil_header */
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
821 /* what do you think about it? -madcat */
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
822 t2 = strstr(t, "/>");
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
823 *t2++ = '>';
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
824 *t2 = '\0';
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
825 gjab_send_raw(gjc, "<?xml version='1.0'?>");
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
826 gjab_send_raw(gjc, t);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
827 xmlnode_free(x);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
828 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
829
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
830 static void gjab_ssl_connected(gpointer data, GaimSslConnection *gsc,
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
831 GaimInputCondition cond)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
832 {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
833 GaimConnection *gc = data;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
834 struct jabber_data *jd;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
835 gjconn gjc;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
836
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
837 if (!g_list_find(gaim_connections_get_all(), gc)) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
838 gaim_ssl_close(gsc);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
839 return;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
840 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
841
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
842 jd = gc->proto_data;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
843 gjc = jd->gjc;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
844
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
845 gjab_start_stream(gjc);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
846
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
847 /* this seems wrong, but... */
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
848
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
849 gaim_ssl_input_add(gsc, gjab_ssl_recv, gc);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
850 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
851
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
852 static void gjab_connected(gpointer data, gint source, GaimInputCondition cond)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
853 {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
854 GaimConnection *gc = data;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
855 struct jabber_data *jd;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
856 gjconn gjc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
857
5578
31f6f8b5e24b [gaim-migrate @ 5982]
Christian Hammond <chipx86@chipx86.com>
parents: 5572
diff changeset
858 if (!g_list_find(gaim_connections_get_all(), gc)) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
859 close(source);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
860 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
861 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
862
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
863 jd = gc->proto_data;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
864 gjc = jd->gjc;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
865
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 4359
diff changeset
866 gjc->fd = source;
2300
06a3c10f4918 [gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2289
diff changeset
867
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
868 if (source == -1) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
869 STATE_EVT(JCONN_STATE_OFF)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
870 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
871 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
872
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
873 gjab_start_stream(gjc);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
874
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
875 gc->inpa = gaim_input_add(gjc->fd, GAIM_INPUT_READ, jabber_callback, gc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
876 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
877
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
878 static void gjab_start(gjconn gjc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
879 {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
880 GaimAccount *account;
4366
d2b52a5ff6fc [gaim-migrate @ 4632]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents: 4359
diff changeset
881 int port, rc;
5613
df1602bc1e05 [gaim-migrate @ 6019]
Nathan Walp <nwalp@pidgin.im>
parents: 5599
diff changeset
882 const char *connect_server;
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
883 const char *server;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
884
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
885 if (!gjc || gjc->state != JCONN_STATE_OFF)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
886 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
887
4491
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
888 account = GJ_GC(gjc)->account;
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
889 port = gaim_account_get_int(account, "port", DEFAULT_PORT);
5613
df1602bc1e05 [gaim-migrate @ 6019]
Nathan Walp <nwalp@pidgin.im>
parents: 5599
diff changeset
890 connect_server = gaim_account_get_string(account, "connect_server", "");
df1602bc1e05 [gaim-migrate @ 6019]
Nathan Walp <nwalp@pidgin.im>
parents: 5599
diff changeset
891 server = connect_server[0] ? connect_server : gjc->user->server;
df1602bc1e05 [gaim-migrate @ 6019]
Nathan Walp <nwalp@pidgin.im>
parents: 5599
diff changeset
892
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
893
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
894 gjc->parser = XML_ParserCreate(NULL);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
895 XML_SetUserData(gjc->parser, (void *)gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
896 XML_SetElementHandler(gjc->parser, startElement, endElement);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
897 XML_SetCharacterDataHandler(gjc->parser, charData);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
898
6880
69def428c334 [gaim-migrate @ 7426]
Nathan Walp <nwalp@pidgin.im>
parents: 6817
diff changeset
899 if(gaim_account_get_bool(account, "old_ssl", FALSE)
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
900 && gaim_ssl_is_supported()) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
901 gjc->gsc = gaim_ssl_connect(account, server, port,
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
902 gjab_ssl_connected, GJ_GC(gjc));
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
903 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
904
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
905 if(!gjc->gsc) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
906 rc = gaim_proxy_connect(account, server, port, gjab_connected,
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
907 GJ_GC(gjc));
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
908 if (!account->gc || (rc != 0)) {
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
909 STATE_EVT(JCONN_STATE_OFF)
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
910 return;
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
911 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
912 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
913 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
914
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
915 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
916 * Find chat by chat group name
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
917 */
5679
943eb70954b6 [gaim-migrate @ 6097]
Nathan Walp <nwalp@pidgin.im>
parents: 5638
diff changeset
918 static GaimConversation *find_chat(GaimConnection *gc, char *name)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
919 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
920 GSList *bcs = gc->buddy_chats;
5679
943eb70954b6 [gaim-migrate @ 6097]
Nathan Walp <nwalp@pidgin.im>
parents: 5638
diff changeset
921 GaimConversation *b = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
922 char *chat = g_strdup(normalize(name));
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
923
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
924 while (bcs) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
925 b = bcs->data;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
926 if (!strcasecmp(normalize(b->name), chat))
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
927 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
928 b = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
929 bcs = bcs->next;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
930 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
931
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
932 g_free(chat);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
933 return b;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
934 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
935
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
936 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
937 * Find chat by "chat id"
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
938 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
939 * Returns: 0 on success and jabber_chat pointer set
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
940 * or -EINVAL on error and jabber_chat pointer is
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
941 * undefined.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
942 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
943 * TBD: Slogging through the buddy_chats list seems
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
944 * redundant since the chat i.d. is mirrored in the
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
945 * jabber_chat struct list. But that's the way it
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
946 * was, so that's the way I'm leaving it--for now.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
947 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
948 static int jabber_find_chat_by_convo_id(GaimConnection *gc, int id, struct jabber_chat **jc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
949 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
950 GSList *bcs = gc->buddy_chats;
5679
943eb70954b6 [gaim-migrate @ 6097]
Nathan Walp <nwalp@pidgin.im>
parents: 5638
diff changeset
951 GaimConversation *b = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
952 struct jabber_data *jd = gc->proto_data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
953
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
954 *jc = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
955
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
956 while(bcs != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
957 b = bcs->data;
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
958 if (id == gaim_chat_get_id(GAIM_CHAT(b)))
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
959 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
960 bcs = bcs->next;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
961 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
962
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
963 if (bcs != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
964 bcs = jd->chats;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
965 while (bcs != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
966 *jc = bcs->data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
967 if ((*jc)->state == JCS_ACTIVE && (*jc)->b == b)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
968 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
969 bcs = bcs->next;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
970 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
971 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
972
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
973 return(bcs == NULL? -EINVAL : 0);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
974 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
975
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
976 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
977 * Find any chat
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
978 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
979 static struct jabber_chat *find_any_chat(GaimConnection *gc, jid chat)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
980 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
981 GSList *jcs = ((struct jabber_data *)gc->proto_data)->chats;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
982 struct jabber_chat *jc = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
983
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
984 while (jcs) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
985 jc = jcs->data;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
986 if (!jid_cmpx(chat, jc->gjid, JID_USER | JID_SERVER))
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
987 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
988 jc = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
989 jcs = jcs->next;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
990 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
991
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
992 return jc;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
993 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
994
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
995
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
996 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
997 * Find existing/active Jabber chat
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
998 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
999 static struct jabber_chat *find_existing_chat(GaimConnection *gc, jid chat)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1000 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1001 GSList *jcs = ((struct jabber_data *)gc->proto_data)->chats;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1002 struct jabber_chat *jc = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1003
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1004 while (jcs) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1005 jc = jcs->data;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1006 if (jc->state == JCS_ACTIVE && !jid_cmpx(chat, jc->gjid, JID_USER | JID_SERVER))
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1007 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1008 jc = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1009 jcs = jcs->next;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1010 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1011
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1012 return jc;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1013 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1014
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1015 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1016 * Find pending chat
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1017 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1018 static struct jabber_chat *find_pending_chat(GaimConnection *gc, jid chat)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1019 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1020 GSList *jcs = ((struct jabber_data *)gc->proto_data)->chats;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1021 struct jabber_chat *jc = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1022
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1023 while (jcs) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1024 jc = jcs->data;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1025 if (jc->state == JCS_PENDING && !jid_cmpx(chat, jc->gjid, JID_USER | JID_SERVER))
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1026 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1027 jc = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1028 jcs = jcs->next;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1029 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1030
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1031 return jc;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1032 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1033
5679
943eb70954b6 [gaim-migrate @ 6097]
Nathan Walp <nwalp@pidgin.im>
parents: 5638
diff changeset
1034 static gboolean find_chat_buddy(GaimConversation *b, char *name)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1035 {
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1036 GList *m = gaim_chat_get_users(GAIM_CHAT(b));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1037
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1038 while (m) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1039 if (!strcmp(m->data, name))
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1040 return TRUE;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1041 m = m->next;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1042 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1043
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1044 return FALSE;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1045 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1046
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1047 /*
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1048 * Remove a buddy from the (gaim) buddylist (if he's on it)
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1049 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1050 static void jabber_remove_gaim_buddy(GaimConnection *gc, const char *buddyname)
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1051 {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1052 GaimBuddy *b;
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1053
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
1054 if ((b = gaim_find_buddy(gc->account, buddyname)) != NULL) {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1055 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1056 "removing buddy [1]: %s\n", buddyname);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
1057 gaim_blist_remove_buddy(b);
4349
a65175463a31 [gaim-migrate @ 4614]
Nathan Walp <nwalp@pidgin.im>
parents: 4333
diff changeset
1058 gaim_blist_save();
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1059 }
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1060 }
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1061
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1062 static void jabber_change_passwd(GaimConnection *gc, const char *old, const char *new)
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1063 {
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1064 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1065
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1066 if(strcmp(old, gjc->pass))
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1067 {
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1068 gaim_notify_error(gc, NULL,
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1069 _("Unable to change password."),
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1070 _("The current password you entered is incorrect. "
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1071 "Your password has not been changed."));
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1072 }
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1073 else if(!strcmp(old, new))
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1074 {
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1075 gaim_notify_error(gc, NULL,
6623
75ba9eb9d3f8 [gaim-migrate @ 7147]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6622
diff changeset
1076 _("Unable to change password."),
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1077 _("The new password you entered is the same as "
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1078 "your current password. "
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1079 "Your password remains the same."));
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1080 }
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1081 else
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1082 {
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1083 xmlnode x, y, z;
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1084 char *id;
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1085
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1086 x = jutil_iqnew(JPACKET__SET, NS_REGISTER);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1087 xmlnode_put_attrib(x, "to", gjc->user->server);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1088 y = xmlnode_get_tag(x, "query");
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1089 z = xmlnode_insert_tag(y, "username");
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1090 xmlnode_insert_cdata(z, gjc->user->user, -1);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1091 z = xmlnode_insert_tag(y, "password");
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1092 xmlnode_insert_cdata(z, new, -1);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1093
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1094 id = gjab_getid(gjc);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1095 xmlnode_put_attrib(x, "id", id);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1096
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1097 free(gjc->pass);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1098 gjc->pass = strdup(new);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1099
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1100 g_hash_table_insert(gjc->queries, g_strdup(id), g_strdup("change_password"));
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1101
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1102 gjab_send(gjc, x);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1103 xmlnode_free(x);
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1104 }
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
1105 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1106
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
1107 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
1108 * Return pointer to jabber_buddy_data if buddy found. Create if necessary.
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
1109 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1110 static struct jabber_buddy_data* jabber_find_buddy(GaimConnection *gc, const char *buddy, gboolean create)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1111 {
6502
4aafe11743dd [gaim-migrate @ 7017]
Ethan Blanton <elb@pidgin.im>
parents: 6478
diff changeset
1112 struct jabber_data *jd;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1113 gpointer val;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1114 char *realwho;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1115
6502
4aafe11743dd [gaim-migrate @ 7017]
Ethan Blanton <elb@pidgin.im>
parents: 6478
diff changeset
1116 if (gc == NULL)
4aafe11743dd [gaim-migrate @ 7017]
Ethan Blanton <elb@pidgin.im>
parents: 6478
diff changeset
1117 return NULL;
4aafe11743dd [gaim-migrate @ 7017]
Ethan Blanton <elb@pidgin.im>
parents: 6478
diff changeset
1118
4aafe11743dd [gaim-migrate @ 7017]
Ethan Blanton <elb@pidgin.im>
parents: 6478
diff changeset
1119 jd = gc->proto_data;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1120 if((realwho = get_realwho(jd->gjc, buddy, FALSE, NULL)) == NULL)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1121 return NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1122
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1123 val = g_hash_table_lookup(jd->buddies, realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1124 if(val) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1125 g_free(realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1126 return (struct jabber_buddy_data *)val;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1127
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1128 } else if (create) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1129 struct jabber_buddy_data *jbd = g_new0(struct jabber_buddy_data, 1);
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
1130 jbd->invisible = JABBER_NOT_INVIS;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1131 g_hash_table_insert(jd->buddies, g_strdup(realwho), jbd);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1132 g_free(realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1133 return jbd;
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1134 } else {
5940
b815b54e3d2b [gaim-migrate @ 6380]
Nathan Walp <nwalp@pidgin.im>
parents: 5920
diff changeset
1135 g_free(realwho);
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1136 return NULL;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1137 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1138 }
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1139
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1140 /*
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1141 * find a resource by name, or if no name given, return the "default" resource
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1142 * default being the highest priority one.
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1143 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1144
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1145 static jab_res_info jabber_find_resource(GaimConnection *gc, const char *who)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1146 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1147 GSList *resources;
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1148 struct jabber_buddy_data *jbd = jabber_find_buddy(gc, who, FALSE);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1149 jab_res_info jri = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1150 char *res = strstr(who, "/");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1151
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1152 if(res)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1153 res++;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1154
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1155 if(jbd)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1156 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1157 resources = jbd->resources;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1158 while(resources)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1159 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1160 if(!jri && !res) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1161 jri = (jab_res_info) resources->data;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1162 } else if(!res) { /* we're looking for the default priority, so... */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1163 if(((jab_res_info) resources->data)->priority >= jri->priority)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1164 jri = (jab_res_info) resources->data;
3337
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1165 } else if(((jab_res_info)resources->data)->name) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1166 if(!strcasecmp(((jab_res_info) resources->data)->name, res)) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1167 jri = (jab_res_info) resources->data;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1168 break;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1169 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1170 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1171 resources = resources->next;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1172 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1173 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1174
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1175 return jri;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1176 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1177
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
1178 #if 0
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1179 static gboolean jabber_is_default_resource(GaimConnection *gc, const char *who)
5291
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1180 {
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1181 jab_res_info jri = jabber_find_resource(gc, who);
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1182 char *buddy = g_strdup(who);
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1183 char *resource = strrchr(buddy, '/');
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1184
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1185 if(!resource || !strcmp(resource+1, jri->name)) {
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1186 g_free(buddy);
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1187 return TRUE;
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1188 }
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1189
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1190 g_free(buddy);
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1191 return FALSE;
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1192 }
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
1193 #endif
5291
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1194
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1195 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1196 * if the resource doesn't exist, create it. otherwise, just update the priority
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1197 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1198 static void jabber_track_resource(GaimConnection *gc,
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1199 char *buddy,
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1200 char *res,
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1201 int priority,
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1202 int state)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1203 {
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1204 struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy, TRUE);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1205
3337
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1206 if(jbd) {
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1207 char *who;
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1208 jab_res_info jri;
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1209 if(res)
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1210 who = g_strdup_printf("%s/%s", buddy, res);
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1211 else
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1212 who = g_strdup(buddy);
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1213 jri = jabber_find_resource(gc, who);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1214 g_free(who);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1215 if(!jri) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1216 jri = g_new0(struct jabber_resource_info, 1);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1217 jri->name = g_strdup(res);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1218 jri->away_msg = NULL;
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1219 jri->has_xhtml = TRUE;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1220 jbd->resources = g_slist_append(jbd->resources, jri);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1221 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1222 jri->priority = priority;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1223 jri->state = state;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1224 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1225 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1226
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1227 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1228 * remove the resource, if it exists
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1229 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1230 static void jabber_remove_resource(GaimConnection *gc, char *buddy, char *res)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1231 {
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1232 struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy, FALSE);
3337
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1233 if(jbd) {
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1234 char *who;
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1235 jab_res_info jri;
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1236 if(res)
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1237 who = g_strdup_printf("%s/%s", buddy, res);
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1238 else
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1239 who = g_strdup(buddy);
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1240 jri = jabber_find_resource(gc, who);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1241 g_free(who);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1242 if(jri) {
3337
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1243 if(jri->name)
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1244 g_free(jri->name);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1245 if(jri->away_msg)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1246 g_free(jri->away_msg);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1247 jbd->resources = g_slist_remove(jbd->resources, jri);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1248 g_free(jri);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1249 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1250 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1251 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1252
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1253 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1254 * grab the away message for the default resource
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1255 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1256 static char *jabber_lookup_away(gjconn gjc, char *name)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1257 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1258 jab_res_info jri = jabber_find_resource(GJ_GC(gjc), name);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1259
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1260 if(!jri)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1261 return _("Unknown");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1262
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1263 return jri->away_msg;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1264 }
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1265 static const char *jabber_get_state_string(int s) {
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1266 switch(s) {
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1267 case UC_AWAY:
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1268 return _("Away");
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1269 case UC_CHAT:
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1270 return _("Chatty");
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1271 case UC_XA:
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1272 return _("Extended Away");
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1273 case UC_DND:
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1274 return _("Do Not Disturb");
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1275 default:
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1276 return _("Available");
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1277 }
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1278 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1279
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1280 static void jabber_track_away(gjconn gjc, jpacket p, char *type)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1281 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1282 jab_res_info jri = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1283
3337
12dfec14dd4e [gaim-migrate @ 3356]
Nathan Walp <nwalp@pidgin.im>
parents: 3328
diff changeset
1284 if(!p || !p->from || !p->from->user)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1285 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1286
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1287 jri = jabber_find_resource(GJ_GC(gjc), jid_full(p->from));
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1288
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1289 if(!jri)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1290 return;
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1291
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1292 if(jri->away_msg)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1293 g_free(jri->away_msg);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1294
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
1295 jri->away_msg = g_strdup(xmlnode_get_tag_data(p->x, "status"));
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1296 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1297
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
1298 static void jabber_convo_closed(GaimConnection *gc, const char *name)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1299 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1300 jab_res_info jri = jabber_find_resource(gc, name);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1301
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1302 if(jri) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1303 if(jri->thread_id)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1304 g_free(jri->thread_id);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1305
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1306 jri->thread_id = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1307 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1308 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1309
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1310 static void jabber_track_convo_thread(gjconn gjc, char *name, char *thread_id)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1311 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1312 jab_res_info jri = jabber_find_resource(GJ_GC(gjc), name);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1313
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1314 if(jri) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1315 if(jri->thread_id)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1316 g_free(jri->thread_id);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1317
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1318 jri->thread_id = g_strdup(thread_id);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1319 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1320 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1321
5136
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
1322 static char *jabber_get_convo_thread(gjconn gjc, const char *name)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1323 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1324 char *ct = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1325 jab_res_info jri = jabber_find_resource(GJ_GC(gjc), name);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1326
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1327 if(jri) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1328 if(jri->thread_id)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1329 ct = g_strdup(jri->thread_id);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1330 }
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1331
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1332 return ct;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1333 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1334
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1335
5426
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1336 static time_t str_to_time(char *timestamp)
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3150
diff changeset
1337 {
5426
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1338 struct tm t;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1339 time_t retval = 0;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1340 char buf[32];
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1341 char *c;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1342 int tzoff = 0;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1343
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1344 time(&retval);
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1345 localtime_r(&retval, &t);
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1346
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1347 snprintf(buf, sizeof(buf), "%s", timestamp);
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1348 c = buf;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1349
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1350 /* 4 digit year */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1351 if(!sscanf(c, "%04d", &t.tm_year)) return 0;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1352 c+=4;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1353 if(*c == '-')
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1354 c++;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1355
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1356 t.tm_year -= 1900;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1357
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1358 /* 2 digit month */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1359 if(!sscanf(c, "%02d", &t.tm_mon)) return 0;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1360 c+=2;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1361 if(*c == '-')
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1362 c++;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1363
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1364 t.tm_mon -= 1;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1365
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1366 /* 2 digit day */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1367 if(!sscanf(c, "%02d", &t.tm_mday)) return 0;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1368 c+=2;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1369
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1370 if(*c == 'T') { /* we have more than a date, keep going */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1371 c++; /* skip the "T" */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1372
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1373 /* 2 digit hour */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1374 if(sscanf(c, "%02d:%02d:%02d", &t.tm_hour, &t.tm_min, &t.tm_sec)) {
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1375 int tzhrs, tzmins;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1376 c+=8;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1377 if(*c == '.') /* dealing with precision we don't care about */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1378 c += 4;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1379
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1380 if((*c == '+' || *c == '-') &&
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1381 sscanf(c+1, "%02d:%02d", &tzhrs, &tzmins)) {
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1382 tzoff = tzhrs*60*60 + tzmins*60;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1383 if(*c == '+')
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1384 tzoff *= -1;
5279
5a665a7f8333 [gaim-migrate @ 5651]
Nathan Walp <nwalp@pidgin.im>
parents: 5264
diff changeset
1385 }
5426
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1386
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1387 #ifdef HAVE_TM_GMTOFF
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1388 tzoff += t.tm_gmtoff;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1389 #else
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1390 # ifdef HAVE_TIMEZONE
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1391 tzset(); /* making sure */
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1392 tzoff -= timezone;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1393 # endif
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1394 #endif
5279
5a665a7f8333 [gaim-migrate @ 5651]
Nathan Walp <nwalp@pidgin.im>
parents: 5264
diff changeset
1395 }
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1396 }
5426
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1397 retval = mktime(&t);
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1398
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1399 retval += tzoff;
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1400
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1401 return retval;
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3150
diff changeset
1402 }
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3150
diff changeset
1403
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1404 static void jabber_handlemessage(gjconn gjc, jpacket p)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1405 {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1406 xmlnode y, subj;
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3150
diff changeset
1407 time_t time_sent = time(NULL);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1408 gboolean typing = FALSE;
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1409 gboolean has_xhtml = TRUE;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1410
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1411 char *from = NULL, *msg = NULL, *type = NULL, *topic = NULL;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1412 char *thread_id = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1413 char *conference_room = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1414 char m[BUF_LONG * 2];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1415
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1416 type = xmlnode_get_attrib(p->x, "type");
3769
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
1417
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1418 if ((y = xmlnode_get_tag(p->x, "thread")))
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1419 thread_id = xmlnode_get_data(y);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1420
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1421 y = xmlnode_get_firstchild(p->x);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1422
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1423 while(y) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1424 if(NSCHECK(y, NS_DELAY)) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1425 char *timestamp = xmlnode_get_attrib(y, "stamp");
5426
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1426 if(timestamp)
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1427 time_sent = str_to_time(timestamp);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1428 } else if(NSCHECK(y, "jabber:x:event")) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1429 if(xmlnode_get_tag(y, "composing"))
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1430 typing = TRUE;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1431 } else if(NSCHECK(y, "jabber:x:conference")) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1432 conference_room = xmlnode_get_attrib(y, "jid");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1433 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1434 y = xmlnode_get_nextsibling(y);
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3150
diff changeset
1435 }
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3150
diff changeset
1436
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1437 if (!type || !strcasecmp(type, "normal") || !strcasecmp(type, "chat")) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1438
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1439 from = jid_full(p->from);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1440 if ((y = xmlnode_get_tag(p->x, "html"))) {
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1441 msg = xmlnode2str(y);
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1442 } else if ((y = xmlnode_get_tag(p->x, "body"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1443 msg = xmlnode_get_data(y);
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1444 has_xhtml = FALSE;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1445 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1446
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1447 if (!from)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1448 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1449
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1450 if (conference_room) {
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1451 GHashTable *components = g_hash_table_new_full(g_str_hash,
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1452 g_str_equal, g_free, g_free);
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
1453 char **data;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1454
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1455 data = g_strsplit(conference_room, "@", 2);
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1456 g_hash_table_replace(components, g_strdup("room"),
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1457 g_strdup(data[0]));
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1458 g_hash_table_replace(components, g_strdup("server"),
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1459 g_strdup(data[1]));
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1460 g_hash_table_replace(components, g_strdup("handle"),
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1461 g_strdup(gjc->user->user));
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
1462 g_strfreev(data);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1463
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
1464 serv_got_chat_invite(GJ_GC(gjc), conference_room, from, msg, components);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1465 } else if (msg) { /* whisper */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1466 struct jabber_chat *jc;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1467 g_snprintf(m, sizeof(m), "%s", msg);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1468 if (((jc = find_existing_chat(GJ_GC(gjc), p->from)) != NULL) && jc->b)
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1469 serv_got_chat_in(GJ_GC(gjc),
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1470 gaim_chat_get_id(GAIM_CHAT(jc->b)),
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1471 p->from->resource, 1, m, time_sent);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1472 else {
2278
79ae3adc97bf [gaim-migrate @ 2288]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2232
diff changeset
1473 int flags = 0;
3769
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
1474 jab_res_info jri = jabber_find_resource(GJ_GC(gjc), from);
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1475 if(jri) {
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1476 if(typing)
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1477 jri->has_composing = TRUE;
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1478 jri->has_xhtml = has_xhtml;
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1479 }
3769
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
1480 jabber_track_convo_thread(gjc, from, thread_id);
6640
007eb21016b4 [gaim-migrate @ 7165]
Christian Hammond <chipx86@chipx86.com>
parents: 6638
diff changeset
1481 if (gaim_find_conversation_with_account(from, GJ_GC(gjc)->account))
3769
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
1482 serv_got_im(GJ_GC(gjc), from, m, flags,
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1483 time_sent, -1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1484 else {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1485 if(p->from->user) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1486 from = g_strdup_printf("%s@%s", p->from->user,
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1487 p->from->server);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1488 } else {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1489 /* server message? */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1490 from = g_strdup(p->from->server);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1491 }
3159
15816c95c61c [gaim-migrate @ 3175]
Sean Egan <seanegan@pidgin.im>
parents: 3150
diff changeset
1492 serv_got_im(GJ_GC(gjc), from, m, flags, time_sent, -1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1493 g_free(from);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1494 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1495 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1496 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1497 /* a non-message message! */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1498 from = g_strdup_printf("%s@%s", p->from->user, p->from->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1499 if(typing)
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
1500 serv_got_typing(GJ_GC(gjc), from, 0, GAIM_TYPING);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1501 else
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1502 serv_got_typing_stopped(GJ_GC(gjc), from);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1503 g_free(from);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1504 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1505
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1506 } else if (!strcasecmp(type, "error")) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1507 if ((y = xmlnode_get_tag(p->x, "error"))) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1508 type = xmlnode_get_attrib(y, "code");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1509 msg = xmlnode_get_data(y);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1510 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1511
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1512 if (msg) {
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
1513 from = g_strdup_printf(_("Jabber Error %s"), type ? type : "");
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1514 gaim_notify_error(GJ_GC(gjc), NULL, from, msg);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1515 g_free(from);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1516 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1517 } else if (!strcasecmp(type, "groupchat")) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1518 struct jabber_chat *jc;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1519 static int i = 0;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1520
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1521 if ((y = xmlnode_get_tag(p->x, "html"))) {
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1522 msg = xmlnode2str(y);
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
1523 } else if ((y = xmlnode_get_tag(p->x, "body"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1524 msg = xmlnode_get_data(y);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1525 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1526
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1527 if ((subj = xmlnode_get_tag(p->x, "subject"))) {
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1528 topic = xmlnode_get_data(subj);
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1529 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1530
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1531 jc = find_existing_chat(GJ_GC(gjc), p->from);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1532 if (!jc) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1533 /* we're not in this chat. are we supposed to be? */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1534 if ((jc = find_pending_chat(GJ_GC(gjc), p->from)) != NULL) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1535 /* yes, we're supposed to be. so now we are. */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1536 jc->b = serv_got_joined_chat(GJ_GC(gjc), i++, p->from->user);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1537 jc->id = gaim_chat_get_id(GAIM_CHAT(jc->b));
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1538 jc->state = JCS_ACTIVE;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1539 } else {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1540 /* no, we're not supposed to be. */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1541 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1542 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1543 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1544 if (p->from->resource) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1545 if (!y) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1546 if (!find_chat_buddy(jc->b, p->from->resource)) {
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1547 gaim_chat_add_user(GAIM_CHAT(jc->b),
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1548 p->from->resource, NULL);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1549 } else if ((y = xmlnode_get_tag(p->x, "status"))) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1550 jabber_track_away(gjc, p, NULL);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1551 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1552 } else if (jc->b && msg) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1553 char buf[8192];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1554
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1555 if (topic) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1556 char tbuf[8192];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1557 g_snprintf(tbuf, sizeof(tbuf), "%s", topic);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1558 gaim_chat_set_topic(GAIM_CHAT(jc->b),
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1559 p->from->resource, tbuf);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1560 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1561
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1562 g_snprintf(buf, sizeof(buf), "%s", msg);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1563 serv_got_chat_in(GJ_GC(gjc),
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1564 gaim_chat_get_id(GAIM_CHAT(jc->b)),
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1565 p->from->resource, 0, buf, time_sent);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1566 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1567 } else { /* message from the server */
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1568 if(jc->b && topic) {
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1569 char tbuf[8192];
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1570 g_snprintf(tbuf, sizeof(tbuf), "%s", topic);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1571 gaim_chat_set_topic(GAIM_CHAT(jc->b), "", tbuf);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1572 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1573 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1574
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1575 } else {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1576 gaim_debug(GAIM_DEBUG_WARNING, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1577 "unhandled message %s\n", type);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1578 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1579 }
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1580
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1581 static void jabber_handlepresence(gjconn gjc, jpacket p)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1582 {
6817
23cea6ca0b8e [gaim-migrate @ 7358]
Nathan Walp <nwalp@pidgin.im>
parents: 6808
diff changeset
1583 char *from, *type;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1584 GaimBuddy *b = NULL;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1585 gaim_jid gjid;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1586 char *buddy;
3194
9404dfabed94 [gaim-migrate @ 3211]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3161
diff changeset
1587 xmlnode y;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1588 char *show;
2501
5e1fa4926c93 [gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2382
diff changeset
1589 int state = 0;
5679
943eb70954b6 [gaim-migrate @ 6097]
Nathan Walp <nwalp@pidgin.im>
parents: 5638
diff changeset
1590 GaimConversation *cnv = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1591 struct jabber_chat *jc = NULL;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1592 int priority = 0;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1593 struct jabber_buddy_data *jbd;
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1594
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1595 from = xmlnode_get_attrib(p->x, "from");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1596 type = xmlnode_get_attrib(p->x, "type");
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1597
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1598 if((buddy = get_realwho(gjc, from, FALSE, &gjid)) == NULL)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1599 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1600
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1601 if (gjid->user == NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1602 /* FIXME: transport */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1603 g_free(buddy);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1604 gaim_jid_free(gjid);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1605 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1606 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1607
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1608 jbd = jabber_find_buddy(GJ_GC(gjc), buddy, TRUE);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1609
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1610 if(jbd->error_msg) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1611 g_free(jbd->error_msg);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1612 jbd->error_msg = NULL;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1613 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1614
3259
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1615 if(type && !strcasecmp(type, "error")) {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1616 state = UC_ERROR;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1617 if((y = xmlnode_get_tag(p->x, "error")) != NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1618 jbd->error_msg = g_strdup_printf(_("Error %s: %s"),
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1619 xmlnode_get_attrib(y, "code"), xmlnode_get_data(y));
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1620 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1621 jbd->error_msg = g_strdup(_("Unknown Error in presence"));
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1622 }
3259
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1623 } else {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1624 if ((y = xmlnode_get_tag(p->x, "show"))) {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1625 show = xmlnode_get_data(y);
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1626 if (!show) {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1627 state = 0;
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1628 } else if (!strcasecmp(show, "away")) {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1629 state = UC_AWAY;
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1630 } else if (!strcasecmp(show, "chat")) {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1631 state = UC_CHAT;
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1632 } else if (!strcasecmp(show, "xa")) {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1633 state = UC_XA;
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1634 } else if (!strcasecmp(show, "dnd")) {
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1635 state = UC_DND;
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1636 }
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1637 } else {
2501
5e1fa4926c93 [gaim-migrate @ 2514]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2382
diff changeset
1638 state = 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1639 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1640 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1641
5291
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1642 if ((y = xmlnode_get_tag(p->x, "priority")))
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1643 priority = atoi(xmlnode_get_data(y));
dfb2b29101b3 [gaim-migrate @ 5663]
Nathan Walp <nwalp@pidgin.im>
parents: 5289
diff changeset
1644
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1645 /* um. we're going to check if it's a chat. if it isn't, and there are pending
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1646 * chats, create the chat. if there aren't pending chats and we don't have the
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1647 * buddy on our list, simply bail out. */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1648 if ((cnv = find_chat(GJ_GC(gjc), gjid->user)) == NULL) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1649 static int i = 0x70;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1650 if ((jc = find_pending_chat(GJ_GC(gjc), gjid)) != NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1651 jc->b = cnv = serv_got_joined_chat(GJ_GC(gjc), i++, gjid->user);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1652 jc->id = gaim_chat_get_id(GAIM_CHAT(jc->b));
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1653 jc->state = JCS_ACTIVE;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
1654 } else if ((b = gaim_find_buddy(GJ_GC(gjc)->account, buddy)) == NULL) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1655 g_free(buddy);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1656 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1657 return;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1658 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1659 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1660
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
1661 if (state == UC_ERROR || (type && (strcasecmp(type, "unavailable") == 0)))
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1662 jabber_remove_resource(GJ_GC(gjc), buddy, gjid->resource);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1663 else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1664 jabber_track_resource(GJ_GC(gjc), buddy, gjid->resource, priority, state);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1665
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1666 /* keep track of away msg somewhat the same as the yahoo plugin */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1667 jabber_track_away(gjc, p, type);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1668 }
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1669
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1670 if (!cnv) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1671 /* this is where we handle presence information for "regular" buddies */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1672 jab_res_info jri = jabber_find_resource(GJ_GC(gjc), buddy);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1673 if(jri) {
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
1674 serv_got_update(GJ_GC(gjc), buddy, 1, 0, b->signon, b->idle, jri->state);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1675 } else
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
1676 serv_got_update(GJ_GC(gjc), buddy, 0, 0, 0, 0, 0);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1677
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1678 } else {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1679 if (gjid->resource) {
3259
d666b7b44145 [gaim-migrate @ 3277]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3257
diff changeset
1680 if (type && (!strcasecmp(type, "unavailable"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1681 struct jabber_data *jd;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1682 if (!jc && !(jc = find_existing_chat(GJ_GC(gjc), gjid))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1683 g_free(buddy);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1684 gaim_jid_free(gjid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1685 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1686 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1687 jd = jc->gc->proto_data;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1688 /* if it's not ourselves...*/
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1689 if (strcmp(gjid->resource, jc->gjid->resource) && jc->b) {
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1690 gaim_chat_remove_user(GAIM_CHAT(jc->b), gjid->resource,
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1691 NULL);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1692 g_free(buddy);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1693 gaim_jid_free(gjid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1694 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1695 }
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1696
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1697 jc->state = JCS_CLOSED;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1698 serv_got_chat_left(GJ_GC(gjc), jc->id);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1699 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1700 * TBD: put back some day?
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1701 jd->chats = g_slist_remove(jd->chats, jc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1702 g_free(jc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1703 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1704 } else {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1705 if ((!jc && !(jc = find_existing_chat(GJ_GC(gjc), gjid))) || !jc->b) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1706 g_free(buddy);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1707 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1708 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1709 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1710 if (!find_chat_buddy(jc->b, gjid->resource)) {
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents: 4357
diff changeset
1711 gaim_chat_add_user(GAIM_CHAT(jc->b), gjid->resource, NULL);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1712 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1713 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1714 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1715 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1716
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1717 g_free(buddy);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1718 gaim_jid_free(gjid);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1719
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1720 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1721 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1722
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1723 /*
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1724 * Used only by Jabber accept/deny add stuff just below
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1725 */
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1726 struct jabber_add_permit {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1727 GaimConnection *gc;
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1728 gchar *user;
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1729 };
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1730
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1731 /*
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1732 * Common part for Jabber accept/deny adds
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1733 *
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1734 * "type" says whether we'll permit/deny the subscribe request
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1735 */
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1736 static void jabber_accept_deny_add(struct jabber_add_permit *jap, const char *type)
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1737 {
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1738 xmlnode g = xmlnode_new_tag("presence");
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1739
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1740 xmlnode_put_attrib(g, "to", jap->user);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1741 xmlnode_put_attrib(g, "type", type);
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1742 gjab_send(GC_GJ(jap->gc), g);
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1743
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1744 xmlnode_free(g);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1745 }
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1746
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1747 /*
5498
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1748 * Callback from "accept" in gaim_request_action() invoked
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1749 * by jabber_handles10n()
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1750 */
3730
55e36c4e42f9 [gaim-migrate @ 3868]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1751 static void jabber_accept_add(struct jabber_add_permit *jap)
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1752 {
5578
31f6f8b5e24b [gaim-migrate @ 5982]
Christian Hammond <chipx86@chipx86.com>
parents: 5572
diff changeset
1753 if(g_list_find(gaim_connections_get_all(), jap->gc)) {
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1754 jabber_accept_deny_add(jap, "subscribed");
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1755 /*
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1756 * If we don't already have the buddy on *our* buddylist,
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1757 * ask if we want him or her added.
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1758 */
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
1759 if(gaim_find_buddy(jap->gc->account, jap->user) == NULL) {
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1760 show_got_added(jap->gc, NULL, jap->user, NULL, NULL);
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1761 }
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1762 }
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1763
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1764 g_free(jap->user);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1765 g_free(jap);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1766 }
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1767
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1768 /*
5498
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1769 * Callback from "deny/cancel" in gaim_request_action() invoked
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1770 * by jabber_handles10n()
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1771 */
3730
55e36c4e42f9 [gaim-migrate @ 3868]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1772 static void jabber_deny_add(struct jabber_add_permit *jap)
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1773 {
5578
31f6f8b5e24b [gaim-migrate @ 5982]
Christian Hammond <chipx86@chipx86.com>
parents: 5572
diff changeset
1774 if(g_list_find(gaim_connections_get_all(), jap->gc)) {
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1775 jabber_accept_deny_add(jap, "unsubscribed");
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1776 }
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1777
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1778 g_free(jap->user);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1779 g_free(jap);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1780 }
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1781
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1782 /*
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1783 * Handle subscription requests
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1784 */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1785 static void jabber_handles10n(gjconn gjc, jpacket p)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1786 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1787 xmlnode g;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1788 char *Jid = xmlnode_get_attrib(p->x, "from");
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1789 char *type = xmlnode_get_attrib(p->x, "type");
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1790
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1791 g = xmlnode_new_tag("presence");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1792 xmlnode_put_attrib(g, "to", Jid);
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1793
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1794 if (!strcmp(type, "subscribe")) {
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1795 /*
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1796 * A "subscribe to us" request was received - put up the approval dialog
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1797 */
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1798 struct jabber_add_permit *jap = g_new0(struct jabber_add_permit, 1);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1799 gchar *msg = g_strdup_printf(_("The user %s wants to add you to their buddy list."),
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1800 Jid);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1801
4249
62583b5d3663 [gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents: 4245
diff changeset
1802 jap->gc = GJ_GC(gjc);
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1803 jap->user = g_strdup(Jid);
5498
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1804
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1805 gaim_request_action(jap->gc, NULL, msg, NULL, 0, jap, 2,
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1806 _("Authorize"), G_CALLBACK(jabber_accept_add),
01eec144d71b [gaim-migrate @ 5894]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
1807 _("Deny"), G_CALLBACK(jabber_deny_add));
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1808
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1809 g_free(msg);
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1810 xmlnode_free(g); /* Never needed it here anyway */
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1811 return;
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1812
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1813 } else if (!strcmp(type, "unsubscribe")) {
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1814 /*
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1815 * An "unsubscribe to us" was received - simply "approve" it
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1816 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1817 xmlnode_put_attrib(g, "type", "unsubscribed");
3229
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1818 } else {
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1819 /*
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1820 * Did we attempt to subscribe to somebody and they do not exist?
ad46a5607172 [gaim-migrate @ 3246]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3203
diff changeset
1821 */
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1822 if (!strcmp(type, "unsubscribed")) {
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1823 xmlnode y;
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1824 char *status;
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1825 if((y = xmlnode_get_tag(p->x, "status")) && (status = xmlnode_get_data(y)) &&
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1826 !strcmp(status, "Not Found")) {
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
1827 char *msg = g_strdup_printf(_("The Jabber user %s does not exist and was therefore "
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
1828 "not added to your roster."),
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
1829 xmlnode_get_attrib(p->x, "from"));
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
1830 gaim_notify_error(GJ_GC(gjc), NULL, _("No such user."), msg);
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1831 g_free(msg);
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1832 }
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1833 }
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1834
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1835 xmlnode_free(g);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1836 return;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1837 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1838
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1839 gjab_send(gjc, g);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1840 xmlnode_free(g);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1841 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1842
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1843 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1844 * Pending subscription to a buddy?
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1845 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1846 #define BUD_SUB_TO_PEND(sub, ask) ((!strcasecmp((sub), "none") || !strcasecmp((sub), "from")) && \
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1847 (ask) != NULL && !strcasecmp((ask), "subscribe"))
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1848
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1849 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1850 * Subscribed to a buddy?
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1851 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1852 #define BUD_SUBD_TO(sub, ask) ((!strcasecmp((sub), "to") || !strcasecmp((sub), "both")) && \
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1853 ((ask) == NULL || !strcasecmp((ask), "subscribe")))
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1854
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1855 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1856 * Pending unsubscription to a buddy?
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1857 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1858 #define BUD_USUB_TO_PEND(sub, ask) ((!strcasecmp((sub), "to") || !strcasecmp((sub), "both")) && \
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1859 (ask) != NULL && !strcasecmp((ask), "unsubscribe"))
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1860
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1861 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1862 * Unsubscribed to a buddy?
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1863 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1864 #define BUD_USUBD_TO(sub, ask) ((!strcasecmp((sub), "none") || !strcasecmp((sub), "from")) && \
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1865 ((ask) == NULL || !strcasecmp((ask), "unsubscribe")))
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1866
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1867 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1868 * If a buddy is added or removed from the roster on another resource
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1869 * jabber_handlebuddy is called
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1870 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1871 * Called with roster item node.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1872 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1873 static void jabber_handlebuddy(gjconn gjc, xmlnode x)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1874 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1875 xmlnode g;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1876 char *who, *name, *sub, *ask;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1877 gaim_jid gjid;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1878 GaimBuddy *b = NULL;
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1879 struct jabber_buddy_data *jbd = NULL;
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1880 char *buddyname, *groupname = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1881
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1882 who = xmlnode_get_attrib(x, "jid");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1883 name = xmlnode_get_attrib(x, "name");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1884 sub = xmlnode_get_attrib(x, "subscription");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1885 ask = xmlnode_get_attrib(x, "ask");
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1886
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1887 if((buddyname = get_realwho(gjc, who, FALSE, &gjid)) == NULL)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1888 return;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1889
4705
cc6029a0379c [gaim-migrate @ 5016]
Nathan Walp <nwalp@pidgin.im>
parents: 4690
diff changeset
1890
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1891 /* JFIXME: jabber_handleroster() had a "FIXME: transport" at this
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1892 * equivilent point. So...
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1893 *
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1894 * We haven't done anything interesting to this point, so we'll
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1895 * violate Good Coding Structure here by simply bailing out.
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1896 */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1897 if(!gjid->user) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1898 g_free(buddyname);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1899 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1900 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1901 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
1902 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1903
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1904 if((g = xmlnode_get_tag(x, "group")) != NULL) {
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1905 groupname = xmlnode_get_data(g);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1906 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1907
3059
bd4d661482f5 [gaim-migrate @ 3073]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3048
diff changeset
1908 /*
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1909 * Add or remove a buddy? Change buddy's alias or group?
3059
bd4d661482f5 [gaim-migrate @ 3073]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3048
diff changeset
1910 */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1911 if (BUD_SUB_TO_PEND(sub, ask) || BUD_SUBD_TO(sub, ask)) {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
1912 if ((b = gaim_find_buddy(GJ_GC(gjc)->account, buddyname)) == NULL) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1913 GaimGroup *g;
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1914 b = gaim_buddy_new(GJ_GC(gjc)->account, buddyname, name);
6808
80523d03a013 [gaim-migrate @ 7348]
Nathan Walp <nwalp@pidgin.im>
parents: 6806
diff changeset
1915
80523d03a013 [gaim-migrate @ 7348]
Nathan Walp <nwalp@pidgin.im>
parents: 6806
diff changeset
1916 if(!groupname)
80523d03a013 [gaim-migrate @ 7348]
Nathan Walp <nwalp@pidgin.im>
parents: 6806
diff changeset
1917 groupname = _("Buddies");
80523d03a013 [gaim-migrate @ 7348]
Nathan Walp <nwalp@pidgin.im>
parents: 6806
diff changeset
1918
80523d03a013 [gaim-migrate @ 7348]
Nathan Walp <nwalp@pidgin.im>
parents: 6806
diff changeset
1919 if (!(g = gaim_find_group(groupname))) {
80523d03a013 [gaim-migrate @ 7348]
Nathan Walp <nwalp@pidgin.im>
parents: 6806
diff changeset
1920 g = gaim_group_new(groupname);
4775
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1921 gaim_blist_add_group(g, NULL);
239cb803fb1d [gaim-migrate @ 5095]
Mark Doliner <markdoliner@pidgin.im>
parents: 4745
diff changeset
1922 }
6808
80523d03a013 [gaim-migrate @ 7348]
Nathan Walp <nwalp@pidgin.im>
parents: 6806
diff changeset
1923
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1924 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
1925 "adding buddy [4]: %s\n", buddyname);
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1926 gaim_blist_add_buddy(b, NULL, g, NULL);
4349
a65175463a31 [gaim-migrate @ 4614]
Nathan Walp <nwalp@pidgin.im>
parents: 4333
diff changeset
1927 gaim_blist_save();
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1928 } else {
5264
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1929 gboolean save = FALSE;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1930 GaimGroup *c_grp = gaim_find_buddys_group(b);
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1931
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
1932 /*
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1933 * If the buddy's in a new group or his/her alias is changed...
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1934 */
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
1935 if(groupname && c_grp && strcmp(c_grp->name, groupname)) {
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1936 GaimGroup *g = gaim_find_group(groupname);
5264
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1937 if(!g) {
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1938 g = gaim_group_new(groupname);
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1939 gaim_blist_add_group(g, NULL);
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1940 }
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1941
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
1942 gaim_blist_add_buddy(b, NULL, g, NULL);
5264
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1943 save = TRUE;
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1944 }
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1945
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1946 if(name && (!b->alias || strcmp(b->alias, name))) {
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1947 gaim_blist_alias_buddy(b, name);
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1948 save = TRUE;
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1949 }
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1950
5b6b6c9de944 [gaim-migrate @ 5636]
Nathan Walp <nwalp@pidgin.im>
parents: 5236
diff changeset
1951 if(save)
4349
a65175463a31 [gaim-migrate @ 4614]
Nathan Walp <nwalp@pidgin.im>
parents: 4333
diff changeset
1952 gaim_blist_save();
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1953 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1954 } else if (BUD_USUB_TO_PEND(sub, ask) || BUD_USUBD_TO(sub, ask) || !strcasecmp(sub, "remove")) {
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
1955 jabber_remove_gaim_buddy(GJ_GC(gjc), buddyname);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1956 }
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
1957 if(b && (jbd = jabber_find_buddy(b->account->gc, buddyname, TRUE)) != NULL) {
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1958 jbd->subscription = JABBER_SUB_NONE;
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1959 if(!strcasecmp(sub, "to"))
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1960 jbd->subscription |= JABBER_SUB_TO;
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1961 else if(!strcasecmp(sub, "from"))
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1962 jbd->subscription |= JABBER_SUB_FROM;
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1963 else if(!strcasecmp(sub, "both"))
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1964 jbd->subscription |= JABBER_SUB_BOTH;
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1965
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1966 if(ask && !strcasecmp(ask, "subscribe"))
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1967 jbd->subscription |= JABBER_SUB_PENDING;
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
1968 }
3328
2b06941a811f [gaim-migrate @ 3346]
A Ho-seok Lee <alee@debian.org>
parents: 3314
diff changeset
1969
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1970 g_free(buddyname);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1971
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1972 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1973
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1974 static void jabber_handleroster(gjconn gjc, xmlnode querynode)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1975 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1976 xmlnode x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1977
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1978 x = xmlnode_get_firstchild(querynode);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1979 while (x) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1980 jabber_handlebuddy(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1981 x = xmlnode_get_nextsibling(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1982 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1983
5426
b9b571cd1e57 [gaim-migrate @ 5805]
Nathan Walp <nwalp@pidgin.im>
parents: 5393
diff changeset
1984 x = xmlnode_new_tag("presence");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1985 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1986 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1987 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1988
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1989 static void jabber_handleauthresp(gjconn gjc, jpacket p)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1990 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1991 if (jpacket_subtype(p) == JPACKET__RESULT) {
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
1992 if (xmlnode_has_children(p->x)) {
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
1993 xmlnode query = xmlnode_get_tag(p->x, "query");
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1994 gaim_connection_update_progress(GJ_GC(gjc), _("Authenticating"),
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
1995 4, JABBER_CONNECT_STEPS);
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
1996 if (!xmlnode_get_tag(query, "digest")) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1997 g_free(gjc->sid);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
1998 gjc->sid = NULL;
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
1999 }
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2000 gjab_auth(gjc);
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
2001 } else {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2002 gaim_debug(GAIM_DEBUG_INFO, "jabber", "auth success\n");
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2003
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2004 gaim_connection_set_state(GJ_GC(gjc), GAIM_CONNECTED);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2005 serv_finish_login(GJ_GC(gjc));
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2006
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2007 ((struct jabber_data *)GJ_GC(gjc)->proto_data)->did_import = TRUE;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2008
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2009 gjab_reqroster(gjc);
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
2010 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2011 } else {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2012 xmlnode xerr;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2013 char *errmsg = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2014 int errcode = 0;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2015
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2016 gaim_debug(GAIM_DEBUG_ERROR, "jabber", "auth failed\n");
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2017 xerr = xmlnode_get_tag(p->x, "error");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2018 if (xerr) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2019 char msg[BUF_LONG];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2020 errmsg = xmlnode_get_data(xerr);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2021 if (xmlnode_get_attrib(xerr, "code")) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2022 errcode = atoi(xmlnode_get_attrib(xerr, "code"));
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2023 g_snprintf(msg, sizeof(msg), "Error %d: %s", errcode, errmsg);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2024 } else
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2025 g_snprintf(msg, sizeof(msg), "%s", errmsg);
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2026 gaim_connection_error(GJ_GC(gjc), msg);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2027 } else {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2028 gaim_connection_error(GJ_GC(gjc), _("Unknown login error"));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2029 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2030 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2031 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2032
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2033 static void jabber_handleversion(gjconn gjc, xmlnode iqnode) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2034 xmlnode querynode, x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2035 char *id, *from;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2036 char os[1024];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2037 struct utsname osinfo;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2038
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2039 uname(&osinfo);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2040 g_snprintf(os, sizeof os, "%s %s %s", osinfo.sysname, osinfo.release, osinfo.machine);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2041
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2042 id = xmlnode_get_attrib(iqnode, "id");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2043 from = xmlnode_get_attrib(iqnode, "from");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2044
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2045 x = jutil_iqnew(JPACKET__RESULT, NS_VERSION);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2046
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2047 xmlnode_put_attrib(x, "to", from);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2048 xmlnode_put_attrib(x, "id", id);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2049 querynode = xmlnode_get_tag(x, "query");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2050 xmlnode_insert_cdata(xmlnode_insert_tag(querynode, "name"), PACKAGE, -1);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2051 xmlnode_insert_cdata(xmlnode_insert_tag(querynode, "version"), VERSION, -1);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2052 xmlnode_insert_cdata(xmlnode_insert_tag(querynode, "os"), os, -1);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2053
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2054 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2055
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2056 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2057 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2058
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2059 static void jabber_handletime(gjconn gjc, xmlnode iqnode) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2060 xmlnode querynode, x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2061 char *id, *from;
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2062 time_t now_t;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2063 struct tm *now;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2064 char buf[1024];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2065
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2066 time(&now_t);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2067 now = localtime(&now_t);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2068
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2069 id = xmlnode_get_attrib(iqnode, "id");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2070 from = xmlnode_get_attrib(iqnode, "from");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2071
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2072 x = jutil_iqnew(JPACKET__RESULT, NS_TIME);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2073
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2074 xmlnode_put_attrib(x, "to", from);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2075 xmlnode_put_attrib(x, "id", id);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2076 querynode = xmlnode_get_tag(x, "query");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2077
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2078 strftime(buf, 1024, "%Y%m%dT%T", now);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2079 xmlnode_insert_cdata(xmlnode_insert_tag(querynode, "utc"), buf, -1);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2080 strftime(buf, 1024, "%Z", now);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2081 xmlnode_insert_cdata(xmlnode_insert_tag(querynode, "tz"), buf, -1);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2082 strftime(buf, 1024, "%d %b %Y %T", now);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2083 xmlnode_insert_cdata(xmlnode_insert_tag(querynode, "display"), buf, -1);
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2084
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2085 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2087 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2088 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2089
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2090 struct jabber_xfer_data {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2091 struct g_url *url;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2092 GString *headers;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2093 gboolean newline;
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2094
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2095 char *iq_id;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2096
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2097 struct jabber_data *jd;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2098 };
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2099
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2100 static void jabber_xfer_init(GaimXfer *xfer)
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2101 {
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2102 struct jabber_xfer_data *data = xfer->data;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2103 gaim_xfer_start(xfer, -1, data->url->address, data->url->port);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2104 }
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2105
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2106 static void jabber_xfer_free(GaimXfer *xfer)
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2107 {
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2108 struct jabber_xfer_data *data = xfer->data;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2109 data->jd->file_transfers = g_slist_remove(data->jd->file_transfers, xfer);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2110
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2111 g_string_free(data->headers, TRUE);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2112 g_free(data->url);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2113 g_free(data->iq_id);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2114 g_free(data);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2115
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2116 xfer->data = NULL;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2117 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2118
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2119 static void jabber_xfer_end(GaimXfer *xfer)
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2120 {
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2121 struct jabber_xfer_data *data = xfer->data;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2122 xmlnode x;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2123
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2124 x = xmlnode_new_tag("iq");
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2125 xmlnode_put_attrib(x, "type", "result");
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2126 xmlnode_put_attrib(x, "to", xfer->who);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2127 xmlnode_put_attrib(x, "id", data->iq_id);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2128
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2129 gjab_send(data->jd->gjc, x);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2130
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2131 xmlnode_free(x);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2132
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2133 jabber_xfer_free(xfer);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2134 }
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2135
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2136 static void jabber_xfer_start(GaimXfer *xfer)
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2137 {
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2138 struct jabber_xfer_data *data = xfer->data;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2139 char *buf = g_strdup_printf("GET /%s HTTP/1.1\r\nHost: %s\r\n\r\n",
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2140 data->url->page, data->url->address);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2141 write(xfer->fd, buf, strlen(buf));
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2142 g_free(buf);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2143 }
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2144
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2145 static size_t jabber_xfer_read(char **buffer, GaimXfer *xfer) {
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2146 struct jabber_xfer_data *data = xfer->data;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2147 char test;
5435
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5432
diff changeset
2148 int size;
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2149
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2150 if(read(xfer->fd, &test, sizeof(test)) > 0) {
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2151 data->headers = g_string_append_c(data->headers, test);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2152 if(test == '\r')
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2153 return 0;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2154 if(test == '\n') {
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2155 if(data->newline) {
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2156 gchar *lenstr = strstr(data->headers->str, "Content-Length: ");
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2157 if(lenstr) {
5435
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5432
diff changeset
2158 sscanf(lenstr, "Content-Length: %d", &size);
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2159 gaim_xfer_set_size(xfer, size);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2160 }
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2161 gaim_xfer_set_read_fnc(xfer, NULL);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2162 return 0;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2163 } else
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2164 data->newline = TRUE;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2165 return 0;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2166 }
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2167 data->newline = FALSE;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2168 return 0;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2169 }
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2170 return 0;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2171 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2172
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2173 static void jabber_xfer_cancel_send(GaimXfer *xfer) {
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
2174 }
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
2175
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2176 static void jabber_xfer_cancel_recv(GaimXfer *xfer) {
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2177 struct jabber_xfer_data *data = xfer->data;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2178 xmlnode x,y;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2179
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2180 x = xmlnode_new_tag("iq");
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2181 xmlnode_put_attrib(x, "type", "error");
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2182 xmlnode_put_attrib(x, "to", xfer->who);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2183 xmlnode_put_attrib(x, "id", data->iq_id);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2184 y = xmlnode_insert_tag(x, "error");
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2185 /* FIXME: need to handle other kinds of errors here */
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2186 xmlnode_put_attrib(y, "code", "406");
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2187 xmlnode_insert_cdata(y, "File Transfer Refused", -1);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2188
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2189 gjab_send(data->jd->gjc, x);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2190
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2191 xmlnode_free(x);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2192
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2193 jabber_xfer_free(xfer);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2194 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2195
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2196 static void jabber_handleoob(gjconn gjc, xmlnode iqnode) {
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2197 struct jabber_xfer_data *xfer_data;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2198 struct jabber_data *jd = GJ_GC(gjc)->proto_data;
6240
0390b27fe09d [gaim-migrate @ 6734]
Christian Hammond <chipx86@chipx86.com>
parents: 6115
diff changeset
2199 GaimXfer *xfer;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2200 char *msg = NULL;
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2201 char *filename;
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2202 xmlnode querynode = xmlnode_get_tag(iqnode, "query");
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2203 xmlnode urlnode,descnode;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2204
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2205 if(!querynode)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2206 return;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2207 urlnode = xmlnode_get_tag(querynode, "url");
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2208 if(!urlnode)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2209 return;
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2210 descnode = xmlnode_get_tag(querynode, "desc");
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2211 if(descnode)
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2212 msg = xmlnode_get_data(descnode);
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2213
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2214 xfer_data = g_new0(struct jabber_xfer_data, 1);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2215 xfer_data->url = parse_url(xmlnode_get_data(urlnode));
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2216 xfer_data->jd = jd;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2217 xfer_data->headers = g_string_new("");
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2218 xfer_data->iq_id = g_strdup(xmlnode_get_attrib(iqnode, "id"));
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2219
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2220 xfer = gaim_xfer_new(GJ_GC(gjc)->account, GAIM_XFER_RECEIVE,
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2221 xmlnode_get_attrib(iqnode, "from"));
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2222 xfer->data = xfer_data;
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2223
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2224 filename = g_strdup(g_strrstr(xfer_data->url->page, "/"));
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2225 if(!filename)
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2226 filename = g_strdup(xfer_data->url->page);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2227
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2228 gaim_xfer_set_filename(xfer, filename);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2229
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2230 g_free(filename);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2231
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2232 gaim_xfer_set_init_fnc(xfer, jabber_xfer_init);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2233 gaim_xfer_set_end_fnc(xfer, jabber_xfer_end);
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
2234 gaim_xfer_set_cancel_send_fnc(xfer, jabber_xfer_cancel_send);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
2235 gaim_xfer_set_cancel_recv_fnc(xfer, jabber_xfer_cancel_recv);
4538
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2236 gaim_xfer_set_read_fnc(xfer, jabber_xfer_read);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2237 gaim_xfer_set_start_fnc(xfer, jabber_xfer_start);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2238
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2239 jd->file_transfers = g_slist_append(jd->file_transfers, xfer);
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2240
929fb97f4e7f [gaim-migrate @ 4817]
Nathan Walp <nwalp@pidgin.im>
parents: 4508
diff changeset
2241 gaim_xfer_request(xfer);
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2242 }
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2243
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2244 static void jabber_handlelast(gjconn gjc, xmlnode iqnode) {
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2245 xmlnode x, querytag;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2246 char *id, *from;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2247 struct jabber_data *jd = GJ_GC(gjc)->proto_data;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2248 char idle_time[32];
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2249
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2250 id = xmlnode_get_attrib(iqnode, "id");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2251 from = xmlnode_get_attrib(iqnode, "from");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2252
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2253 x = jutil_iqnew(JPACKET__RESULT, "jabber:iq:last");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2254
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2255 xmlnode_put_attrib(x, "to", from);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2256 xmlnode_put_attrib(x, "id", id);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2257 querytag = xmlnode_get_tag(x, "query");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2258 g_snprintf(idle_time, sizeof idle_time, "%ld", jd->idle ? time(NULL) - jd->idle : 0);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2259 xmlnode_put_attrib(querytag, "seconds", idle_time);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2260
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2261 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2262 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2263 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2264
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2265 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2266 * delete == TRUE: delete found entry
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2267 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2268 * returns pointer to (local) copy of value if found, NULL otherwise
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2269 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2270 * Note: non-reentrant! Local static storage re-used on subsequent calls.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2271 * If you're going to need to keep the returned value, make a copy!
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2272 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2273 static gchar *jabber_track_queries(GHashTable *queries, gchar *key, gboolean delete)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2274 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2275 gpointer my_key, my_val;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2276 static gchar *ret_val = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2277
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2278 if(ret_val != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2279 g_free(ret_val);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2280 ret_val = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2281 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2282
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2283 /* self-protection */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2284 if(queries != NULL && key != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2285 if(g_hash_table_lookup_extended(queries, key, &my_key, &my_val)) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2286 ret_val = g_strdup((gchar *) my_val);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2287 if(delete) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2288 g_hash_table_remove(queries, key);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2289 g_free(my_key);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2290 g_free(my_val);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2291 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2292 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2293 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2294
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2295 return(ret_val);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2296 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2297
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2298 static void jabber_handlepacket(gjconn gjc, jpacket p)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2299 {
5994
467738a90242 [gaim-migrate @ 6442]
Nathan Walp <nwalp@pidgin.im>
parents: 5957
diff changeset
2300 char *id, *from, *to;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2301 switch (p->type) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2302 case JPACKET_MESSAGE:
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2303 jabber_handlemessage(gjc, p);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2304 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2305 case JPACKET_PRESENCE:
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2306 jabber_handlepresence(gjc, p);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2307 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2308 case JPACKET_IQ:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2309 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2310 "jpacket_subtype: %d\n", jpacket_subtype(p));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2311
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2312 id = xmlnode_get_attrib(p->x, "id");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2313 if (id != NULL && !strcmp(id, IQID_AUTH)) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2314 jabber_handleauthresp(gjc, p);
2814
91cc1a0cdee0 [gaim-migrate @ 2827]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2800
diff changeset
2315 break;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2316 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2317
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2318 if (jpacket_subtype(p) == JPACKET__SET) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2319 xmlnode querynode;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2320 querynode = xmlnode_get_tag(p->x, "query");
5994
467738a90242 [gaim-migrate @ 6442]
Nathan Walp <nwalp@pidgin.im>
parents: 5957
diff changeset
2321 from = xmlnode_get_attrib(p->x, "from");
467738a90242 [gaim-migrate @ 6442]
Nathan Walp <nwalp@pidgin.im>
parents: 5957
diff changeset
2322 to = xmlnode_get_attrib(p->x, "to");
6004
308fc49759fe [gaim-migrate @ 6452]
Nathan Walp <nwalp@pidgin.im>
parents: 6003
diff changeset
2323 if (NSCHECK(querynode, "jabber:iq:roster") && (!from || !strcmp(from, to))) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2324 jabber_handlebuddy(gjc, xmlnode_get_firstchild(querynode));
3630
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2325 } else if(NSCHECK(querynode, "jabber:iq:oob")) {
caa952062dc2 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 3613
diff changeset
2326 jabber_handleoob(gjc, p->x);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2327 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2328 } else if (jpacket_subtype(p) == JPACKET__GET) {
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2329 xmlnode querynode;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2330 querynode = xmlnode_get_tag(p->x, "query");
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2331 if (NSCHECK(querynode, NS_VERSION)) {
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2332 jabber_handleversion(gjc, p->x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2333 } else if (NSCHECK(querynode, NS_TIME)) {
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2334 jabber_handletime(gjc, p->x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2335 } else if (NSCHECK(querynode, "jabber:iq:last")) {
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2336 jabber_handlelast(gjc, p->x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2337 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2338 } else if (jpacket_subtype(p) == JPACKET__RESULT) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2339 xmlnode querynode, vcard;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2340 char *xmlns, *from;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2341
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2342 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2343 * TBD: ISTM maybe this part could use a serious re-work?
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2344 */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2345 from = xmlnode_get_attrib(p->x, "from");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2346 querynode = xmlnode_get_tag(p->x, "query");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2347 vcard = xmlnode_get_tag(p->x, "vCard");
2316
aaa53535a131 [gaim-migrate @ 2326]
Nathan Walp <nwalp@pidgin.im>
parents: 2309
diff changeset
2348 if (!vcard)
aaa53535a131 [gaim-migrate @ 2326]
Nathan Walp <nwalp@pidgin.im>
parents: 2309
diff changeset
2349 vcard = xmlnode_get_tag(p->x, "VCARD");
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2350
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2351 if (NSCHECK(querynode, NS_ROSTER)) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2352 jabber_handleroster(gjc, querynode);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2353 } else if (NSCHECK(querynode, NS_VCARD)) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2354 jabber_track_queries(gjc->queries, id, TRUE); /* delete query track */
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2355 jabber_handlevcard(gjc, querynode, from);
2316
aaa53535a131 [gaim-migrate @ 2326]
Nathan Walp <nwalp@pidgin.im>
parents: 2309
diff changeset
2356 } else if (vcard) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2357 jabber_track_queries(gjc->queries, id, TRUE); /* delete query track */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2358 jabber_handlevcard(gjc, vcard, from);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2359 } else if((xmlns = xmlnode_get_attrib(querynode, "xmlns")) != NULL) {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2360 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2361 "jabber:iq:query: %s\n", xmlns);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2362 } else {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2363 char *val;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2364
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2365 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2366 "jabber:iq: %s\n", xmlnode2str(p->x));
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2367
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2368 /* handle "null" query results */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2369 if((val = jabber_track_queries(gjc->queries, id, TRUE)) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2370 if(strcmp((char *) val, "vCard") == 0) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2371 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2372 * No actual vCard, but there's other stuff. This
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2373 * way the user always gets some kind of response.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2374 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2375 jabber_handlevcard(gjc, NULL, from);
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
2376 } else if(!strcmp((char *) val, "change_password")) {
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
2377 char buf[BUF_LONG];
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2378 sprintf(buf, _("Password successfully changed."));
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
2379
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
2380 gaim_notify_info(GJ_GC(gjc), NULL, buf, NULL);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2381 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2382 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2383 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2384
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2385 } else if (jpacket_subtype(p) == JPACKET__ERROR) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2386 xmlnode xerr;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2387 char *from, *errmsg = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2388 int errcode = 0;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2389
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2390 from = xmlnode_get_attrib(p->x, "from");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2391 xerr = xmlnode_get_tag(p->x, "error");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2392 if (xerr) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2393 errmsg = xmlnode_get_data(xerr);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2394 if (xmlnode_get_attrib(xerr, "code"))
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2395 errcode = atoi(xmlnode_get_attrib(xerr, "code"));
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2396 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2397
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
2398 from = g_strdup_printf("Jabber Error %d (%s)", errcode, from);
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
2399 gaim_notify_error(GJ_GC(gjc), NULL, from, errmsg);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2400 g_free(from);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2401
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2402 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2403
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2404 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2405 case JPACKET_S10N:
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2406 jabber_handles10n(gjc, p);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2407 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2408 default:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2409 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2410 "jabber: packet type %d (%s)\n", p->type, xmlnode2str(p->x));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2411 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2412
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2413 xmlnode_free(p->x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2414
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2415 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2416 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2417
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2418 static void jabber_handlestate(gjconn gjc, int state)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2419 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2420 switch (state) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2421 case JCONN_STATE_OFF:
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
2422 if(gjc->was_connected) {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2423 gaim_connection_error(GJ_GC(gjc), _("Connection lost"));
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
2424 } else {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2425 gaim_connection_error(GJ_GC(gjc), _("Unable to connect"));
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
2426 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2427 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2428 case JCONN_STATE_CONNECTED:
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
2429 gjc->was_connected = 1;
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2430 gaim_connection_update_progress(GJ_GC(gjc), _("Connected"), 2, JABBER_CONNECT_STEPS);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2431 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2432 case JCONN_STATE_ON:
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2433 gaim_connection_update_progress(GJ_GC(gjc), _("Requesting Authentication Method"), 3, JABBER_CONNECT_STEPS);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2434 gjab_reqauth(gjc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2435 break;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2436 default:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2437 gaim_debug(GAIM_DEBUG_MISC, "jabber", "state change: %d\n", state);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2438 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2439 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2440 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2441
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2442 static void jabber_login(GaimAccount *account)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2443 {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2444 GaimConnection *gc = gaim_account_get_connection(account);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2445 struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1);
4917
97bf38cec756 [gaim-migrate @ 5251]
Sean Egan <seanegan@pidgin.im>
parents: 4916
diff changeset
2446 char *loginname = create_valid_jid(account->username, DEFAULT_SERVER, "Gaim");
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2447
6622
277eb0b14653 [gaim-migrate @ 7146]
Robert McQueen <robot101@debian.org>
parents: 6581
diff changeset
2448 gc->flags |= GAIM_CONNECTION_HTML;
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
2449
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2450 jd->buddies = g_hash_table_new(g_str_hash, g_str_equal);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2451 jd->chats = NULL; /* we have no chats yet */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2452
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2453 gaim_connection_update_progress(gc, _("Connecting"), 1, JABBER_CONNECT_STEPS);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2454
4491
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
2455 if (!(jd->gjc = gjab_new(loginname, account->password, gc))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2456 g_free(loginname);
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2457 gaim_debug(GAIM_DEBUG_ERROR, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2458 "unable to connect (jab_new failed)\n");
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2459 gaim_connection_error(gc, _("Unable to connect"));
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2460 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2461 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2462
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2463 g_free(loginname);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2464 gjab_state_handler(jd->gjc, jabber_handlestate);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2465 gjab_packet_handler(jd->gjc, jabber_handlepacket);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2466 jd->gjc->queries = g_hash_table_new(g_str_hash, g_str_equal);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2467 gjab_start(jd->gjc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2468 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2469
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2470 static gboolean jabber_destroy_hash(gpointer key, gpointer val, gpointer data) {
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2471 g_free(key);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2472 g_free(val);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2473 return TRUE;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2474 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2475
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2476 static gboolean jabber_destroy_buddy_hash(gpointer key, gpointer val, gpointer data) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2477 struct jabber_buddy_data *jbd = val;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2478 while (jbd->resources) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2479 g_free(((jab_res_info) ((GSList *)jbd->resources)->data)->name);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2480 if(((jab_res_info) ((GSList *)jbd->resources)->data)->away_msg)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2481 g_free(((jab_res_info) ((GSList *)jbd->resources)->data)->away_msg);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2482 g_free(((GSList *)jbd->resources)->data);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2483 jbd->resources = g_slist_remove(jbd->resources, ((GSList *)jbd->resources)->data);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2484
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2485 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2486 if(jbd->error_msg)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2487 g_free(jbd->error_msg);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2488 g_free(key);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2489 g_free(jbd);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2490 return TRUE;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2491 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2492
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2493
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2494 static gboolean jabber_free(gpointer data)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2495 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2496 struct jabber_data *jd = data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2497
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
2498 if(jd->gjc != NULL) {
3486
7bf1f9a7aba7 [gaim-migrate @ 3542]
Craig Boston
parents: 3466
diff changeset
2499 g_free(jd->gjc->sid);
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
2500 gjab_delete(jd->gjc);
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
2501 jd->gjc = NULL;
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
2502 }
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2503 g_free(jd);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2504
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2505 return FALSE;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2506 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2507
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2508 static void jabber_close(GaimConnection *gc)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2509 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2510 struct jabber_data *jd = gc->proto_data;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2511
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2512 if(jd) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2513 GSList *jcs = jd->chats;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2514
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2515 /* Free-up the jabber_chat struct allocs and the list */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2516 while (jcs) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2517 gaim_jid_free(((struct jabber_chat *)jcs->data)->gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2518 g_free(jcs->data);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2519 jcs = jcs->next;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2520 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2521 g_slist_free(jd->chats);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2522
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2523 /* Free-up the buddy data hash */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2524 if(jd->buddies != NULL)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2525 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2526 g_hash_table_foreach_remove(jd->buddies, jabber_destroy_buddy_hash, NULL);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2527 g_hash_table_destroy(jd->buddies);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2528 jd->buddies = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2529 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2530
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2531 /* Free-up the pending queries memories and the list */
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
2532 if(jd->gjc != NULL && jd->gjc->queries != NULL) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2533 g_hash_table_foreach_remove(jd->gjc->queries, jabber_destroy_hash, NULL);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2534 g_hash_table_destroy(jd->gjc->queries);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2535 jd->gjc->queries = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2536 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2537 }
2300
06a3c10f4918 [gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2289
diff changeset
2538 if (gc->inpa)
06a3c10f4918 [gaim-migrate @ 2310]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2289
diff changeset
2539 gaim_input_remove(gc->inpa);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2540
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2541 if(jd) {
3613
06d2b28f4eec [gaim-migrate @ 3727]
Nathan Walp <nwalp@pidgin.im>
parents: 3596
diff changeset
2542 g_timeout_add(0, jabber_free, jd);
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
2543 if(jd->gjc != NULL)
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
2544 xmlnode_free(jd->gjc->current);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2545 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2546 gc->proto_data = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2547 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2548
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
2549 static int jabber_send_typing(GaimConnection *gc, const char *who, int typing)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2550 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2551 xmlnode x, y;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2552 char *realwho;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2553 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2554 jab_res_info jri = jabber_find_resource(gc, who);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2555
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2556 if(!jri || !jri->has_composing)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2557 return 0;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2558
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2559 if((realwho = get_realwho(gjc, who, FALSE, NULL)) == NULL)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2560 return 0;
3596
94fcf584c358 [gaim-migrate @ 3698]
Mark Doliner <markdoliner@pidgin.im>
parents: 3583
diff changeset
2561
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2562 x = xmlnode_new_tag("message");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2563 xmlnode_put_attrib(x, "to", realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2564
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2565 y = xmlnode_insert_tag(x, "x");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2566 xmlnode_put_attrib(y, "xmlns", "jabber:x:event");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2567
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5685
diff changeset
2568 if(typing == GAIM_TYPING)
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2569 xmlnode_insert_tag(y, "composing");
3596
94fcf584c358 [gaim-migrate @ 3698]
Mark Doliner <markdoliner@pidgin.im>
parents: 3583
diff changeset
2570
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2571 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2572 xmlnode_free(x);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2573 g_free(realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2574 return JABBER_TYPING_NOTIFY_INT;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2575 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2576
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2577 static void insert_message(xmlnode x, const char *message, gboolean use_xhtml) {
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2578 xmlnode y;
5110
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2579 char *buf = g_strdup_printf("<html xmlns='http://jabber.org/protocol/xhtml-im'><body>%s</body></html>", message);
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2580 char *xhtml, *plain;
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2581
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2582 html_to_xhtml(buf, &xhtml, &plain);
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2583 g_free(buf);
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2584
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2585 y = xmlnode_insert_tag(x, "body");
5110
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2586 xmlnode_insert_cdata(y, plain, -1);
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2587 g_free(plain);
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2588
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2589 if(use_xhtml) {
5110
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2590 y = xmlnode_str(xhtml, strlen(xhtml));
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2591 if(y) {
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2592 xmlnode_insert_tag_node(x, y);
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2593 xmlnode_free(y);
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2594 } else {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2595 gaim_debug(GAIM_DEBUG_ERROR, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2596 "holy cow, html_to_xhtml didn't work right!\n");
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2597 gaim_debug(GAIM_DEBUG_ERROR, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
2598 "the invalid XML: %s\n", xhtml);
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2599 }
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2600 }
5110
2e1babcc6a07 [gaim-migrate @ 5473]
Nathan Walp <nwalp@pidgin.im>
parents: 5093
diff changeset
2601 g_free(xhtml);
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2602 }
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2603
6622
277eb0b14653 [gaim-migrate @ 7146]
Robert McQueen <robot101@debian.org>
parents: 6581
diff changeset
2604 static int jabber_send_im(GaimConnection *gc, const char *who, const char *message, int len, GaimImFlags flags)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2605 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2606 xmlnode x, y;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2607 char *thread_id = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2608 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2609 jab_res_info jri = jabber_find_resource(gc, who);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2610
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2611 if (!who || !message)
2123
4cfdde0aa3f1 [gaim-migrate @ 2133]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2112
diff changeset
2612 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2613
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2614 x = xmlnode_new_tag("message");
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
2615 xmlnode_put_attrib(x, "to", who);
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
2616
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
2617 thread_id = jabber_get_convo_thread(gjc, who);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2618 if(thread_id)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2619 {
3769
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
2620 if(strcmp(thread_id, "")) {
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
2621 y = xmlnode_insert_tag(x, "thread");
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
2622 xmlnode_insert_cdata(y, thread_id, -1);
f607dde89e0d [gaim-migrate @ 3908]
Nathan Walp <nwalp@pidgin.im>
parents: 3768
diff changeset
2623 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2624 g_free(thread_id);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2625 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2626
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2627 xmlnode_put_attrib(x, "type", "chat");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2628
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2629 /* let other clients know we support typing notification */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2630 y = xmlnode_insert_tag(x, "x");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2631 xmlnode_put_attrib(y, "xmlns", "jabber:x:event");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2632 xmlnode_insert_tag(y, "composing");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2633
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2634 if (message && strlen(message)) {
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
2635 insert_message(x, message, jri ? jri->has_xhtml : TRUE);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2636 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2637
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2638 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2639 xmlnode_free(x);
2303
18171aa8cd37 [gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2300
diff changeset
2640 return 1;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2641 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2642
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2643 /*
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2644 * Add/update buddy's roster entry on server
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2645 *
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2646 * If "alias" or "group" are NULL, gets them from Gaim's current buddylist values
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2647 * for the buddy.
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2648 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2649 static void jabber_roster_update(GaimConnection *gc, const char *name, const char *alias, const char *group)
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2650 {
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2651 xmlnode x, y;
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2652 char *realwho;
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2653 gjconn gjc;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2654 GaimBuddy *buddy = NULL;
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2655 GaimGroup *buddy_group = NULL;
3867
0e747b4295cb [gaim-migrate @ 4019]
Rob Flynn <gaim@robflynn.com>
parents: 3770
diff changeset
2656 const char *my_alias = NULL;
0e747b4295cb [gaim-migrate @ 4019]
Rob Flynn <gaim@robflynn.com>
parents: 3770
diff changeset
2657 const char *my_group = NULL;
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
2658
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2659 if(gc && gc->proto_data && ((struct jabber_data *)gc->proto_data)->gjc && name) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2660 gaim_jid gjid;
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2661 gjc = ((struct jabber_data *)gc->proto_data)->gjc;
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2662
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2663 if((realwho = get_realwho(gjc, name, FALSE, &gjid)) == NULL)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2664 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2665
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2666 /* FIXME: transport */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2667 if(gjid->user == NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2668 g_free(realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2669 gaim_jid_free(gjid);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2670 return;
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2671 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2672 gaim_jid_free(gjid);
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2673
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2674 x = jutil_iqnew(JPACKET__SET, NS_ROSTER);
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2675 y = xmlnode_insert_tag(xmlnode_get_tag(x, "query"), "item");
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2676 xmlnode_put_attrib(y, "jid", realwho);
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2677
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
2678 buddy = gaim_find_buddy(gc->account, realwho);
4349
a65175463a31 [gaim-migrate @ 4614]
Nathan Walp <nwalp@pidgin.im>
parents: 4333
diff changeset
2679
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2680 /*
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2681 * See if there's an explict (new?) alias for the buddy or we can pull
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2682 * one out of current Gaim buddylist data for him.
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2683 */
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2684 if(alias && alias[0] != '\0') {
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2685 my_alias = alias;
4705
cc6029a0379c [gaim-migrate @ 5016]
Nathan Walp <nwalp@pidgin.im>
parents: 4690
diff changeset
2686 } else if(buddy && buddy->alias) {
4227
5f98b16ed21c [gaim-migrate @ 4471]
Nathan Walp <nwalp@pidgin.im>
parents: 4115
diff changeset
2687 my_alias = buddy->alias;
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2688 }
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2689
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2690 /* If there's an alias for the buddy, it's not 0-length
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2691 * and it doesn't match his JID, add the "name" attribute.
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2692 */
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2693 if(my_alias != NULL && my_alias[0] != '\0' && strcmp(realwho, my_alias))
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2694 {
3642
707a07e64ea3 [gaim-migrate @ 3766]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
2695 xmlnode_put_attrib(y, "name", my_alias);
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2696 }
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2697
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2698 /*
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2699 * See if there's an explict (new?) group for the buddy or pull
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2700 * one out of current Gaim buddylist data for him.
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2701 */
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2702 if(group && group[0] != '\0') {
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2703 my_group = group;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
2704 } else if((buddy_group = gaim_find_buddys_group(buddy)) != NULL) {
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2705 my_group = buddy_group->name;
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2706 }
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2707
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2708 /*
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2709 * Send what group the buddy's in along with the roster item.
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2710 */
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2711 if(my_group != NULL && my_group[0] != '\0') {
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2712 xmlnode z = xmlnode_insert_tag(y, "group");
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2713 xmlnode_insert_cdata(z, my_group, -1);
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2714 }
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2715
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2716 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2717
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2718 xmlnode_free(x);
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2719 g_free(realwho);
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2720 }
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2721 }
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2722
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
2723 /*
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2724 * Add/update buddy's alias on server
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2725 *
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2726 * This is just a roster update using existing, local buddylist data
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2727 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2728 static void jabber_alias_buddy(GaimConnection *gc, const char *name, const char *alias)
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2729 {
4269
c716bd9eee3c [gaim-migrate @ 4520]
Mark Doliner <markdoliner@pidgin.im>
parents: 4249
diff changeset
2730 jabber_roster_update(gc, name, alias, NULL);
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2731 }
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2732
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2733 /*
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
2734 * Change buddy's group on server roster
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
2735 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2736 static void jabber_group_change(GaimConnection *gc, const char *name, const char *old_group, const char *new_group)
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
2737 {
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2738 if(old_group && new_group && strcmp(old_group, new_group))
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2739 jabber_roster_update(gc, name, NULL, new_group);
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2740 }
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2741
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2742 /*
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2743 * Group rename
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2744 *
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2745 * Jabber doesn't have "groups," per se. "Group" is simply a JID attribute.
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2746 * So we iterate through the list of buddies that are in the group and change
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2747 * the group attribute for each of them.
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2748 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2749 static void jabber_rename_group(GaimConnection *gc,
3867
0e747b4295cb [gaim-migrate @ 4019]
Rob Flynn <gaim@robflynn.com>
parents: 3770
diff changeset
2750 const char *old_group,
0e747b4295cb [gaim-migrate @ 4019]
Rob Flynn <gaim@robflynn.com>
parents: 3770
diff changeset
2751 const char *new_group,
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2752 GList *members)
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2753 {
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2754 if(old_group && new_group && strcmp(old_group, new_group))
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2755 while(members) {
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2756 jabber_group_change(gc, (char *)(members->data), old_group, new_group);
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2757 members = members->next;
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2758 }
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
2759 }
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
2760
6787
7d8e0ba98f68 [gaim-migrate @ 7326]
Christian Hammond <chipx86@chipx86.com>
parents: 6768
diff changeset
2761 static void jabber_add_buddy(GaimConnection *gc, const char *name, GaimGroup *group)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2762 {
3136
8d988a6d2f4c [gaim-migrate @ 3151]
Rob Flynn <gaim@robflynn.com>
parents: 3105
diff changeset
2763 xmlnode x;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2764 char *realwho;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2765 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2766 gaim_jid gjid;
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2767 GaimAccount *account = gaim_connection_get_account(gc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2768
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2769 if (!((struct jabber_data *)gc->proto_data)->did_import)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2770 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2771
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2772 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2773 * If there's no name or the name is ourself
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2774 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2775 if(!name || !strcmp(gaim_account_get_username(account), name))
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2776 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2777
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2778 if((realwho = get_realwho(gjc, name, FALSE, &gjid)) == NULL) {
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
2779 char *msg = g_strdup_printf(_("The user %s is an invalid Jabber I.D. and was "
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
2780 "therefore not added."), name);
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
2781 gaim_notify_error(gc, NULL, _("Unable to add buddy."),
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
2782 _("Jabber Error"));
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2783 g_free(msg);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2784 jabber_remove_gaim_buddy(gc, name);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2785 return;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2786 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2787
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2788 /* FIXME: transport */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2789 if(gjid->user == NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2790 g_free(realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2791 gaim_jid_free(gjid);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2792 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2793 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2794 gaim_jid_free(gjid);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2795
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2796 x = xmlnode_new_tag("presence");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2797 xmlnode_put_attrib(x, "to", realwho);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2798 xmlnode_put_attrib(x, "type", "subscribe");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2799 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2800 xmlnode_free(x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2801
3349
82d6463648fa [gaim-migrate @ 3368]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3340
diff changeset
2802 jabber_roster_update(gc, realwho, NULL, NULL);
3105
8c23b0ec1036 [gaim-migrate @ 3119]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3074
diff changeset
2803
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2804 g_free(realwho);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2805 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2806
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
2807 static void jabber_remove_buddy(GaimConnection *gc, const char *name, const char *group)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2808 {
3048
22ccf641f97b [gaim-migrate @ 3061]
Sean Egan <seanegan@pidgin.im>
parents: 3033
diff changeset
2809 xmlnode x;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2810 char *realwho;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2811 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2812
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
2813 if(!name || (realwho = get_realwho(gjc, name, FALSE, NULL)) == NULL)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2814 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2815
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2816 x = xmlnode_new_tag("presence");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2817 xmlnode_put_attrib(x, "to", realwho);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2818 xmlnode_put_attrib(x, "type", "unsubscribe");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2819 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2820 g_free(realwho);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2821 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2822 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2823
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2824 #if 0 /* Faceprint! Look here! */
3314
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2825 /*
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2826 * Remove a buddy item from the roster entirely
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2827 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2828 static void jabber_remove_buddy_roster_item(GaimConnection *gc, char *name)
3314
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2829 {
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2830 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
3314
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2831 char *realwho;
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2832
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2833 if((realwho = get_realwho(gjc, name, FALSE, NULL)) != NULL) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2834 xmlnode x = jutil_iqnew(JPACKET__SET, NS_ROSTER);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2835 xmlnode y = xmlnode_insert_tag(xmlnode_get_tag(x, "query"), "item");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2836 xmlnode_put_attrib(y, "jid", realwho);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2837 xmlnode_put_attrib(y, "subscription", "remove");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2838 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2839 g_free(realwho);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2840 xmlnode_free(x);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2841 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2842 }
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2843 #endif
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2844
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2845 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2846 * Unsubscribe a buddy from our presence
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2847 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2848 static void jabber_unsubscribe_buddy_from_us(GaimConnection *gc, const char *name)
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2849 {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2850 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2851 char *realwho;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2852
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2853 if((realwho = get_realwho(gjc, name, FALSE, NULL)) != NULL) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2854 xmlnode g = xmlnode_new_tag("presence");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2855 xmlnode_put_attrib(g, "to", realwho);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2856 xmlnode_put_attrib(g, "type", "unsubscribed");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2857 gjab_send(gjc, g);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2858 xmlnode_free(g);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2859 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2860 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2861
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2862 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2863 * Common code for setting ourselves invisible/visible to buddy
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2864 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2865 static void jabber_invisible_to_buddy_common(GaimConnection *gc, const char *name, gboolean invisible)
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2866 {
3314
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2867 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2868 char *realwho;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2869
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2870 if((realwho = get_realwho(gjc, name, FALSE, NULL)) != NULL) {
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2871 struct jabber_buddy_data *jbd = jabber_find_buddy(gc, realwho, TRUE);
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2872 xmlnode g = xmlnode_new_tag("presence");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2873
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2874 xmlnode_put_attrib(g, "to", realwho);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2875
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2876 if(invisible)
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2877 xmlnode_put_attrib(g, "type", "invisible");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2878
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2879 gjab_send(gjc, g);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2880
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2881 g_free(realwho);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2882 xmlnode_free(g);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2883
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2884 if(jbd) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2885 if(invisible) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2886 jbd->invisible |= JABBER_BUD_INVIS;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2887 } else {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2888 jbd->invisible &= ~JABBER_BUD_INVIS;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2889 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2890 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2891 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2892 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2893
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2894 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2895 * Make ourselves temporarily invisible to a buddy
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2896 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2897 static void jabber_invisible_to_buddy(GaimConnection *gc, const char *name)
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2898 {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2899 jabber_invisible_to_buddy_common(gc, name, TRUE);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2900 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2901
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2902 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2903 * Make ourselves visible to a buddy
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2904 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2905 static void jabber_visible_to_buddy(GaimConnection *gc, const char *name)
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2906 {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2907 jabber_invisible_to_buddy_common(gc, name, FALSE);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2908 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2909
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2910 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2911 * Function used by the g_hash_table_foreach() in invisible_to_all_buddies() to
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2912 * actually set the status.
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2913 *
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2914 * key is unused
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2915 * value is the pointer to the jabber_buddy_data struct
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2916 * data is gboolean: TRUE (invisible) or FALSE (not invisible)
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2917 */
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2918 static void set_invisible_to_buddy_status(gpointer key, gpointer val, gpointer data) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2919 struct jabber_buddy_data *jbd = val;
6478
2c3fe7c8659b [gaim-migrate @ 6991]
Robert McQueen <robot101@debian.org>
parents: 6371
diff changeset
2920 gboolean invisible = GPOINTER_TO_INT(data);
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2921
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2922 if(jbd) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2923 if(invisible) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2924 jbd->invisible = JABBER_SERV_INVIS | JABBER_BUD_INVIS;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2925 } else {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2926 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2927 * If we've asserted server-level invisibility, cancelling
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2928 * it removes explicit buddy invisibility settings too.
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2929 */
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2930 if(jbd->invisible & JABBER_SERV_INVIS)
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2931 jbd->invisible = JABBER_NOT_INVIS;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2932 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2933 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2934 }
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2935
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2936 /*
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2937 * Show we've set ourselves invisible/visible to all buddies on the server
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2938 *
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2939 * Used when we set server-wide invisibility so that individual buddy menu
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2940 * entries show the proper option.
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2941 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2942 static void invisible_to_all_buddies(GaimConnection *gc, gboolean invisible)
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2943 {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2944 struct jabber_data *jd = gc->proto_data;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2945
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
2946 if(jd->buddies != NULL)
6478
2c3fe7c8659b [gaim-migrate @ 6991]
Robert McQueen <robot101@debian.org>
parents: 6371
diff changeset
2947 g_hash_table_foreach(jd->buddies, set_invisible_to_buddy_status, GINT_TO_POINTER(invisible));
3314
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2948 }
12fa45677717 [gaim-migrate @ 3332]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3311
diff changeset
2949
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2950 static const char *jabber_list_icon(GaimAccount *a, GaimBuddy *b)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2951 {
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
2952 return "jabber";
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
2953 }
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2954
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
2955 static void jabber_list_emblems(GaimBuddy *b, char **se, char **sw, char **nw, char **ne)
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2956 {
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2957 struct jabber_buddy_data *jbd = jabber_find_buddy(b->account->gc, b->name, FALSE);
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2958
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2959 if(!GAIM_BUDDY_IS_ONLINE(b)) {
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2960 if (jbd && jbd->error_msg)
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
2961 *nw = "error";
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2962
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2963 if(jbd && (jbd->subscription & JABBER_SUB_PENDING ||
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2964 !(jbd->subscription & JABBER_SUB_TO)))
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2965 *se = "notauthorized";
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2966 else
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2967 *se = "offline";
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
2968
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2969 } else {
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2970 switch (b->uc) {
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2971 case UC_AWAY:
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2972 *se = "away";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2973 break;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2974 case UC_CHAT:
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2975 *se = "chat";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2976 break;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2977 case UC_XA:
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2978 *se = "extendedaway";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2979 break;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2980 case UC_DND:
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2981 *se = "dnd";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2982 break;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2983 case UC_ERROR:
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2984 *se = "error";
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2985 break;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2986 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2987 }
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
2988 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2989
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
2990 static GList *jabber_chat_info(GaimConnection *gc)
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
2991 {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2992 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2993
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2994 static char *confserv = NULL; /* this pointer must be persistent */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
2995 gchar *server;
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
2996
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
2997 GList *m = NULL;
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
2998 struct proto_chat_entry *pce;
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
2999
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3000 /* This is a scientific wild-ass guess...
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3001 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3002 * If there are more than two "components" to the current server name,
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3003 * lop-off the left-most component and replace with "conference."
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3004 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3005 if(confserv != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3006 g_free(confserv); /* dispose of the old value */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3007 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3008
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3009 if((server = g_strdup(gjc->user->server)) == NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3010 confserv = g_strdup(DEFAULT_GROUPCHAT);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3011 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3012 gchar **splits, **index;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3013 gchar *tmp;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3014 int cnt = 0;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3015
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3016
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3017 index = splits = g_strsplit(server, ".", -1); /* split the connected server */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3018
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3019 while(*(index++)) /* index to the end--counting the parts */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3020 ++cnt;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3021
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3022 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3023 * If we've more than two parts, point to the second part. Else point
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3024 * to the start.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3025 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3026 if(cnt > 2) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3027 index -= cnt;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3028 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3029 index = splits;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3030 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3031
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3032 /* Put it together */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3033 confserv = g_strjoin(".", "conference", (tmp = g_strjoinv(".", index)), NULL);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3034
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3035 g_free(server); /* we don't need this stuff no more */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3036 g_free(tmp);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3037 g_strfreev(splits);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3038 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3039
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3040 pce = g_new0(struct proto_chat_entry, 1);
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3041 pce->label = _("Room:");
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3042 pce->identifier = "room";
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3043 m = g_list_append(m, pce);
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3044
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3045 pce = g_new0(struct proto_chat_entry, 1);
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3046 pce->label = _("Server:");
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3047 pce->identifier = "server";
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3048 pce->def = confserv;
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3049 m = g_list_append(m, pce);
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3050
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3051 pce = g_new0(struct proto_chat_entry, 1);
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3052 pce->label = _("Handle:");
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3053 pce->identifier = "handle";
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3054 pce->def = gjc->user->user;
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3055 m = g_list_append(m, pce);
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3056
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3057 return m;
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3058 }
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3059
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3060 static void jabber_join_chat(GaimConnection *gc, GHashTable *data)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3061 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3062 xmlnode x;
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3063 char *room, *server, *handle;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3064 char *realwho;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3065 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3066 GSList *jcs = ((struct jabber_data *)gc->proto_data)->chats;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3067 struct jabber_chat *jc;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3068 gaim_jid gjid;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3069
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3070 room = g_hash_table_lookup(data, "room");
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3071 server = g_hash_table_lookup(data, "server");
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3072 handle = g_hash_table_lookup(data, "handle");
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3073
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3074 if (!room || !server || !handle)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3075 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3076
5234
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3077 realwho = create_valid_jid(room, server, handle);
8320a1cb0274 [gaim-migrate @ 5604]
Nathan Walp <nwalp@pidgin.im>
parents: 5223
diff changeset
3078 gaim_debug(GAIM_DEBUG_INFO, "jabber", "%s\n", realwho);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3079
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3080 if((gjid = gaim_jid_new(realwho)) == NULL) {
3427
75387df65a9b [gaim-migrate @ 3453]
Sean Egan <seanegan@pidgin.im>
parents: 3349
diff changeset
3081 char *msg = g_strdup_printf("The Jabber I.D. %s is invalid.", realwho);
5436
a0e0bacaa196 [gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents: 5435
diff changeset
3082 gaim_notify_error(gc, NULL, _("Unable to join chat"), msg);
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
3083 g_free(msg);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3084 g_free(realwho);
3236
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
3085 return;
1507dc2b5719 [gaim-migrate @ 3253]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3234
diff changeset
3086 }
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3087
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3088 if((jc = find_any_chat(gc, gjid)) != NULL) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3089 switch(jc->state) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3090 case JCS_PENDING:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3091 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3092 "attempt to re-join already pending Jabber chat! (ignoring)\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3093 g_free(realwho); /* yuck! */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3094 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3095 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3096 case JCS_ACTIVE:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3097 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3098 "attempt to re-join already active Jabber chat! (ignoring)\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3099 g_free(realwho); /* yuck! */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3100 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3101 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3102 case JCS_CLOSED:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3103 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3104 "rejoining previously closed Jabber chat\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3105 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3106 default:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3107 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3108 "found Jabber chat in unknown state! (ignoring)\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3109 g_free(realwho); /* yuck! */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3110 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3111 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3112 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3113 } else {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3114 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3115 "joining completely new Jabber chat\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3116 jc = g_new0(struct jabber_chat, 1);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3117 jc->gjid = gjid;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3118 jc->gc = gc;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3119 ((struct jabber_data *)gc->proto_data)->chats = g_slist_append(jcs, jc);
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4675
diff changeset
3120 // add_buddy(gc->account, _("Chats"), realwho, realwho);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3121 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3122
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3123 jc->state = JCS_PENDING;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3124
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3125 x = jutil_presnew(0, realwho, NULL);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3126 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3127 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3128 g_free(realwho);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3129 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3130
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3131 static void jabber_chat_invite(GaimConnection *gc, int id, const char *message, const char *name)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3132 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3133 xmlnode x, y;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3134 struct jabber_data *jd = gc->proto_data;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3135 gjconn gjc = jd->gjc;
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3136 struct jabber_chat *jc = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3137 char *realwho, *subject;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3138
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3139 if(!name || (realwho = get_realwho(gjc, name, FALSE, NULL)) == NULL)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3140 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3141
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3142 /* find which chat we're inviting to */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3143 if(jabber_find_chat_by_convo_id(gc, id, &jc) != 0)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3144 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3145
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3146 x = xmlnode_new_tag("message");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3147 xmlnode_put_attrib(x, "to", realwho);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3148
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3149 g_free(realwho);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3150
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3151 y = xmlnode_insert_tag(x, "x");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3152 xmlnode_put_attrib(y, "xmlns", "jabber:x:conference");
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3153 subject = g_strdup_printf("%s@%s", jc->gjid->user, jc->gjid->server);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3154 xmlnode_put_attrib(y, "jid", subject);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3155 g_free(subject);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3156
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3157 if (message && strlen(message)) {
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
3158 insert_message(x, message, FALSE);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3159 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3160
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3161 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3162 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3163 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3164
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3165 static void jabber_chat_leave(GaimConnection *gc, int id)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3166 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3167 struct jabber_data *jd = gc->proto_data;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3168 gjconn gjc = jd->gjc;
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3169 struct jabber_chat *jc = NULL;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3170 char *chatname;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3171 xmlnode x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3172
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3173 /* Find out which chat we're leaving */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3174 if(jabber_find_chat_by_convo_id(gc, id, &jc) != 0)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3175 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3176
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3177 chatname = g_strdup_printf("%s@%s", jc->gjid->user, jc->gjid->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3178 x = jutil_presnew(0, chatname, NULL);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3179 g_free(chatname);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3180 xmlnode_put_attrib(x, "type", "unavailable");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3181 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3182 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3183 jc->b = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3184 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3185
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
3186 static int jabber_chat_send(GaimConnection *gc, int id, const char *message)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3187 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3188 xmlnode x, y;
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3189 struct jabber_chat *jc = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3190 char *chatname;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3191 int retval = 0;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3192
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3193 /* Find out which chat we're sending to */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3194 if((retval = jabber_find_chat_by_convo_id(gc, id, &jc)) != 0)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3195 return(retval);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3196
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3197 x = xmlnode_new_tag("message");
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3198 xmlnode_put_attrib(x, "from", jc->gjid->full);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3199 chatname = g_strdup_printf("%s@%s", jc->gjid->user, jc->gjid->server);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3200 xmlnode_put_attrib(x, "to", chatname);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3201 g_free(chatname);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3202 xmlnode_put_attrib(x, "type", "groupchat");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3203
2289
0af7cf95a25d [gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2278
diff changeset
3204 if (message && strlen(message) > strlen("/topic ") &&
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4777
diff changeset
3205 !g_ascii_strncasecmp(message, "/topic ", strlen("/topic "))) {
2289
0af7cf95a25d [gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2278
diff changeset
3206 char buf[8192];
0af7cf95a25d [gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2278
diff changeset
3207 y = xmlnode_insert_tag(x, "subject");
3642
707a07e64ea3 [gaim-migrate @ 3766]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3208 xmlnode_insert_cdata(y, message + strlen("/topic "), -1);
2289
0af7cf95a25d [gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2278
diff changeset
3209 y = xmlnode_insert_tag(x, "body");
3642
707a07e64ea3 [gaim-migrate @ 3766]
Luke Schierer <lschiere@pidgin.im>
parents: 3630
diff changeset
3210 g_snprintf(buf, sizeof(buf), "/me has changed the subject to: %s", message + strlen("/topic"));
2289
0af7cf95a25d [gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2278
diff changeset
3211 xmlnode_insert_cdata(y, buf, -1);
0af7cf95a25d [gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2278
diff changeset
3212 } else if (message && strlen(message)) {
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
3213 insert_message(x, message, FALSE);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3214 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3215
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3216 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3217 xmlnode_free(x);
2167
cbb558585911 [gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2162
diff changeset
3218 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3219 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3220
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
3221 static void jabber_chat_whisper(GaimConnection *gc, int id, const char *who, const char *message)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3222 {
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
3223 xmlnode x;
2205
68c42ce8eba6 [gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2170
diff changeset
3224 struct jabber_chat *jc = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3225 char *chatname;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3226
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3227 /* Find out which chat we're whispering to */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3228 if(jabber_find_chat_by_convo_id(gc, id, &jc) != 0)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3229 return;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3230
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3231 x = xmlnode_new_tag("message");
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3232 xmlnode_put_attrib(x, "from", jc->gjid->full);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3233 chatname = g_strdup_printf("%s@%s/%s", jc->gjid->user, jc->gjid->server, who);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3234 xmlnode_put_attrib(x, "to", chatname);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3235 g_free(chatname);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3236 xmlnode_put_attrib(x, "type", "normal");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3237
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3238 if (message && strlen(message)) {
5093
7761492245e6 [gaim-migrate @ 5455]
Nathan Walp <nwalp@pidgin.im>
parents: 5068
diff changeset
3239 insert_message(x, message, FALSE);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3240 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3241
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3242 gjab_send(((struct jabber_data *)gc->proto_data)->gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3243 xmlnode_free(x);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3244 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3245
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3246 static char *jabber_normalize(const char *s)
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3247 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3248 static char buf[BUF_LEN];
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3249 char *t, *u;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3250 int x = 0;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3251
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3252 g_return_val_if_fail((s != NULL), NULL);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3253
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3254 /* Somebody called us with s == NULL once... */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3255 if(s == NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3256 return(NULL);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3257 } else {
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4777
diff changeset
3258 u = t = g_utf8_strdown(s, -1);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3259
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3260 while (*t && (x < BUF_LEN - 1)) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3261 if (*t != ' ')
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3262 buf[x++] = *t;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3263 t++;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3264 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3265 buf[x] = '\0';
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3266 g_free(u);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3267
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3268 if (!strchr(buf, '@')) {
4927
477660ad8062 [gaim-migrate @ 5261]
Nathan Walp <nwalp@pidgin.im>
parents: 4921
diff changeset
3269 strcat(buf, "@" DEFAULT_SERVER); /* this isn't always right, but eh */
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3270 } else if ((u = strchr(strchr(buf, '@'), '/')) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3271 *u = '\0';
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3272 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3273
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3274 return buf;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3275 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3276 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3277
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3278 static void jabber_get_info(GaimConnection *gc, const char *who) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3279 xmlnode x;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3280 char *id;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3281 char *realwho;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3282 struct jabber_data *jd = gc->proto_data;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3283 gjconn gjc = jd->gjc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3284
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3285 if((realwho = get_realwho(gjc, who, TRUE, NULL)) == NULL)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3286 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3287
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3288 x = jutil_iqnew(JPACKET__GET, NS_VCARD);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3289 xmlnode_put_attrib(x, "to", realwho);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3290
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3291 g_free(realwho);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3292
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3293 id = gjab_getid(gjc);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3294 xmlnode_put_attrib(x, "id", id);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3295
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3296 g_hash_table_insert(jd->gjc->queries, g_strdup(id), g_strdup("vCard"));
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3297
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3298 gjab_send(gjc, x);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3299
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3300 xmlnode_free(x);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3301 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3302
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3303 static void jabber_get_error_msg(GaimConnection *gc, const char *who) {
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3304 struct jabber_data *jd = gc->proto_data;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3305 gjconn gjc = jd->gjc;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3306 gchar **str_arr = (gchar **) g_new(gpointer, 3);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3307 gchar **ap = str_arr;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3308 gchar *realwho, *final;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3309 struct jabber_buddy_data *jbd;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3310
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3311 if((realwho = get_realwho(gjc, who, FALSE, NULL)) == NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3312 g_strfreev(str_arr);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3313 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3314 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3315
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3316 jbd = jabber_find_buddy(gc, realwho, TRUE);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3317
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3318 *ap++ = g_strdup_printf("<B>%s:</B> %s<BR>\n", _("Jabber ID"), realwho);
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3319 *ap++ = g_strdup_printf("<B>%s:</B> %s<BR>\n", _("Error"), jbd->error_msg);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3320 *ap = NULL;
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
3321
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3322 final= g_strjoinv(NULL, str_arr);
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
3323
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3324 g_strfreev(str_arr);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3325
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3326 g_show_info_text(gc, realwho, 2, final, NULL);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3327 g_free(realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3328 g_free(final);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3329 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3330
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3331 static void jabber_get_away_msg(GaimConnection *gc, const char *who) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3332 struct jabber_data *jd = gc->proto_data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3333 gjconn gjc = jd->gjc;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3334 int num_resources;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3335 gaim_jid gjid;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3336 char *buddy = get_realwho(gjc, who, FALSE, &gjid);
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3337 struct jabber_buddy_data *jbd = jabber_find_buddy(gc, buddy, TRUE);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3338 gchar **str_arr;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3339 gchar **ap;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3340 gchar *realwho, *final;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3341 GSList *resources;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3342 int i;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3343
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3344 if(!buddy)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3345 return;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3346
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3347 if(!gjid->resource) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3348 num_resources = g_slist_length(jbd->resources);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3349 resources = jbd->resources;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3350 } else {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3351 num_resources = 1;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3352 resources = jbd->resources;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3353 while(strcasecmp(((jab_res_info)resources->data)->name, gjid->resource))
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3354 resources = resources->next;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3355 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3356
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3357 gaim_jid_free(gjid);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3358
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3359 /* space for all elements: Jabber I.D. + "status" + NULL (list terminator) */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3360 str_arr = (gchar **) g_new(gpointer, num_resources*2 + 1);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3361 ap = str_arr;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3362
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3363 for(i=0; i<num_resources; i++)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3364 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3365 jab_res_info jri = resources->data;
4450
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
3366 char *status;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3367 realwho = g_strdup_printf("%s/%s", buddy, jri->name);
4450
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
3368 status = strdup_withhtml(jabber_lookup_away(gjc, realwho));
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3369 *ap++ = g_strdup_printf("<B>%s:</B> %s<BR>\n", _("Jabber ID"), realwho);
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3370 *ap++ = g_strdup_printf("<B>%s:</B> %s%s%s<BR>\n", _("Status"), jabber_get_state_string(jri->state), status ? ": " : "", status ? status : "");
4450
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
3371 g_free(status);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3372 g_free(realwho);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3373 resources = resources->next;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3374 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3375
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3376 *ap = NULL;
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
3377
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3378 g_free(buddy);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3379
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3380 final= g_strjoinv(NULL, str_arr);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3381 g_strfreev(str_arr);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3382
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3383 g_show_info_text(gc, who, 2, final, NULL);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3384 g_free(final);
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
3385
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3386 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3387
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
3388 static void jabber_get_cb_info(GaimConnection *gc, int cid, const char *who) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3389 struct jabber_chat *jc = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3390 char *realwho;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3391
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3392 /* Find out which chat */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3393 if(jabber_find_chat_by_convo_id(gc, cid, &jc) != 0)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3394 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3395
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3396 realwho = g_strdup_printf("%s@%s/%s", jc->gjid->user, jc->gjid->server, who);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3397
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3398 jabber_get_info(gc, realwho);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3399 g_free(realwho);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3400 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3401
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
3402 static void jabber_get_cb_away_msg(GaimConnection *gc, int cid, const char *who) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3403 struct jabber_chat *jc = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3404 char *realwho;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3405
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3406 /* Find out which chat */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3407 if(jabber_find_chat_by_convo_id(gc, cid, &jc) != 0)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3408 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3409
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3410 realwho = g_strdup_printf("%s@%s/%s", jc->gjid->user, jc->gjid->server, who);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3411
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3412 jabber_get_away_msg(gc, realwho);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3413 g_free(realwho);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3414
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3415 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3416
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
3417 static char *jabber_tooltip_text(GaimBuddy *b)
4744
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4732
diff changeset
3418 {
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3419 struct jabber_buddy_data *jbd = jabber_find_buddy(b->account->gc, b->name, FALSE);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3420 jab_res_info jri = jabber_find_resource(b->account->gc, b->name);
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3421 char *ret = NULL;
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3422 if(jri) {
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3423 char *stripped = strip_html(jabber_lookup_away(GC_GJ(b->account->gc),
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3424 b->name));
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3425 char *text = NULL;
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3426 if(stripped)
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3427 text = g_markup_escape_text(stripped, strlen(stripped));
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3428 ret = g_strdup_printf("<b>%s:</b> %s%s%s",
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3429 _("Status"),
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3430 jabber_get_state_string(jri->state), text ? ": " : "",
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3431 text ? text : "");
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3432
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3433 if(stripped) {
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3434 g_free(stripped);
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3435 g_free(text);
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3436 }
5136
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3437 } else if(jbd && !GAIM_BUDDY_IS_ONLINE(b) &&
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3438 (jbd->subscription & JABBER_SUB_PENDING ||
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3439 !(jbd->subscription & JABBER_SUB_TO))) {
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3440 ret = g_strdup_printf("<b>%s:</b> %s", _("Status"), _("Not Authorized"));
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3441 }
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3442 return ret;
4744
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4732
diff changeset
3443 }
c3a5a15c01f7 [gaim-migrate @ 5059]
Sean Egan <seanegan@pidgin.im>
parents: 4732
diff changeset
3444
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
3445 static char *jabber_status_text(GaimBuddy *b)
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
3446 {
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3447 struct jabber_buddy_data *jbd = jabber_find_buddy(b->account->gc, b->name, FALSE);
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3448 char *ret = NULL;
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
3449 if (b->uc & UC_UNAVAILABLE) {
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3450 char *stripped = strip_html(jabber_lookup_away(GC_GJ(b->account->gc),
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3451 b->name));
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3452 if(!stripped) {
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3453 jab_res_info jri = jabber_find_resource(b->account->gc, b->name);
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3454 if(jri)
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3455 stripped = g_strdup(jabber_get_state_string(jri->state));
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3456 }
4777
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3457 ret = g_markup_escape_text(stripped, strlen(stripped));
cbf22692e3af [gaim-migrate @ 5097]
Nathan Walp <nwalp@pidgin.im>
parents: 4775
diff changeset
3458 g_free(stripped);
5136
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3459 } else if(jbd && !GAIM_BUDDY_IS_ONLINE(b) &&
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3460 (jbd->subscription & JABBER_SUB_PENDING ||
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3461 !(jbd->subscription & JABBER_SUB_TO))) {
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3462 ret = g_strdup(_("Not Authorized"));
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
3463 }
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3464 return ret;
4732
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
3465 }
a0857625cadb [gaim-migrate @ 5047]
Nathan Walp <nwalp@pidgin.im>
parents: 4705
diff changeset
3466
6806
d15f7187311e [gaim-migrate @ 7346]
Nathan Walp <nwalp@pidgin.im>
parents: 6787
diff changeset
3467 static void jabber_rereq_auth(GaimConnection *gc, const char *who) {
d15f7187311e [gaim-migrate @ 7346]
Nathan Walp <nwalp@pidgin.im>
parents: 6787
diff changeset
3468 jabber_add_buddy(gc, who, NULL);
d15f7187311e [gaim-migrate @ 7346]
Nathan Walp <nwalp@pidgin.im>
parents: 6787
diff changeset
3469 }
d15f7187311e [gaim-migrate @ 7346]
Nathan Walp <nwalp@pidgin.im>
parents: 6787
diff changeset
3470
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3471 static GList *jabber_buddy_menu(GaimConnection *gc, const char *who) {
2170
5c93594ff522 [gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2167
diff changeset
3472 GList *m = NULL;
5c93594ff522 [gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2167
diff changeset
3473 struct proto_buddy_menu *pbm;
6695
2a63688f0d6d [gaim-migrate @ 7221]
Nathan Walp <nwalp@pidgin.im>
parents: 6640
diff changeset
3474 GaimBuddy *b = gaim_find_buddy(gc->account, who);
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3475
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3476 if(b->uc == UC_ERROR)
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3477 {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3478 pbm = g_new0(struct proto_buddy_menu, 1);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3479 pbm->label = _("View Error Msg");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3480 pbm->callback = jabber_get_error_msg;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3481 pbm->gc = gc;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3482 m = g_list_append(m, pbm);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3483 } else {
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3484 gjconn gjc = ((struct jabber_data *)gc->proto_data)->gjc;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3485 char *realwho = get_realwho(gjc, who, FALSE, NULL);
5135
fbcfa5df4c5e [gaim-migrate @ 5499]
Nathan Walp <nwalp@pidgin.im>
parents: 5112
diff changeset
3486 struct jabber_buddy_data *jbd = jabber_find_buddy(gc, realwho, FALSE);
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3487
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3488 g_free(realwho);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3489
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3490 pbm = g_new0(struct proto_buddy_menu, 1);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3491 pbm->label = _("Get Away Msg");
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3492 pbm->callback = jabber_get_away_msg;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3493 pbm->gc = gc;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3494 m = g_list_append(m, pbm);
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3495
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3496 pbm = g_new0(struct proto_buddy_menu, 1);
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3497 if(jbd && (jbd->invisible & JABBER_BUD_INVIS)) {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3498 pbm->label = _("Un-hide From");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3499 pbm->callback = jabber_visible_to_buddy;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3500 } else {
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3501 pbm->label = _("Temporarily Hide From");
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3502 pbm->callback = jabber_invisible_to_buddy;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3503 }
4916
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
3504
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
3505 pbm->gc = gc;
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
3506 m = g_list_append(m, pbm);
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
3507 pbm = g_new0(struct proto_buddy_menu, 1);
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
3508 pbm->label = _("Cancel Presence Notification");
11b8fd3f8ffc [gaim-migrate @ 5250]
Sean Egan <seanegan@pidgin.im>
parents: 4915
diff changeset
3509 pbm->callback = jabber_unsubscribe_buddy_from_us;
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3510 pbm->gc = gc;
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3511 m = g_list_append(m, pbm);
5136
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3512
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3513 if(jbd && !GAIM_BUDDY_IS_ONLINE(b) &&
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3514 !(jbd->subscription & JABBER_SUB_TO)) {
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3515 pbm = g_new0(struct proto_buddy_menu, 1);
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3516 pbm->label = _("Re-request authorization");
6806
d15f7187311e [gaim-migrate @ 7346]
Nathan Walp <nwalp@pidgin.im>
parents: 6787
diff changeset
3517 pbm->callback = jabber_rereq_auth;
5136
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3518 pbm->gc = gc;
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3519 m = g_list_append(m, pbm);
81079a81ebc6 [gaim-migrate @ 5500]
Nathan Walp <nwalp@pidgin.im>
parents: 5135
diff changeset
3520 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3521 }
2170
5c93594ff522 [gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2167
diff changeset
3522
5c93594ff522 [gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2167
diff changeset
3523 return m;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3524 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3525
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3526 static GList *jabber_away_states(GaimConnection *gc) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3527 GList *m = NULL;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3528
4982
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3529 m = g_list_append(m, _("Online"));
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3530 m = g_list_append(m, _("Chatty"));
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3531 m = g_list_append(m, _("Away"));
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3532 m = g_list_append(m, _("Extended Away"));
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3533 m = g_list_append(m, _("Do Not Disturb"));
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3534 m = g_list_append(m, _("Invisible"));
4110
481c7ea9e258 [gaim-migrate @ 4325]
Robert McQueen <robot101@debian.org>
parents: 4074
diff changeset
3535 m = g_list_append(m, GAIM_AWAY_CUSTOM);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3536
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3537 return m;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3538 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3539
6059
9934c862ca14 [gaim-migrate @ 6509]
John Silvestri <john.silvestri@gmail.com>
parents: 6004
diff changeset
3540 static void jabber_set_away(GaimConnection *gc, const char *state, const char *message)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3541 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3542 xmlnode x, y;
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3543 struct jabber_data *jd = gc->proto_data;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3544 gjconn gjc = jd->gjc;
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3545 GSList *jcs;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3546 struct jabber_chat *jc;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3547 char *chatname;
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3548 gboolean invisible = FALSE;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3549
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3550 if (gc->away) {
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3551 g_free(gc->away);
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3552 gc->away = NULL;
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3553 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3554
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3555 x = xmlnode_new_tag("presence");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3556
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3557 if (!strcmp(state, GAIM_AWAY_CUSTOM)) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3558 /* oh goody. Gaim is telling us what to do. */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3559 if (message) {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3560 /* Gaim wants us to be away */
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3561 char *stripped;
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3562
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3563 /* Jabber supports XHTML in IMs, but not in away messages. */
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3564 html_to_xhtml(message, NULL, &stripped);
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3565
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3566 y = xmlnode_insert_tag(x, "show");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3567 xmlnode_insert_cdata(y, "away", -1);
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3568 y = xmlnode_insert_tag(x, "status");
5174
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3569 xmlnode_insert_cdata(y, stripped, -1);
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3570
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3571 gc->away = g_strdup(stripped);
7d34d000f3fa [gaim-migrate @ 5538]
Nathan Walp <nwalp@pidgin.im>
parents: 5136
diff changeset
3572 g_free(stripped);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3573 } else {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3574 /* Gaim wants us to not be away */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3575 /* but for Jabber, we can just send presence with no other information. */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3576 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3577 } else {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3578 /* state is one of our own strings. it won't be NULL. */
4982
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3579 if (!strcmp(state, _("Online"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3580 /* once again, we don't have to put anything here */
4982
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3581 } else if (!strcmp(state, _("Chatty"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3582 y = xmlnode_insert_tag(x, "show");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3583 xmlnode_insert_cdata(y, "chat", -1);
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3584 gc->away = g_strdup("");
4982
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3585 } else if (!strcmp(state, _("Away"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3586 y = xmlnode_insert_tag(x, "show");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3587 xmlnode_insert_cdata(y, "away", -1);
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3588 gc->away = g_strdup("");
4982
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3589 } else if (!strcmp(state, _("Extended Away"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3590 y = xmlnode_insert_tag(x, "show");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3591 xmlnode_insert_cdata(y, "xa", -1);
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3592 gc->away = g_strdup("");
4982
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3593 } else if (!strcmp(state, _("Do Not Disturb"))) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3594 y = xmlnode_insert_tag(x, "show");
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3595 xmlnode_insert_cdata(y, "dnd", -1);
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3596 gc->away = g_strdup("");
4982
b2ee13065ffc [gaim-migrate @ 5317]
Nathan Walp <nwalp@pidgin.im>
parents: 4966
diff changeset
3597 } else if (!strcmp(state, _("Invisible"))) {
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3598 xmlnode_put_attrib(x, "type", "invisible");
4111
93b27900416e [gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents: 4110
diff changeset
3599 gc->away = g_strdup("");
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3600 invisible = TRUE;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3601 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3602 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3603
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3604 gjab_send(gjc, x); /* Notify "individuals" */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3605
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3606 /*
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3607 * As of jabberd-1.4.2: simply sending presence to the server doesn't result in
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3608 * it being propagated to conference rooms. So we wade thru the list of chats,
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3609 * sending our new presence status to each and every one.
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3610 */
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3611 for(jcs = jd->chats; jcs; jcs = jcs->next) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3612 jc = jcs->data;
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3613 if(jc->state == JCS_ACTIVE) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3614 xmlnode_put_attrib(x, "from", jc->gjid->full);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3615 chatname = g_strdup_printf("%s@%s", jc->gjid->user, jc->gjid->server);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3616 xmlnode_put_attrib(x, "to", chatname);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3617 gjab_send(gjc, x);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3618 g_free(chatname);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3619 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3620 }
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3621
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3622 xmlnode_free(x);
3340
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3623
7e59a209931d [gaim-migrate @ 3359]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3337
diff changeset
3624 invisible_to_all_buddies(gc, invisible);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3625 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3626
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3627 static void jabber_set_idle(GaimConnection *gc, int idle) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3628 struct jabber_data *jd = (struct jabber_data *)gc->proto_data;
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3629 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
3630 "jabber_set_idle: setting idle %i\n", idle);
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
3631 jd->idle = idle ? time(NULL) - idle : idle;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3632 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3633
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3634 static void jabber_keepalive(GaimConnection *gc) {
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3635 struct jabber_data *jd = (struct jabber_data *)gc->proto_data;
4450
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
3636 gjab_send_raw(jd->gjc, JABBER_KEEPALIVE_STRING);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3637 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3638
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3639 /*---------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3640 /* Jabber "set info" (vCard) support */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3641 /*---------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3642
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3643 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3644 * V-Card format:
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3645 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3646 * <vCard prodid='' version='' xmlns=''>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3647 * <FN></FN>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3648 * <N>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3649 * <FAMILY/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3650 * <GIVEN/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3651 * </N>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3652 * <NICKNAME/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3653 * <URL/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3654 * <ADR>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3655 * <STREET/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3656 * <EXTADD/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3657 * <LOCALITY/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3658 * <REGION/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3659 * <PCODE/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3660 * <COUNTRY/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3661 * </ADR>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3662 * <TEL/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3663 * <EMAIL/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3664 * <ORG>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3665 * <ORGNAME/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3666 * <ORGUNIT/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3667 * </ORG>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3668 * <TITLE/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3669 * <ROLE/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3670 * <DESC/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3671 * <BDAY/>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3672 * </vCard>
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3673 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3674 * See also:
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3675 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3676 * http://docs.jabber.org/proto/html/vcard-temp.html
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3677 * http://www.vcard-xml.org/dtd/vCard-XML-v2-20010520.dtd
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3678 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3679
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3680 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3681 * Cross-reference user-friendly V-Card entry labels to vCard XML tags
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3682 * and attributes.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3683 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3684 * Order is (or should be) unimportant. For example: we have no way of
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3685 * knowing in what order real data will arrive.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3686 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3687 * Format: Label, Pre-set text, "visible" flag, "editable" flag, XML tag
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3688 * name, XML tag's parent tag "path" (relative to vCard node).
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3689 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3690 * List is terminated by a NULL label pointer.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3691 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3692 * Entries with no label text, but with XML tag and parent tag
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3693 * entries, are used by V-Card XML construction routines to
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3694 * "automagically" construct the appropriate XML node tree.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3695 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3696 * Thoughts on future direction/expansion
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3697 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3698 * This is a "simple" vCard.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3699 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3700 * It is possible for nodes other than the "vCard" node to have
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3701 * attributes. Should that prove necessary/desirable, add an
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3702 * "attributes" pointer to the vcard_template struct, create the
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3703 * necessary tag_attr structs, and add 'em to the vcard_dflt_data
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3704 * array.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3705 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3706 * The above changes will (obviously) require changes to the vCard
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3707 * construction routines.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3708 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3709
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3710 struct vcard_template {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3711 char *label; /* label text pointer */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3712 char *text; /* entry text pointer */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3713 int visible; /* should entry field be "visible?" */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3714 int editable; /* should entry field be editable? */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3715 char *tag; /* tag text */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3716 char *ptag; /* parent tag "path" text */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3717 char *url; /* vCard display format if URL */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3718 } vcard_template_data[] = {
2975
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3719 {N_("Full Name"), NULL, TRUE, TRUE, "FN", NULL, NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3720 {N_("Family Name"), NULL, TRUE, TRUE, "FAMILY", "N", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3721 {N_("Given Name"), NULL, TRUE, TRUE, "GIVEN", "N", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3722 {N_("Nickname"), NULL, TRUE, TRUE, "NICKNAME", NULL, NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3723 {N_("URL"), NULL, TRUE, TRUE, "URL", NULL, "<A HREF=\"%s\">%s</A>"},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3724 {N_("Street Address"), NULL, TRUE, TRUE, "STREET", "ADR", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3725 {N_("Extended Address"), NULL, TRUE, TRUE, "EXTADD", "ADR", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3726 {N_("Locality"), NULL, TRUE, TRUE, "LOCALITY", "ADR", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3727 {N_("Region"), NULL, TRUE, TRUE, "REGION", "ADR", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3728 {N_("Postal Code"), NULL, TRUE, TRUE, "PCODE", "ADR", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3729 {N_("Country"), NULL, TRUE, TRUE, "COUNTRY", "ADR", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3730 {N_("Telephone"), NULL, TRUE, TRUE, "TELEPHONE", NULL, NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3731 {N_("Email"), NULL, TRUE, TRUE, "EMAIL", NULL, "<A HREF=\"mailto:%s\">%s</A>"},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3732 {N_("Organization Name"), NULL, TRUE, TRUE, "ORGNAME", "ORG", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3733 {N_("Organization Unit"), NULL, TRUE, TRUE, "ORGUNIT", "ORG", NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3734 {N_("Title"), NULL, TRUE, TRUE, "TITLE", NULL, NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3735 {N_("Role"), NULL, TRUE, TRUE, "ROLE", NULL, NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3736 {N_("Birthday"), NULL, TRUE, TRUE, "BDAY", NULL, NULL},
3618dc1ea0b4 [gaim-migrate @ 2988]
Rob Flynn <gaim@robflynn.com>
parents: 2956
diff changeset
3737 {N_("Description"), NULL, TRUE, TRUE, "DESC", NULL, NULL},
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3738 {"", NULL, TRUE, TRUE, "N", NULL, NULL},
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3739 {"", NULL, TRUE, TRUE, "ADR", NULL, NULL},
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3740 {"", NULL, TRUE, TRUE, "ORG", NULL, NULL},
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3741 {NULL, NULL, 0, 0, NULL, NULL, NULL}
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3742 };
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3743
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3744 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3745 * The "vCard" tag's attibute list...
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3746 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3747 struct tag_attr {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3748 char *attr;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3749 char *value;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3750 } vcard_tag_attr_list[] = {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3751 {"prodid", "-//HandGen//NONSGML vGen v1.0//EN"},
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3752 {"version", "2.0", },
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3753 {"xmlns", "vcard-temp", },
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3754 {NULL, NULL},
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3755 };
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3756
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3757
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3758 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3759 * Used by routines to parse an XML-encoded string into an xmlnode tree
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3760 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3761 typedef struct {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3762 XML_Parser parser;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3763 xmlnode current;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3764 } *xmlstr2xmlnode_parser, xmlstr2xmlnode_parser_struct;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3765
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3766
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3767 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3768 * Display a Jabber vCard
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3769 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3770 static void jabber_handlevcard(gjconn gjc, xmlnode querynode, char *from)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3771 {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
3772 GaimConnection *gc = GJ_GC(gjc);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3773 char *cdata, *status;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3774 struct vcard_template *vc_tp = vcard_template_data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3775
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3776 /* space for all vCard elements + Jabber I.D. + "status" + NULL (list terminator) */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3777 gchar **str_arr = (gchar **) g_new(gpointer,
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3778 (sizeof(vcard_template_data)/sizeof(struct vcard_template)) + 3);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3779 gchar **ap = str_arr;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3780 gchar *buddy, *final;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3781
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3782 jab_res_info jri;
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3783
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3784 if((buddy = get_realwho(gjc, from, TRUE, NULL)) == NULL) {
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3785 g_strfreev(str_arr);
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3786 return;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3787 }
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3788
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3789 jri = jabber_find_resource(GJ_GC(gjc), buddy);
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3790
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3791 *ap++ = g_strdup_printf("<B>%s:</B> %s<BR>\n", _("Jabber ID"), buddy);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3792
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3793 for(vc_tp = vcard_template_data; vc_tp->label != NULL; ++vc_tp) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3794 if(strcmp(vc_tp->tag, "DESC") == 0)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3795 continue; /* special handling later */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3796 if(vc_tp->ptag == NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3797 cdata = xmlnode_get_tag_data(querynode, vc_tp->tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3798 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3799 gchar *tag = g_strdup_printf("%s/%s", vc_tp->ptag, vc_tp->tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3800 cdata = xmlnode_get_tag_data(querynode, tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3801 g_free(tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3802 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3803 if(cdata != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3804 if(vc_tp->url == NULL) {
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3805 *ap++ = g_strdup_printf("<B>%s:</B> %s<BR>\n", _(vc_tp->label), cdata);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3806 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3807 gchar *fmt = g_strdup_printf("<B>%%s:</B> %s<BR>\n", vc_tp->url);
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3808 *ap++ = g_strdup_printf(fmt, _(vc_tp->label), cdata, cdata);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3809 g_free(fmt);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3810 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3811 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3812 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3813
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3814
4450
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
3815 status = strdup_withhtml(jabber_lookup_away(gjc, buddy));
5236
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3816 *ap++ = g_strdup_printf("<B>%s:</B> %s%s%s<BR>\n",
d0667c1c18b2 [gaim-migrate @ 5606]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 5234
diff changeset
3817 _("Status"),
4745
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3818 jri ? jabber_get_state_string(jri->state) : "",
24867c379d37 [gaim-migrate @ 5060]
Nathan Walp <nwalp@pidgin.im>
parents: 4744
diff changeset
3819 jri && status ? ": " : "", status ? status : "");
4450
22cc3036a6cc [gaim-migrate @ 4725]
Nathan Walp <nwalp@pidgin.im>
parents: 4436
diff changeset
3820 g_free(status);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3821
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3822 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3823 * "Description" handled as a special case: get a copy of the
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3824 * string and HTML-ize.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3825 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3826 if((cdata = xmlnode_get_tag_data(querynode, "DESC")) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3827 gchar *tmp = g_strdup_printf("<HR>%s<BR>", cdata);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3828 *ap++ = strdup_withhtml(tmp);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3829 g_free(tmp);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3830 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3831
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3832 *ap = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3833
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3834 final= g_strjoinv(NULL, str_arr);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3835 g_strfreev(str_arr);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3836
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3837 g_show_info_text(gc, buddy, 2, final, NULL);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3838 g_free(buddy);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3839 g_free(final);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3840 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3841
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3842 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3843 * Used by XML_Parse on parsing CDATA
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3844 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3845 static void xmlstr2xmlnode_charData(void *userdata, const char *s, int slen)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3846 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3847 xmlstr2xmlnode_parser xmlp = (xmlstr2xmlnode_parser) userdata;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3848
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3849 if (xmlp->current)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3850 xmlnode_insert_cdata(xmlp->current, s, slen);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3851 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3852
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3853 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3854 * Used by XML_Parse to start or append to an xmlnode
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3855 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3856 static void xmlstr2xmlnode_startElement(void *userdata, const char *name, const char **attribs)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3857 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3858 xmlnode x;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3859 xmlstr2xmlnode_parser xmlp = (xmlstr2xmlnode_parser) userdata;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3860
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3861 if (xmlp->current) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3862 /* Append the node to the current one */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3863 x = xmlnode_insert_tag(xmlp->current, name);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3864 xmlnode_put_expat_attribs(x, attribs);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3865
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3866 xmlp->current = x;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3867 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3868 x = xmlnode_new_tag(name);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3869 xmlnode_put_expat_attribs(x, attribs);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3870 xmlp->current = x;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3871 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3872 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3873
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3874 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3875 * Used by XML_Parse to end an xmlnode
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3876 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3877 static void xmlstr2xmlnode_endElement(void *userdata, const char *name)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3878 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3879 xmlstr2xmlnode_parser xmlp = (xmlstr2xmlnode_parser) userdata;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3880 xmlnode x;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3881
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3882 if (xmlp->current != NULL && (x = xmlnode_get_parent(xmlp->current)) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3883 xmlp->current = x;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3884 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3885 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3886
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3887 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3888 * Parse an XML-encoded string into an xmlnode tree
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3889 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3890 * Caller is responsible for freeing the returned xmlnode
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3891 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3892 static xmlnode xmlstr2xmlnode(char *xmlstring)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3893 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3894 xmlstr2xmlnode_parser my_parser = g_new(xmlstr2xmlnode_parser_struct, 1);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3895 xmlnode x = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3896
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3897 my_parser->parser = XML_ParserCreate(NULL);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3898 my_parser->current = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3899
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3900 XML_SetUserData(my_parser->parser, (void *)my_parser);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3901 XML_SetElementHandler(my_parser->parser, xmlstr2xmlnode_startElement, xmlstr2xmlnode_endElement);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3902 XML_SetCharacterDataHandler(my_parser->parser, xmlstr2xmlnode_charData);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3903 XML_Parse(my_parser->parser, xmlstring, strlen(xmlstring), 0);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3904
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3905 x = my_parser->current;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3906
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3907 XML_ParserFree(my_parser->parser);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3908 g_free(my_parser);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3909
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3910 return(x);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3911 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3912
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3913 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3914 * Insert a tag node into an xmlnode tree, recursively inserting parent tag
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3915 * nodes as necessary
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3916 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3917 * Returns pointer to inserted node
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3918 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3919 * Note to hackers: this code is designed to be re-entrant (it's recursive--it
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3920 * calls itself), so don't put any "static"s in here!
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3921 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3922 static xmlnode insert_tag_to_parent_tag(xmlnode start, const char *parent_tag, const char *new_tag)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3923 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3924 xmlnode x = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3925
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3926 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3927 * If the parent tag wasn't specified, see if we can get it
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3928 * from the vCard template struct.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3929 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3930 if(parent_tag == NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3931 struct vcard_template *vc_tp = vcard_template_data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3932
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3933 while(vc_tp->label != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3934 if(strcmp(vc_tp->tag, new_tag) == 0) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3935 parent_tag = vc_tp->ptag;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3936 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3937 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3938 ++vc_tp;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3939 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3940 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3941
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3942 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3943 * If we have a parent tag...
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3944 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3945 if(parent_tag != NULL ) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3946 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3947 * Try to get the parent node for a tag
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3948 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3949 if((x = xmlnode_get_tag(start, parent_tag)) == NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3950 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3951 * Descend?
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3952 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3953 char *grand_parent = strcpy(g_malloc(strlen(parent_tag) + 1), parent_tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3954 char *parent;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3955
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3956 if((parent = strrchr(grand_parent, '/')) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3957 *(parent++) = '\0';
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3958 x = insert_tag_to_parent_tag(start, grand_parent, parent);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3959 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3960 x = xmlnode_insert_tag(start, grand_parent);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3961 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3962 g_free(grand_parent);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3963 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3964 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3965 * We found *something* to be the parent node.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3966 * Note: may be the "root" node!
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3967 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3968 xmlnode y;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3969 if((y = xmlnode_get_tag(x, new_tag)) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3970 return(y);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3971 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3972 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3973 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3974
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3975 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3976 * insert the new tag into its parent node
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3977 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3978 return(xmlnode_insert_tag((x == NULL? start : x), new_tag));
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3979 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3980
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3981 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3982 * Send vCard info to Jabber server
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3983 */
5954
58e43cf2dc1f [gaim-migrate @ 6398]
Mark Doliner <markdoliner@pidgin.im>
parents: 5940
diff changeset
3984 static void jabber_set_info(GaimConnection *gc, const char *info)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3985 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3986 xmlnode x, vc_node;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3987 char *id;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3988 struct jabber_data *jd = gc->proto_data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3989 gjconn gjc = jd->gjc;
5954
58e43cf2dc1f [gaim-migrate @ 6398]
Mark Doliner <markdoliner@pidgin.im>
parents: 5940
diff changeset
3990 gchar *info2;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3991
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3992 x = xmlnode_new_tag("iq");
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
3993 xmlnode_put_attrib(x, "type", "set");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3994
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3995 id = gjab_getid(gjc);
3770
5d476318f306 [gaim-migrate @ 3909]
Sean Egan <seanegan@pidgin.im>
parents: 3769
diff changeset
3996
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3997 xmlnode_put_attrib(x, "id", id);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3998
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
3999 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4000 * Send only if there's actually any *information* to send
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4001 */
5954
58e43cf2dc1f [gaim-migrate @ 6398]
Mark Doliner <markdoliner@pidgin.im>
parents: 5940
diff changeset
4002 info2 = g_strdup(info);
58e43cf2dc1f [gaim-migrate @ 6398]
Mark Doliner <markdoliner@pidgin.im>
parents: 5940
diff changeset
4003 vc_node = xmlstr2xmlnode(info2);
4874
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4004
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4005 if(vc_node) {
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4006 if (xmlnode_get_name(vc_node) &&
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4007 !g_ascii_strncasecmp(xmlnode_get_name(vc_node), "vcard", 5)) {
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4008 xmlnode_insert_tag_node(x, vc_node);
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4009 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4010 "jabber: vCard packet: %s\n", xmlnode2str(x));
4874
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4011 gjab_send(gjc, x);
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4012 }
0856cc9a821c [gaim-migrate @ 5204]
Nathan Walp <nwalp@pidgin.im>
parents: 4868
diff changeset
4013 xmlnode_free(vc_node);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4014 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4015
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4016 xmlnode_free(x);
5954
58e43cf2dc1f [gaim-migrate @ 6398]
Mark Doliner <markdoliner@pidgin.im>
parents: 5940
diff changeset
4017 g_free(info2);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4018 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4019
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4020 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4021 * This is the callback from the "ok clicked" for "set vCard"
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4022 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4023 * Formats GSList data into XML-encoded string and returns a pointer
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4024 * to said string.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4025 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4026 * g_free()'ing the returned string space is the responsibility of
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4027 * the caller.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4028 */
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4029 static void
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4030 jabber_format_info(GaimConnection *gc, GaimRequestFields *fields)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4031 {
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4032 GaimAccount *account;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4033 xmlnode vc_node;
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4034 GaimRequestField *field;
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4035 const char *text;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4036 char *p;
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4037 const struct vcard_template *vc_tp;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4038 struct tag_attr *tag_attr;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4039
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4040 vc_node = xmlnode_new_tag("vCard");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4041
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4042 for(tag_attr = vcard_tag_attr_list; tag_attr->attr != NULL; ++tag_attr)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4043 xmlnode_put_attrib(vc_node, tag_attr->attr, tag_attr->value);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4044
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4045 for (vc_tp = vcard_template_data; vc_tp->label != NULL; vc_tp++) {
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4046 if (*vc_tp->label == '\0')
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4047 continue;
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4048
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4049 field = gaim_request_fields_get_field(fields, vc_tp->tag);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4050 text = gaim_request_field_string_get_value(field);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4051
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4052 gaim_debug(GAIM_DEBUG_INFO, "jabber",
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4053 "Setting %s to '%s'\n", vc_tp->tag, text);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4054
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4055 if (text != NULL && *text != '\0') {
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4056 xmlnode xp;
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4057
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4058 if ((xp = insert_tag_to_parent_tag(vc_node,
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4059 NULL, vc_tp->tag)) != NULL) {
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4060
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4061 xmlnode_insert_cdata(xp, text, -1);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4062 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4063 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4064 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4065
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4066 p = g_strdup(xmlnode2str(vc_node));
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4067 xmlnode_free(vc_node);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4068
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4069 account = gaim_connection_get_account(gc);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4070
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4071 if (account != NULL) {
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4072 gaim_account_set_user_info(account, p);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4073
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4074 if (gc != NULL)
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4075 serv_set_info(gc, p);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4076 }
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4077
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4078 g_free(p);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4079 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4080
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4081 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4082 * This gets executed by the proto action
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4083 *
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4084 * Creates a new GaimRequestFields struct, gets the XML-formatted user_info
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4085 * string (if any) into GSLists for the (multi-entry) edit dialog and
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4086 * calls the set_vcard dialog.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4087 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4088 static void jabber_setup_set_info(GaimConnection *gc)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4089 {
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4090 GaimRequestFields *fields;
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4091 GaimRequestFieldGroup *group;
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4092 GaimRequestField *field;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4093 const struct vcard_template *vc_tp;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4094 char *user_info;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4095 char *cdata;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4096 xmlnode x_vc_data = NULL;
6294
e011cd23e437 [gaim-migrate @ 6793]
Devin Bayer
parents: 6240
diff changeset
4097
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4098 fields = gaim_request_fields_new();
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4099 group = gaim_request_field_group_new(NULL);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4100 gaim_request_fields_add_group(fields, group);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4101
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4102 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4103 * Get existing, XML-formatted, user info
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4104 */
6294
e011cd23e437 [gaim-migrate @ 6793]
Devin Bayer
parents: 6240
diff changeset
4105 if((user_info = g_strdup(gaim_account_get_user_info(gc->account))) != NULL)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4106 x_vc_data = xmlstr2xmlnode(user_info);
6294
e011cd23e437 [gaim-migrate @ 6793]
Devin Bayer
parents: 6240
diff changeset
4107 else
e011cd23e437 [gaim-migrate @ 6793]
Devin Bayer
parents: 6240
diff changeset
4108 user_info = g_strdup("");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4109
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4110 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4111 * Set up GSLists for edit with labels from "template," data from user info
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4112 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4113 for(vc_tp = vcard_template_data; vc_tp->label != NULL; ++vc_tp) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4114 if((vc_tp->label)[0] == '\0')
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4115 continue;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4116 if(vc_tp->ptag == NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4117 cdata = xmlnode_get_tag_data(x_vc_data, vc_tp->tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4118 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4119 gchar *tag = g_strdup_printf("%s/%s", vc_tp->ptag, vc_tp->tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4120 cdata = xmlnode_get_tag_data(x_vc_data, tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4121 g_free(tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4122 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4123 if(strcmp(vc_tp->tag, "DESC") == 0) {
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4124 field = gaim_request_field_string_new(vc_tp->tag,
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4125 _(vc_tp->label), cdata,
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4126 TRUE);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4127 #if 0
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4128 multi_text_list_update(&(b->multi_text_items),
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4129 vc_tp->label, cdata, TRUE);
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4130 #endif
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4131 } else {
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4132 field = gaim_request_field_string_new(vc_tp->tag,
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4133 _(vc_tp->label), cdata,
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4134 FALSE);
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4135 #if 0
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4136 data = multi_entry_list_update(&(b->multi_entry_items),
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4137 vc_tp->label, cdata, TRUE);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4138 data->visible = vc_tp->visible;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4139 data->editable = vc_tp->editable;
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4140 #endif
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4141 }
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4142
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4143 gaim_request_field_group_add_field(group, field);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4144 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4145
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4146 if(x_vc_data != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4147 xmlnode_free(x_vc_data);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4148 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4149 /*
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4150 * I'm commenting this out for now. faceprint can look at it
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4151 * later. The comment below says this is going away "real soon now,"
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4152 * but it's probably been here a really long time. Getting this
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4153 * to work with the multi-field stuff won't be pretty, since we're
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4154 * manually going to have to search through all fields for the
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4155 * label and update.
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4156 *
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4157 * -- ChipX86
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4158 */
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4159 #if 0
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4160 /*
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4161 * Early Beta versions had a different user_info storage format--let's
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4162 * see if that works.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4163 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4164 * This goes away RSN.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4165 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4166 const char *record_separator = "<BR>";
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4167 const char *field_separator = ": ";
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4168 gchar **str_list, **str_list_ptr, **str_list2;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4169
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4170 if((str_list = g_strsplit(user_info, record_separator, 0)) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4171 for(str_list_ptr = str_list; *str_list_ptr != NULL; ++str_list_ptr) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4172 str_list2 = g_strsplit(*str_list_ptr, field_separator, 2);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4173 if(str_list2[0] != NULL && str_list2[1] != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4174 g_strstrip(str_list2[0]);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4175 g_strstrip(str_list2[1]);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4176 /* this is ugly--so far */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4177 if(strcmp(str_list2[0], "Description") == 0) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4178 multi_text_list_update(&(b->multi_text_items),
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4179 str_list2[0], str_list2[1], FALSE);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4180 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4181 multi_entry_list_update(&(b->multi_entry_items),
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4182 str_list2[0], str_list2[1], FALSE);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4183 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4184 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4185 g_strfreev(str_list2);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4186 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4187 g_strfreev(str_list);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4188 }
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4189 #endif
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4190 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4191
6294
e011cd23e437 [gaim-migrate @ 6793]
Devin Bayer
parents: 6240
diff changeset
4192 g_free(user_info);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4193
6339
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4194 gaim_request_fields(gc, _("Edit Jabber vCard"),
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4195 _("Edit Jabber vCard"),
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4196 _("All items below are optional. Enter only the "
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4197 "information with which you feel comfortable."),
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4198 fields,
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4199 _("Save"), G_CALLBACK(jabber_format_info),
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4200 _("Cancel"), NULL,
a90fc70044ea [gaim-migrate @ 6838]
Christian Hammond <chipx86@chipx86.com>
parents: 6321
diff changeset
4201 gc);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4202 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4203
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4204 /*---------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4205 /* End Jabber "set info" (vCard) support */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4206 /*---------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4207
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4208 /*----------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4209 /* Jabber "user registration" support */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4210 /*----------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4211
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4212 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4213 * Three of the following four functions duplicate much of what
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4214 * exists elsewhere:
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4215 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4216 * jabber_handleregresp()
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4217 * gjab_reqreg()
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4218 * jabber_handle_registration_state()
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4219 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4220 * It may be that an additional flag could be added to one of
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4221 * the "local" structs and the duplicated code modified to
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4222 * account for it--thus eliminating the duplication. Then again:
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4223 * doing it the way it is may be much cleaner.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4224 *
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4225 * TBD: Code to support requesting additional information server
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4226 * wants at registration--incl. dialog.
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4227 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4228
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4229 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4230 * Like jabber_handlepacket(), only different
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4231 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4232 static void jabber_handleregresp(gjconn gjc, jpacket p)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4233 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4234 if (jpacket_subtype(p) == JPACKET__RESULT) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4235 xmlnode querynode;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4236
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4237 if((querynode = xmlnode_get_tag(p->x, "query")) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4238 char *xmlns;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4239
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4240 /* we damn well *better* have this! */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4241 if((xmlns = xmlnode_get_attrib(querynode, "xmlns")) != NULL &&
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4242 strcmp(xmlns, NS_REGISTER) == 0) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4243
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4244 char *tag;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4245 xmlnode child = xmlnode_get_firstchild(querynode);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4246
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4247 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4248 "got registration requirments response!\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4249
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4250 while(child != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4251 if((tag = xmlnode_get_name(child)) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4252 char *data;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4253
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4254 fprintf(stderr, "DBG: got node: \"%s\"\n", tag);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4255 fflush(stderr);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4256
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4257 if((data = xmlnode_get_data(child)) != NULL) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4258 fprintf(stderr, "DBG: got data: \"%s\"\n", data);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4259 fflush(stderr);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4260 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4261 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4262 child = xmlnode_get_nextsibling(child);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4263 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4264 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4265 } else {
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4266 gaim_debug(GAIM_DEBUG_INFO, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4267 "registration successful!\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4268
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4269 gaim_connection_notice(GJ_GC(gjc), _("Server Registration successful!"));
5578
31f6f8b5e24b [gaim-migrate @ 5982]
Christian Hammond <chipx86@chipx86.com>
parents: 5572
diff changeset
4270 gaim_connection_destroy(GJ_GC(gjc));
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4271 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4272
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4273 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4274 xmlnode xerr;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4275 char *errmsg = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4276 int errcode = 0;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4277
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4278 gaim_debug(GAIM_DEBUG_ERROR, "jabber", "registration failed\n");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4279 xerr = xmlnode_get_tag(p->x, "error");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4280 if (xerr) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4281 char msg[BUF_LONG];
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4282 errmsg = xmlnode_get_data(xerr);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4283 if (xmlnode_get_attrib(xerr, "code")) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4284 errcode = atoi(xmlnode_get_attrib(xerr, "code"));
6321
0b54b2a172d1 [gaim-migrate @ 6820]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 6294
diff changeset
4285 g_snprintf(msg, sizeof(msg), _("Error %d: %s"), errcode, errmsg);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4286 } else
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4287 g_snprintf(msg, sizeof(msg), "%s", errmsg);
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4288 gaim_connection_error(GJ_GC(gjc), msg);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4289 } else {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4290 gaim_connection_error(GJ_GC(gjc), _("Unknown registration error"));
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4291 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4292 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4293 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4294
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4295 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4296 * Like gjab_reqauth(), only different
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4297 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4298 static void gjab_reqreg(gjconn gjc)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4299 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4300 xmlnode x, y, z;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4301 char *user;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4302
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4303 if (!gjc)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4304 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4305
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4306 x = jutil_iqnew(JPACKET__SET, NS_REGISTER);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4307 y = xmlnode_get_tag(x, "query");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4308
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4309 user = gjc->user->user;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4310
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4311 if (user) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4312 z = xmlnode_insert_tag(y, "username");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4313 xmlnode_insert_cdata(z, user, -1);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4314 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4315 z = xmlnode_insert_tag(y, "password");
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4316 xmlnode_insert_cdata(z, gjc->pass, -1);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4317
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4318 gaim_debug(GAIM_DEBUG_MISC, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4319 "jabber: registration packet: %s\n", xmlnode2str(x));
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4320 gjab_send(gjc, x);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4321 xmlnode_free(x);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4322 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4323
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4324 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4325 * Like jabber_handlestate(), only different
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4326 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4327 static void jabber_handle_registration_state(gjconn gjc, int state)
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4328 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4329 switch (state) {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4330 case JCONN_STATE_OFF:
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
4331 if(gjc->was_connected) {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4332 gaim_connection_error(GJ_GC(gjc), _("Connection lost"));
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
4333 } else {
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4334 gaim_connection_error(GJ_GC(gjc), _("Unable to connect"));
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
4335 }
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4336 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4337 case JCONN_STATE_CONNECTED:
3074
b6510843df8f [gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents: 3059
diff changeset
4338 gjc->was_connected = 1;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4339 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4340 * TBD?
6106
1dc08be40f0a [gaim-migrate @ 6567]
Mark Doliner <markdoliner@pidgin.im>
parents: 6076
diff changeset
4341 gaim_connection_update_progress(GJ_GC(gjc), _("Connected"),
1dc08be40f0a [gaim-migrate @ 6567]
Mark Doliner <markdoliner@pidgin.im>
parents: 6076
diff changeset
4342 2, JABBER_CONNECT_STEPS);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4343 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4344 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4345 case JCONN_STATE_ON:
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4346 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4347 * TBD?
6106
1dc08be40f0a [gaim-migrate @ 6567]
Mark Doliner <markdoliner@pidgin.im>
parents: 6076
diff changeset
4348 gaim_connection_update_progress(GJ_GC(gjc), _("Authenticating"),
1dc08be40f0a [gaim-migrate @ 6567]
Mark Doliner <markdoliner@pidgin.im>
parents: 6076
diff changeset
4349 _("Requesting Authentication Method"), 3,
1dc08be40f0a [gaim-migrate @ 6567]
Mark Doliner <markdoliner@pidgin.im>
parents: 6076
diff changeset
4350 JABBER_CONNECT_STEPS);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4351 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4352 gjab_reqreg(gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4353 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4354 * TBD: A work-in-progress
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4355 gjab_reqregreqs(gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4356 */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4357 break;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4358 default:
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4359 gaim_debug(GAIM_DEBUG_MISC, "jabber", "state change: %d\n", state);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4360 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4361 return;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4362 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4363
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4364 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4365 * Like jabber_login(), only different
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4366 */
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4367 void jabber_register_user(GaimAccount *account)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4368 {
6581
dd89eb44f0ee [gaim-migrate @ 7103]
Nathan Walp <nwalp@pidgin.im>
parents: 6502
diff changeset
4369 GaimConnection *gc = gaim_account_get_connection(account);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4370 struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1);
4917
97bf38cec756 [gaim-migrate @ 5251]
Sean Egan <seanegan@pidgin.im>
parents: 4916
diff changeset
4371 char *loginname = create_valid_jid(account->username, DEFAULT_SERVER, "Gaim");
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4372
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4373 /*
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4374 * These do nothing during registration
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4375 */
3311
cdbc5795c717 [gaim-migrate @ 3329]
Nathan Walp <nwalp@pidgin.im>
parents: 3260
diff changeset
4376 jd->buddies = NULL;
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4377 jd->chats = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4378
4491
715515ab95da [gaim-migrate @ 4766]
Nathan Walp <nwalp@pidgin.im>
parents: 4452
diff changeset
4379 if ((jd->gjc = gjab_new(loginname, account->password, gc)) == NULL) {
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4380 g_free(loginname);
5223
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4381 gaim_debug(GAIM_DEBUG_ERROR, "jabber",
4ea16d1f5cd1 [gaim-migrate @ 5593]
Christian Hammond <chipx86@chipx86.com>
parents: 5205
diff changeset
4382 "unable to connect (jab_new failed)\n");
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4383 gaim_connection_error(gc, _("Unable to connect"));
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4384 } else {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4385 gjab_state_handler(jd->gjc, jabber_handle_registration_state);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4386 gjab_packet_handler(jd->gjc, jabber_handleregresp);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4387 jd->gjc->queries = NULL;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4388 gjab_start(jd->gjc);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4389 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4390
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4391 g_free(loginname);
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4392 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4393
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4394 /*----------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4395 /* End Jabber "user registration" support */
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4396 /*----------------------------------------*/
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4397
5572
dd72e0429485 [gaim-migrate @ 5974]
Nathan Walp <nwalp@pidgin.im>
parents: 5498
diff changeset
4398 static GList *jabber_actions(GaimConnection *gc)
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4399 {
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4400 GList *m = NULL;
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4401 struct proto_actions_menu *pam;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4402
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4403 pam = g_new0(struct proto_actions_menu, 1);
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4404 pam->label = _("Set User Info");
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4405 pam->callback = jabber_setup_set_info;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4406 pam->gc = gc;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4407 m = g_list_append(m, pam);
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4408
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4409 /*
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4410 pam = g_new0(struct proto_actions_menu, 1);
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4411 pam->label = _("Set Dir Info");
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4412 pam->callback = show_set_dir;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4413 pam->gc = gc;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4414 m = g_list_append(m, pam);
3257
1ce53b098c00 [gaim-migrate @ 3275]
Nathan Walp <nwalp@pidgin.im>
parents: 3254
diff changeset
4415 */
4333
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4416
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4417 pam = g_new0(struct proto_actions_menu, 1);
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4418 pam->label = _("Change Password");
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4419 pam->callback = show_change_passwd;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4420 pam->gc = gc;
f4c095774bc2 [gaim-migrate @ 4597]
Mark Doliner <markdoliner@pidgin.im>
parents: 4316
diff changeset
4421 m = g_list_append(m, pam);
2956
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4422
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4423 return m;
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4424 }
1836bfe768df [gaim-migrate @ 2969]
Rob Flynn <gaim@robflynn.com>
parents: 2856
diff changeset
4425
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4426 static GaimPluginProtocolInfo prpl_info =
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4427 {
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4428 GAIM_PROTO_JABBER,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4429 OPT_PROTO_UNIQUE_CHATNAME | OPT_PROTO_CHAT_TOPIC,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4430 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4431 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4432 jabber_list_icon,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4433 jabber_list_emblems,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4434 jabber_status_text,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4435 jabber_tooltip_text,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4436 jabber_away_states,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4437 jabber_actions,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4438 jabber_buddy_menu,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4439 jabber_chat_info,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4440 jabber_login,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4441 jabber_close,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4442 jabber_send_im,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4443 jabber_set_info,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4444 jabber_send_typing,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4445 jabber_get_info,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4446 jabber_set_away,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4447 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4448 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4449 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4450 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4451 jabber_set_idle,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4452 jabber_change_passwd,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4453 jabber_add_buddy,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4454 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4455 jabber_remove_buddy,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4456 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4457 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4458 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4459 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4460 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4461 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4462 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4463 jabber_join_chat,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4464 jabber_chat_invite,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4465 jabber_chat_leave,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4466 jabber_chat_whisper,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4467 jabber_chat_send,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4468 jabber_keepalive,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4469 jabber_register_user,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4470 jabber_get_cb_info,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4471 jabber_get_cb_away_msg,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4472 jabber_alias_buddy,
5957
3b0be49a228d [gaim-migrate @ 6401]
Nathan Walp <nwalp@pidgin.im>
parents: 5954
diff changeset
4473 jabber_group_change,
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4474 jabber_rename_group,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4475 NULL,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4476 jabber_convo_closed,
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4477 jabber_normalize
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4478 };
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4479
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4480 static GaimPluginInfo info =
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4481 {
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4482 2, /**< api_version */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4483 GAIM_PLUGIN_PROTOCOL, /**< type */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4484 NULL, /**< ui_requirement */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4485 0, /**< flags */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4486 NULL, /**< dependencies */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4487 GAIM_PRIORITY_DEFAULT, /**< priority */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4488
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4489 "prpl-jabber", /**< id */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4490 "Jabber", /**< name */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4491 VERSION, /**< version */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4492 /** summary */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4493 N_("Jabber Protocol Plugin"),
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4494 /** description */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4495 N_("Jabber Protocol Plugin"),
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4496 NULL, /**< author */
6371
e92b66ee5518 [gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
4497 GAIM_WEBSITE, /**< homepage */
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4498
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4499 NULL, /**< load */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4500 NULL, /**< unload */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4501 NULL, /**< destroy */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4502
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4503 NULL, /**< ui_info */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4504 &prpl_info /**< extra_info */
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4505 };
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4506
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4507 static void
5920
963bfdefee02 [gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents: 5894
diff changeset
4508 init_plugin(GaimPlugin *plugin)
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4509 {
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4510 GaimAccountUserSplit *split;
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4511 GaimAccountOption *option;
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4512
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4513 /* Splits */
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4514 split = gaim_account_user_split_new(_("Server"), "jabber.org", '@');
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4515 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split);
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4516
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4517 split = gaim_account_user_split_new(_("Resource"), "Gaim", '/');
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4518 prpl_info.user_splits = g_list_append(prpl_info.user_splits, split);
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4519
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4520 /* Account Options */
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
4521
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
4522 if(gaim_ssl_is_supported()) {
6880
69def428c334 [gaim-migrate @ 7426]
Nathan Walp <nwalp@pidgin.im>
parents: 6817
diff changeset
4523 option = gaim_account_option_bool_new(_("Use SSL"), "old_ssl", FALSE);
6764
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
4524 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
4525 option);
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
4526 }
a3f8025c0631 [gaim-migrate @ 7296]
Nathan Walp <nwalp@pidgin.im>
parents: 6695
diff changeset
4527
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4528 option = gaim_account_option_int_new(_("Port"), "port", DEFAULT_PORT);
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4529 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4530 option);
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4531
5685
2523e4143d74 [gaim-migrate @ 6106]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
4532 option = gaim_account_option_string_new(_("Connect server"),
5638
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4533 "connect_server", NULL);
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4534 prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
53e752c88ea1 [gaim-migrate @ 6047]
Christian Hammond <chipx86@chipx86.com>
parents: 5613
diff changeset
4535 option);
5205
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4536
242b8aa81328 [gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents: 5174
diff changeset
4537 my_protocol = plugin;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4538 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4539
5920
963bfdefee02 [gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents: 5894
diff changeset
4540 GAIM_INIT_PLUGIN(jabber, init_plugin, info);

mercurial