Wed, 13 May 2009 20:29:03 +0000
Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1 | /** |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2 | * @file simple.c |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
3 | * |
| 15884 | 4 | * purple |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
5 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
6 | * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de> |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
7 | * |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
8 | * *** |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
9 | * Thanks to Google's Summer of Code Program and the helpful mentors |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
10 | * *** |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
11 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
12 | * This program is free software; you can redistribute it and/or modify |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
13 | * it under the terms of the GNU General Public License as published by |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
14 | * the Free Software Foundation; either version 2 of the License, or |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
15 | * (at your option) any later version. |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
16 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
17 | * This program is distributed in the hope that it will be useful, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
20 | * GNU General Public License for more details. |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
21 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
22 | * You should have received a copy of the GNU General Public License |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
23 | * along with this program; if not, write to the Free Software |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19848
diff
changeset
|
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
25 | */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
26 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
27 | #include "internal.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
28 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
29 | #include "accountopt.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
30 | #include "blist.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
31 | #include "conversation.h" |
|
14243
0bda01972ff2
[gaim-migrate @ 16833]
Mark Doliner <markdoliner@pidgin.im>
parents:
14226
diff
changeset
|
32 | #include "dnsquery.h" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
33 | #include "debug.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
34 | #include "notify.h" |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
35 | #include "privacy.h" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
36 | #include "prpl.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
37 | #include "plugin.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
38 | #include "util.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
39 | #include "version.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
40 | #include "network.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
41 | #include "xmlnode.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
42 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
43 | #include "simple.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
44 | #include "sipmsg.h" |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
45 | #include "dnssrv.h" |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
46 | #include "ntlm.h" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
47 | |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21503
diff
changeset
|
48 | static char *gentag(void) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
49 | return g_strdup_printf("%04d%04d", rand() & 0xFFFF, rand() & 0xFFFF); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
50 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
51 | |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21503
diff
changeset
|
52 | static char *genbranch(void) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
53 | return g_strdup_printf("z9hG4bK%04X%04X%04X%04X%04X", |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
54 | rand() & 0xFFFF, rand() & 0xFFFF, rand() & 0xFFFF, |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
55 | rand() & 0xFFFF, rand() & 0xFFFF); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
56 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
57 | |
|
22104
56970903b8e9
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents:
21503
diff
changeset
|
58 | static char *gencallid(void) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
59 | return g_strdup_printf("%04Xg%04Xa%04Xi%04Xm%04Xt%04Xb%04Xx%04Xx", |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
60 | rand() & 0xFFFF, rand() & 0xFFFF, rand() & 0xFFFF, |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
61 | rand() & 0xFFFF, rand() & 0xFFFF, rand() & 0xFFFF, |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
62 | rand() & 0xFFFF, rand() & 0xFFFF); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
63 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
64 | |
| 15884 | 65 | static const char *simple_list_icon(PurpleAccount *a, PurpleBuddy *b) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
66 | return "simple"; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
67 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
68 | |
| 15884 | 69 | static void simple_keep_alive(PurpleConnection *gc) { |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
70 | struct simple_account_data *sip = gc->proto_data; |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
71 | if(sip->udp) { /* in case of UDP send a packet only with a 0 byte to |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
72 | remain in the NAT table */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
73 | gchar buf[2] = {0, 0}; |
| 15884 | 74 | purple_debug_info("simple", "sending keep alive\n"); |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
75 | sendto(sip->fd, buf, 1, 0, (struct sockaddr*)&sip->serveraddr, sizeof(struct sockaddr_in)); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
76 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
77 | return; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
78 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
79 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
80 | static gboolean process_register_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
81 | static void send_notify(struct simple_account_data *sip, struct simple_watcher *); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
82 | |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
83 | static void send_open_publish(struct simple_account_data *sip); |
|
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
84 | static void send_closed_publish(struct simple_account_data *sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
85 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
86 | static void do_notifies(struct simple_account_data *sip) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
87 | GSList *tmp = sip->watcher; |
| 15884 | 88 | purple_debug_info("simple", "do_notifies()\n"); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
89 | if((sip->republish != -1) || sip->republish < time(NULL)) { |
| 15884 | 90 | if(purple_account_get_bool(sip->account, "dopublish", TRUE)) { |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
91 | send_open_publish(sip); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
92 | } |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
93 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
94 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
95 | while(tmp) { |
| 15884 | 96 | purple_debug_info("simple", "notifying %s\n", ((struct simple_watcher*)tmp->data)->name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
97 | send_notify(sip, tmp->data); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
98 | tmp = tmp->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
99 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
100 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
101 | |
| 15884 | 102 | static void simple_set_status(PurpleAccount *account, PurpleStatus *status) { |
| 103 | PurpleStatusPrimitive primitive = purple_status_type_get_primitive(purple_status_get_type(status)); | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
104 | struct simple_account_data *sip = NULL; |
|
11718
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
105 | |
| 15884 | 106 | if (!purple_status_is_active(status)) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
107 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
108 | |
|
11718
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
109 | if (account->gc) |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
110 | sip = account->gc->proto_data; |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
111 | |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
112 | if (sip) |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
113 | { |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
114 | g_free(sip->status); |
| 15884 | 115 | if (primitive == PURPLE_STATUS_AVAILABLE) |
|
11718
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
116 | sip->status = g_strdup("available"); |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
117 | else |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
118 | sip->status = g_strdup("busy"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
119 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
120 | do_notifies(sip); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
121 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
122 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
123 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
124 | static struct sip_connection *connection_find(struct simple_account_data *sip, int fd) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
125 | struct sip_connection *ret = NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
126 | GSList *entry = sip->openconns; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
127 | while(entry) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
128 | ret = entry->data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
129 | if(ret->fd == fd) return ret; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
130 | entry = entry->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
131 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
132 | return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
133 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
134 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
135 | static struct simple_watcher *watcher_find(struct simple_account_data *sip, |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
136 | const gchar *name) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
137 | struct simple_watcher *watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
138 | GSList *entry = sip->watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
139 | while(entry) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
140 | watcher = entry->data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
141 | if(!strcmp(name, watcher->name)) return watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
142 | entry = entry->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
143 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
144 | return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
145 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
146 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
147 | static struct simple_watcher *watcher_create(struct simple_account_data *sip, |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
148 | const gchar *name, const gchar *callid, const gchar *ourtag, |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
149 | const gchar *theirtag, gboolean needsxpidf) { |
|
13093
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
150 | struct simple_watcher *watcher = g_new0(struct simple_watcher, 1); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
151 | watcher->name = g_strdup(name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
152 | watcher->dialog.callid = g_strdup(callid); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
153 | watcher->dialog.ourtag = g_strdup(ourtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
154 | watcher->dialog.theirtag = g_strdup(theirtag); |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
155 | watcher->needsxpidf = needsxpidf; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
156 | sip->watcher = g_slist_append(sip->watcher, watcher); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
157 | return watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
158 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
159 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
160 | static void watcher_remove(struct simple_account_data *sip, const gchar *name) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
161 | struct simple_watcher *watcher = watcher_find(sip, name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
162 | sip->watcher = g_slist_remove(sip->watcher, watcher); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
163 | g_free(watcher->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
164 | g_free(watcher->dialog.callid); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
165 | g_free(watcher->dialog.ourtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
166 | g_free(watcher->dialog.theirtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
167 | g_free(watcher); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
168 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
169 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
170 | static struct sip_connection *connection_create(struct simple_account_data *sip, int fd) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
171 | struct sip_connection *ret = g_new0(struct sip_connection, 1); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
172 | ret->fd = fd; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
173 | sip->openconns = g_slist_append(sip->openconns, ret); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
174 | return ret; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
175 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
176 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
177 | static void connection_remove(struct simple_account_data *sip, int fd) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
178 | struct sip_connection *conn = connection_find(sip, fd); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
179 | sip->openconns = g_slist_remove(sip->openconns, conn); |
| 15884 | 180 | if(conn->inputhandler) purple_input_remove(conn->inputhandler); |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
181 | g_free(conn->inbuf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
182 | g_free(conn); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
183 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
184 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
185 | static void connection_free_all(struct simple_account_data *sip) { |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
186 | struct sip_connection *ret = NULL; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
187 | GSList *entry = sip->openconns; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
188 | while(entry) { |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
189 | ret = entry->data; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
190 | connection_remove(sip, ret->fd); |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
191 | entry = sip->openconns; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
192 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
193 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
194 | |
| 15884 | 195 | static void simple_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
196 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
197 | struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
198 | struct simple_buddy *b; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
199 | const char *name = purple_buddy_get_name(buddy); |
|
25911
f22097dc8413
propagate from branch 'im.pidgin.pidgin.next.minor' (head d24c4a9d28f21eaa47bd76e50ed31053733edcb1)
Elliott Sales de Andrade <qulogic@pidgin.im>
diff
changeset
|
200 | if(strncmp(name, "sip:", 4)) { |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
201 | gchar *buf = g_strdup_printf("sip:%s", name); |
| 15884 | 202 | purple_blist_rename_buddy(buddy, buf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
203 | g_free(buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
204 | } |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
205 | if(!g_hash_table_lookup(sip->buddies, name)) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
206 | b = g_new0(struct simple_buddy, 1); |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
207 | purple_debug_info("simple", "simple_add_buddy %s\n", name); |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
208 | b->name = g_strdup(name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
209 | g_hash_table_insert(sip->buddies, b->name, b); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
210 | } else { |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
211 | purple_debug_info("simple", "buddy %s already in internal list\n", name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
212 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
213 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
214 | |
| 15884 | 215 | static void simple_get_buddies(PurpleConnection *gc) { |
| 216 | PurpleBlistNode *gnode, *cnode, *bnode; | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
217 | PurpleAccount *account; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
218 | |
| 15884 | 219 | purple_debug_info("simple", "simple_get_buddies\n"); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
220 | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
221 | account = purple_connection_get_account(gc); |
|
24945
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
222 | for(gnode = purple_blist_get_root(); gnode; |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
223 | gnode = purple_blist_node_get_sibling_next(gnode)) { |
| 15884 | 224 | if(!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; |
|
24945
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
225 | for(cnode = purple_blist_node_get_first_child(gnode); |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
226 | cnode; |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
227 | cnode = purple_blist_node_get_sibling_next(cnode)) { |
| 15884 | 228 | if(!PURPLE_BLIST_NODE_IS_CONTACT(cnode)) continue; |
|
24945
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
229 | for(bnode = purple_blist_node_get_first_child(cnode); |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
230 | bnode; |
|
6678a8c83797
Some more struct hiding.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24398
diff
changeset
|
231 | bnode = purple_blist_node_get_sibling_next(bnode)) { |
| 15884 | 232 | if(!PURPLE_BLIST_NODE_IS_BUDDY(bnode)) continue; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
233 | if(purple_buddy_get_account((PurpleBuddy*)bnode) == account) |
| 15884 | 234 | simple_add_buddy(gc, (PurpleBuddy*)bnode, (PurpleGroup *)gnode); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
235 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
236 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
237 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
238 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
239 | |
| 15884 | 240 | static void simple_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
241 | { |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
242 | const char *name = purple_buddy_get_name(buddy); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
243 | struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data; |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
244 | struct simple_buddy *b = g_hash_table_lookup(sip->buddies, name); |
|
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
245 | g_hash_table_remove(sip->buddies, name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
246 | g_free(b->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
247 | g_free(b); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
248 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
249 | |
| 15884 | 250 | static GList *simple_status_types(PurpleAccount *acc) { |
| 251 | PurpleStatusType *type; | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
252 | GList *types = NULL; |
|
12456
94b229fc8203
[gaim-migrate @ 14765]
Mark Doliner <markdoliner@pidgin.im>
parents:
12389
diff
changeset
|
253 | |
| 15884 | 254 | type = purple_status_type_new_with_attrs( |
| 255 | PURPLE_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, | |
| 256 | "message", _("Message"), purple_value_new(PURPLE_TYPE_STRING), | |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12571
diff
changeset
|
257 | NULL); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
258 | types = g_list_append(types, type); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
259 | |
| 15884 | 260 | type = purple_status_type_new_full( |
| 261 | PURPLE_STATUS_OFFLINE, NULL, NULL, TRUE, TRUE, FALSE); | |
|
12657
fd16423a0383
[gaim-migrate @ 15000]
Mark Doliner <markdoliner@pidgin.im>
parents:
12645
diff
changeset
|
262 | types = g_list_append(types, type); |
|
fd16423a0383
[gaim-migrate @ 15000]
Mark Doliner <markdoliner@pidgin.im>
parents:
12645
diff
changeset
|
263 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
264 | return types; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
265 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
266 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
267 | static gchar *auth_header(struct simple_account_data *sip, |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
268 | struct sip_auth *auth, const gchar *method, const gchar *target) { |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
269 | gchar noncecount[9]; |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
270 | gchar *response; |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
271 | gchar *ret; |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
272 | gchar *tmp; |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13086
diff
changeset
|
273 | const char *authdomain; |
|
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13086
diff
changeset
|
274 | const char *authuser; |
|
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13086
diff
changeset
|
275 | |
| 15884 | 276 | authdomain = purple_account_get_string(sip->account, "authdomain", ""); |
| 277 | authuser = purple_account_get_string(sip->account, "authuser", sip->username); | |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13086
diff
changeset
|
278 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
279 | if(!authuser || strlen(authuser) < 1) { |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
280 | authuser = sip->username; |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
281 | } |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
282 | |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
283 | if(auth->type == 1) { /* Digest */ |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
284 | sprintf(noncecount, "%08d", auth->nc++); |
| 15884 | 285 | response = purple_cipher_http_digest_calculate_response( |
|
12389
7196ba664097
[gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents:
12382
diff
changeset
|
286 | "md5", method, target, NULL, NULL, |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
287 | auth->nonce, noncecount, NULL, auth->digest_session_key); |
| 15884 | 288 | purple_debug(PURPLE_DEBUG_MISC, "simple", "response %s\n", response); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
289 | |
|
17187
78b7ae95ad45
Fix an extra \r\n in the Authorization header. Fixes #965.
Daniel Atallah <datallah@pidgin.im>
parents:
17185
diff
changeset
|
290 | ret = g_strdup_printf("Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", nc=\"%s\", response=\"%s\"", authuser, auth->realm, auth->nonce, target, noncecount, response); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
291 | g_free(response); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
292 | return ret; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
293 | } else if(auth->type == 2) { /* NTLM */ |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
294 | if(auth->nc == 3 && auth->nonce) { |
| 15884 | 295 | /* TODO: Don't hardcode "purple" as the hostname */ |
| 296 | ret = purple_ntlm_gen_type3(authuser, sip->password, "purple", authdomain, (const guint8 *)auth->nonce, &auth->flags); | |
|
17187
78b7ae95ad45
Fix an extra \r\n in the Authorization header. Fixes #965.
Daniel Atallah <datallah@pidgin.im>
parents:
17185
diff
changeset
|
297 | tmp = g_strdup_printf("NTLM qop=\"auth\", opaque=\"%s\", realm=\"%s\", targetname=\"%s\", gssapi-data=\"%s\"", auth->opaque, auth->realm, auth->target, ret); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
298 | g_free(ret); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
299 | return tmp; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
300 | } |
|
17187
78b7ae95ad45
Fix an extra \r\n in the Authorization header. Fixes #965.
Daniel Atallah <datallah@pidgin.im>
parents:
17185
diff
changeset
|
301 | tmp = g_strdup_printf("NTLM qop=\"auth\", realm=\"%s\", targetname=\"%s\", gssapi-data=\"\"", auth->realm, auth->target); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
302 | return tmp; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
303 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
304 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
305 | sprintf(noncecount, "%08d", auth->nc++); |
| 15884 | 306 | response = purple_cipher_http_digest_calculate_response( |
|
12389
7196ba664097
[gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents:
12382
diff
changeset
|
307 | "md5", method, target, NULL, NULL, |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
308 | auth->nonce, noncecount, NULL, auth->digest_session_key); |
| 15884 | 309 | purple_debug(PURPLE_DEBUG_MISC, "simple", "response %s\n", response); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
310 | |
|
17187
78b7ae95ad45
Fix an extra \r\n in the Authorization header. Fixes #965.
Daniel Atallah <datallah@pidgin.im>
parents:
17185
diff
changeset
|
311 | ret = g_strdup_printf("Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", nc=\"%s\", response=\"%s\"", authuser, auth->realm, auth->nonce, target, noncecount, response); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
312 | g_free(response); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
313 | return ret; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
314 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
315 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
316 | static char *parse_attribute(const char *attrname, const char *source) { |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
317 | const char *tmp, *tmp2; |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
318 | char *retval = NULL; |
|
12746
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
319 | int len = strlen(attrname); |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
320 | |
|
23086
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
321 | /* we know that source is NULL-terminated. |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
322 | * Therefore this loop won't be infinite. |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
323 | */ |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
324 | while (source[0] == ' ') |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
325 | source++; |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
326 | |
|
12746
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
327 | if(!strncmp(source, attrname, len)) { |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
328 | tmp = source + len; |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
329 | tmp2 = g_strstr_len(tmp, strlen(tmp), "\""); |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
330 | if(tmp2) |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
331 | retval = g_strndup(tmp, tmp2 - tmp); |
|
13086
0e5a0a33475b
[gaim-migrate @ 15447]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
332 | else |
|
0e5a0a33475b
[gaim-migrate @ 15447]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
333 | retval = g_strdup(tmp); |
|
12746
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
334 | } |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
335 | |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
336 | return retval; |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
337 | } |
|
7ee4a8a55435
[gaim-migrate @ 15093]
Daniel Atallah <datallah@pidgin.im>
parents:
12745
diff
changeset
|
338 | |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
339 | static void fill_auth(struct simple_account_data *sip, const gchar *hdr, struct sip_auth *auth) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
340 | int i = 0; |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13086
diff
changeset
|
341 | const char *authuser; |
|
11424
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
342 | char *tmp; |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
343 | gchar **parts; |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
344 | |
| 15884 | 345 | authuser = purple_account_get_string(sip->account, "authuser", sip->username); |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13086
diff
changeset
|
346 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
347 | if(!authuser || strlen(authuser) < 1) { |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
348 | authuser = sip->username; |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
349 | } |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13086
diff
changeset
|
350 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
351 | if(!hdr) { |
| 15884 | 352 | purple_debug_error("simple", "fill_auth: hdr==NULL\n"); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
353 | return; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
354 | } |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
355 | |
|
18552
810a338ef085
Use the glib strcasecmp functions everywhere, as we've had reports of
Richard Laager <rlaager@pidgin.im>
parents:
17653
diff
changeset
|
356 | if(!g_ascii_strncasecmp(hdr, "NTLM", 4)) { |
| 15884 | 357 | purple_debug_info("simple", "found NTLM\n"); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
358 | auth->type = 2; |
|
23086
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
359 | parts = g_strsplit(hdr+5, "\",", 0); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
360 | i = 0; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
361 | while(parts[i]) { |
| 15884 | 362 | purple_debug_info("simple", "parts[i] %s\n", parts[i]); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
363 | if((tmp = parse_attribute("gssapi-data=\"", parts[i]))) { |
| 15884 | 364 | auth->nonce = g_memdup(purple_ntlm_parse_type2(tmp, &auth->flags), 8); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
365 | g_free(tmp); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
366 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
367 | if((tmp = parse_attribute("targetname=\"", |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
368 | parts[i]))) { |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
369 | auth->target = tmp; |
|
11424
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
370 | } |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
371 | else if((tmp = parse_attribute("realm=\"", |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
372 | parts[i]))) { |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
373 | auth->realm = tmp; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
374 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
375 | else if((tmp = parse_attribute("opaque=\"", parts[i]))) { |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
376 | auth->opaque = tmp; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
377 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
378 | i++; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
379 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
380 | g_strfreev(parts); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
381 | auth->nc = 1; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
382 | if(!strstr(hdr, "gssapi-data")) { |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
383 | auth->nc = 1; |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
384 | } else { |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
385 | auth->nc = 3; |
|
23086
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
386 | } |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
387 | |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
388 | return; |
|
23086
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
389 | } else if(!g_ascii_strncasecmp(hdr, "DIGEST", 6)) { |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
390 | |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
391 | purple_debug_info("simple", "found DIGEST\n"); |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
392 | |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
393 | auth->type = 1; |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
394 | parts = g_strsplit(hdr+7, ",", 0); |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
395 | while(parts[i]) { |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
396 | if((tmp = parse_attribute("nonce=\"", parts[i]))) { |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
397 | auth->nonce = tmp; |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
398 | } |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
399 | else if((tmp = parse_attribute("realm=\"", parts[i]))) { |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
400 | auth->realm = tmp; |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
401 | } |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
402 | i++; |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
403 | } |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
404 | g_strfreev(parts); |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
405 | purple_debug(PURPLE_DEBUG_MISC, "simple", "nonce: %s realm: %s\n", |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
406 | auth->nonce ? auth->nonce : "(null)", |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
407 | auth->realm ? auth->realm : "(null)"); |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
408 | |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
409 | if(auth->realm) { |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
410 | auth->digest_session_key = purple_cipher_http_digest_calculate_session_key( |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
411 | "md5", authuser, auth->realm, sip->password, auth->nonce, NULL); |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
412 | |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
413 | auth->nc = 1; |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
414 | } |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
415 | |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
416 | } else { |
|
413ccc075f8b
Patch from Will Hawkins to fix SIMPLE authentication on some servers.
Daniel Atallah <datallah@pidgin.im>
parents:
22942
diff
changeset
|
417 | purple_debug_error("simple", "Unsupported or bad WWW-Authenticate header (%s).\n", hdr); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
418 | } |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
419 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
420 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
421 | |
| 15884 | 422 | static void simple_canwrite_cb(gpointer data, gint source, PurpleInputCondition cond) { |
| 423 | PurpleConnection *gc = data; | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
424 | struct simple_account_data *sip = gc->proto_data; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
425 | gsize max_write; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
426 | gssize written; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
427 | |
| 15884 | 428 | max_write = purple_circ_buffer_get_max_read(sip->txbuf); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
429 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
430 | if(max_write == 0) { |
| 15884 | 431 | purple_input_remove(sip->tx_handler); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
432 | sip->tx_handler = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
433 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
434 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
435 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
436 | written = write(sip->fd, sip->txbuf->outptr, max_write); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
437 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
438 | if(written < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
439 | written = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
440 | else if(written <= 0) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
441 | /*TODO: do we really want to disconnect on a failure to write?*/ |
| 21279 | 442 | purple_connection_error_reason(gc, |
| 443 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
444 | _("Could not write")); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
445 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
446 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
447 | |
| 15884 | 448 | purple_circ_buffer_mark_read(sip->txbuf, written); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
449 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
450 | |
| 15884 | 451 | static void simple_input_cb(gpointer data, gint source, PurpleInputCondition cond); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
452 | |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
453 | static void send_later_cb(gpointer data, gint source, const gchar *error) { |
| 15884 | 454 | PurpleConnection *gc = data; |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
455 | struct simple_account_data *sip; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
456 | struct sip_connection *conn; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
457 | |
| 15884 | 458 | if (!PURPLE_CONNECTION_IS_VALID(gc)) |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
459 | { |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
460 | if (source >= 0) |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
461 | close(source); |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
462 | return; |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
463 | } |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
464 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
465 | if(source < 0) { |
| 21279 | 466 | purple_connection_error_reason(gc, |
| 467 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
468 | _("Could not connect")); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
469 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
470 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
471 | |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
472 | sip = gc->proto_data; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
473 | sip->fd = source; |
|
13058
2bf79aa07199
[gaim-migrate @ 15420]
Daniel Atallah <datallah@pidgin.im>
parents:
12909
diff
changeset
|
474 | sip->connecting = FALSE; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
475 | |
| 15884 | 476 | simple_canwrite_cb(gc, sip->fd, PURPLE_INPUT_WRITE); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
477 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
478 | /* If there is more to write now, we need to register a handler */ |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
479 | if(sip->txbuf->bufused > 0) |
| 15884 | 480 | sip->tx_handler = purple_input_add(sip->fd, PURPLE_INPUT_WRITE, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
481 | simple_canwrite_cb, gc); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
482 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
483 | conn = connection_create(sip, source); |
| 15884 | 484 | conn->inputhandler = purple_input_add(sip->fd, PURPLE_INPUT_READ, simple_input_cb, gc); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
485 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
486 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
487 | |
| 15884 | 488 | static void sendlater(PurpleConnection *gc, const char *buf) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
489 | struct simple_account_data *sip = gc->proto_data; |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14132
diff
changeset
|
490 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
491 | if(!sip->connecting) { |
| 15884 | 492 | purple_debug_info("simple", "connecting to %s port %d\n", sip->realhostname ? sip->realhostname : "{NULL}", sip->realport); |
| 493 | if (purple_proxy_connect(gc, sip->account, sip->realhostname, sip->realport, send_later_cb, gc) == NULL) { | |
| 21279 | 494 | purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Couldn't create socket")); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
495 | } |
|
13058
2bf79aa07199
[gaim-migrate @ 15420]
Daniel Atallah <datallah@pidgin.im>
parents:
12909
diff
changeset
|
496 | sip->connecting = TRUE; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
497 | } |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
498 | |
| 15884 | 499 | if(purple_circ_buffer_get_max_read(sip->txbuf) > 0) |
| 500 | purple_circ_buffer_append(sip->txbuf, "\r\n", 2); | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
501 | |
| 15884 | 502 | purple_circ_buffer_append(sip->txbuf, buf, strlen(buf)); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
503 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
504 | |
| 15884 | 505 | static void sendout_pkt(PurpleConnection *gc, const char *buf) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
506 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
507 | time_t currtime = time(NULL); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
508 | int writelen = strlen(buf); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
509 | |
| 15884 | 510 | purple_debug(PURPLE_DEBUG_MISC, "simple", "\n\nsending - %s\n######\n%s\n######\n\n", ctime(&currtime), buf); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
511 | if(sip->udp) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
512 | if(sendto(sip->fd, buf, writelen, 0, (struct sockaddr*)&sip->serveraddr, sizeof(struct sockaddr_in)) < writelen) { |
| 15884 | 513 | purple_debug_info("simple", "could not send packet\n"); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
514 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
515 | } else { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
516 | int ret; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
517 | if(sip->fd < 0) { |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
518 | sendlater(gc, buf); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
519 | return; |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
520 | } |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
521 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
522 | if(sip->tx_handler) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
523 | ret = -1; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
524 | errno = EAGAIN; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
525 | } else |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
526 | ret = write(sip->fd, buf, writelen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
527 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
528 | if (ret < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
529 | ret = 0; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
530 | else if(ret <= 0) { /* XXX: When does this happen legitimately? */ |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
531 | sendlater(gc, buf); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
532 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
533 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
534 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
535 | if (ret < writelen) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
536 | if(!sip->tx_handler) |
| 15884 | 537 | sip->tx_handler = purple_input_add(sip->fd, |
| 538 | PURPLE_INPUT_WRITE, simple_canwrite_cb, | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
539 | gc); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
540 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
541 | /* XXX: is it OK to do this? You might get part of a request sent |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
542 | with part of another. */ |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
543 | if(sip->txbuf->bufused > 0) |
| 15884 | 544 | purple_circ_buffer_append(sip->txbuf, "\r\n", 2); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
545 | |
| 15884 | 546 | purple_circ_buffer_append(sip->txbuf, buf + ret, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
547 | writelen - ret); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
548 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
549 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
550 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
551 | |
| 15884 | 552 | static int simple_send_raw(PurpleConnection *gc, const char *buf, int len) |
| 14604 | 553 | { |
| 554 | sendout_pkt(gc, buf); | |
| 555 | return len; | |
| 556 | } | |
| 557 | ||
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
558 | static void sendout_sipmsg(struct simple_account_data *sip, struct sipmsg *msg) { |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
559 | GSList *tmp = msg->headers; |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
560 | gchar *name; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
561 | gchar *value; |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
562 | GString *outstr = g_string_new(""); |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
563 | g_string_append_printf(outstr, "%s %s SIP/2.0\r\n", msg->method, msg->target); |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
564 | while(tmp) { |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
565 | name = ((struct siphdrelement*) (tmp->data))->name; |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
566 | value = ((struct siphdrelement*) (tmp->data))->value; |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
567 | g_string_append_printf(outstr, "%s: %s\r\n", name, value); |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
568 | tmp = g_slist_next(tmp); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
569 | } |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
570 | g_string_append_printf(outstr, "\r\n%s", msg->body ? msg->body : ""); |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
571 | sendout_pkt(sip->gc, outstr->str); |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
572 | g_string_free(outstr, TRUE); |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
573 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
574 | |
| 15884 | 575 | static void send_sip_response(PurpleConnection *gc, struct sipmsg *msg, int code, |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
576 | const char *text, const char *body) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
577 | GSList *tmp = msg->headers; |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
578 | gchar *name; |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
579 | gchar *value; |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
580 | GString *outstr = g_string_new(""); |
|
13093
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
581 | |
|
12754
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
582 | /* When sending the acknowlegements and errors, the content length from the original |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
583 | message is still here, but there is no body; we need to make sure we're sending the |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
584 | correct content length */ |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
585 | sipmsg_remove_header(msg, "Content-Length"); |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
586 | if(body) { |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
587 | gchar len[12]; |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
588 | sprintf(len, "%" G_GSIZE_FORMAT , strlen(body)); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
589 | sipmsg_add_header(msg, "Content-Length", len); |
|
12754
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
590 | } |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
591 | else |
|
539bcb15199f
[gaim-migrate @ 15101]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12753
diff
changeset
|
592 | sipmsg_add_header(msg, "Content-Length", "0"); |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
593 | g_string_append_printf(outstr, "SIP/2.0 %d %s\r\n", code, text); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
594 | while(tmp) { |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
595 | name = ((struct siphdrelement*) (tmp->data))->name; |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
596 | value = ((struct siphdrelement*) (tmp->data))->value; |
|
12745
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
597 | |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
598 | g_string_append_printf(outstr, "%s: %s\r\n", name, value); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
599 | tmp = g_slist_next(tmp); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
600 | } |
|
12741
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
601 | g_string_append_printf(outstr, "\r\n%s", body ? body : ""); |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
602 | sendout_pkt(gc, outstr->str); |
|
14cd04e157b1
[gaim-migrate @ 15088]
Daniel Atallah <datallah@pidgin.im>
parents:
12730
diff
changeset
|
603 | g_string_free(outstr, TRUE); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
604 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
605 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
606 | static void transactions_remove(struct simple_account_data *sip, struct transaction *trans) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
607 | if(trans->msg) sipmsg_free(trans->msg); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
608 | sip->transactions = g_slist_remove(sip->transactions, trans); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
609 | g_free(trans); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
610 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
611 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
612 | static void transactions_add_buf(struct simple_account_data *sip, const gchar *buf, void *callback) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
613 | struct transaction *trans = g_new0(struct transaction, 1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
614 | trans->time = time(NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
615 | trans->msg = sipmsg_parse_msg(buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
616 | trans->cseq = sipmsg_find_header(trans->msg, "CSeq"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
617 | trans->callback = callback; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
618 | sip->transactions = g_slist_append(sip->transactions, trans); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
619 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
620 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
621 | static struct transaction *transactions_find(struct simple_account_data *sip, struct sipmsg *msg) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
622 | struct transaction *trans; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
623 | GSList *transactions = sip->transactions; |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
624 | const gchar *cseq = sipmsg_find_header(msg, "CSeq"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
625 | |
|
16232
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
626 | if (cseq) { |
|
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
627 | while(transactions) { |
|
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
628 | trans = transactions->data; |
|
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
629 | if(!strcmp(trans->cseq, cseq)) { |
|
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
630 | return trans; |
|
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
631 | } |
|
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
632 | transactions = transactions->next; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
633 | } |
|
16232
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
634 | } else { |
|
b5838c6cb3ed
simple-crashfix.diff from achris in ticket #98. This is a fix for the crasher,
Richard Laager <rlaager@pidgin.im>
parents:
16209
diff
changeset
|
635 | purple_debug(PURPLE_DEBUG_MISC, "simple", "Received message contains no CSeq header.\n"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
636 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
637 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
638 | return NULL; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
639 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
640 | |
| 15884 | 641 | static void send_sip_request(PurpleConnection *gc, const gchar *method, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
642 | const gchar *url, const gchar *to, const gchar *addheaders, |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
643 | const gchar *body, struct sip_dialog *dialog, TransCallback tc) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
644 | struct simple_account_data *sip = gc->proto_data; |
|
13093
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
645 | char *callid = dialog ? g_strdup(dialog->callid) : gencallid(); |
|
14213
1d35fd2c5713
[gaim-migrate @ 16796]
Daniel Atallah <datallah@pidgin.im>
parents:
14180
diff
changeset
|
646 | char *auth = NULL; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
647 | const char *addh = ""; |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
648 | gchar *branch = genbranch(); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
649 | gchar *tag = NULL; |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
650 | char *buf; |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
651 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
652 | if(!strcmp(method, "REGISTER")) { |
|
13093
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
653 | if(sip->regcallid) { |
|
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
654 | g_free(callid); |
|
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
655 | callid = g_strdup(sip->regcallid); |
|
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
656 | } |
|
12196
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
657 | else sip->regcallid = g_strdup(callid); |
|
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
658 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
659 | |
|
13093
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
660 | if(addheaders) addh = addheaders; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
661 | if(sip->registrar.type && !strcmp(method, "REGISTER")) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
662 | buf = auth_header(sip, &sip->registrar, method, url); |
|
17187
78b7ae95ad45
Fix an extra \r\n in the Authorization header. Fixes #965.
Daniel Atallah <datallah@pidgin.im>
parents:
17185
diff
changeset
|
663 | auth = g_strdup_printf("Authorization: %s\r\n", buf); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
664 | g_free(buf); |
| 15884 | 665 | purple_debug(PURPLE_DEBUG_MISC, "simple", "header %s", auth); |
|
17187
78b7ae95ad45
Fix an extra \r\n in the Authorization header. Fixes #965.
Daniel Atallah <datallah@pidgin.im>
parents:
17185
diff
changeset
|
666 | } else if(sip->proxy.type && strcmp(method, "REGISTER")) { |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
667 | buf = auth_header(sip, &sip->proxy, method, url); |
|
17187
78b7ae95ad45
Fix an extra \r\n in the Authorization header. Fixes #965.
Daniel Atallah <datallah@pidgin.im>
parents:
17185
diff
changeset
|
668 | auth = g_strdup_printf("Proxy-Authorization: %s\r\n", buf); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
669 | g_free(buf); |
| 15884 | 670 | purple_debug(PURPLE_DEBUG_MISC, "simple", "header %s", auth); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
671 | } |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
672 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
673 | if (!dialog) |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
674 | tag = gentag(); |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
675 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
676 | buf = g_strdup_printf("%s %s SIP/2.0\r\n" |
|
11190
16f02ac58a38
[gaim-migrate @ 13308]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11189
diff
changeset
|
677 | "Via: SIP/2.0/%s %s:%d;branch=%s\r\n" |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
678 | /* Don't know what epid is, but LCS wants it */ |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
679 | "From: <sip:%s@%s>;tag=%s;epid=1234567890\r\n" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
680 | "To: <%s>%s%s\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
681 | "Max-Forwards: 10\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
682 | "CSeq: %d %s\r\n" |
| 15884 | 683 | "User-Agent: Purple/" VERSION "\r\n" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
684 | "Call-ID: %s\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
685 | "%s%s" |
| 11658 | 686 | "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%s", |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
687 | method, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
688 | url, |
|
11190
16f02ac58a38
[gaim-migrate @ 13308]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11189
diff
changeset
|
689 | sip->udp ? "UDP" : "TCP", |
| 15884 | 690 | purple_network_get_my_ip(-1), |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
691 | sip->listenport, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
692 | branch, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
693 | sip->username, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
694 | sip->servername, |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
695 | dialog ? dialog->ourtag : tag, |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
696 | to, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
697 | dialog ? ";tag=" : "", |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
698 | dialog ? dialog->theirtag : "", |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
699 | ++sip->cseq, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
700 | method, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
701 | callid, |
|
14213
1d35fd2c5713
[gaim-migrate @ 16796]
Daniel Atallah <datallah@pidgin.im>
parents:
14180
diff
changeset
|
702 | auth ? auth : "", |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
703 | addh, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
704 | strlen(body), |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
705 | body); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
706 | |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
707 | g_free(tag); |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
708 | g_free(auth); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
709 | g_free(branch); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
710 | g_free(callid); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
711 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
712 | /* add to ongoing transactions */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
713 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
714 | transactions_add_buf(sip, buf, tc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
715 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
716 | sendout_pkt(gc, buf); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
717 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
718 | g_free(buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
719 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
720 | |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
721 | static char *get_contact(struct simple_account_data *sip) { |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
722 | return g_strdup_printf("<sip:%s@%s:%d;transport=%s>;methods=\"MESSAGE, SUBSCRIBE, NOTIFY\"", |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
723 | sip->username, purple_network_get_my_ip(-1), |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
724 | sip->listenport, |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
725 | sip->udp ? "udp" : "tcp"); |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
726 | } |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
727 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
728 | static void do_register_exp(struct simple_account_data *sip, int expire) { |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
729 | char *uri, *to, *contact, *hdr; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
730 | |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
731 | sip->reregister = time(NULL) + expire - 50; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
732 | |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
733 | uri = g_strdup_printf("sip:%s", sip->servername); |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
734 | to = g_strdup_printf("sip:%s@%s", sip->username, sip->servername); |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
735 | contact = get_contact(sip); |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
736 | hdr = g_strdup_printf("Contact: %s\r\nExpires: %d\r\n", contact, expire); |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
737 | g_free(contact); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
738 | |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
739 | sip->registerstatus = SIMPLE_REGISTER_SENT; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
740 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
741 | send_sip_request(sip->gc, "REGISTER", uri, to, hdr, "", NULL, |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
742 | process_register_response); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
743 | |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
744 | g_free(hdr); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
745 | g_free(uri); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
746 | g_free(to); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
747 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
748 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
749 | static void do_register(struct simple_account_data *sip) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
750 | do_register_exp(sip, sip->registerexpire); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
751 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
752 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
753 | static gchar *parse_from(const gchar *hdr) { |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
754 | gchar *from; |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
755 | const gchar *tmp, *tmp2 = hdr; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
756 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
757 | if(!hdr) return NULL; |
| 15884 | 758 | purple_debug_info("simple", "parsing address out of %s\n", hdr); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
759 | tmp = strchr(hdr, '<'); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
760 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
761 | /* i hate the different SIP UA behaviours... */ |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
762 | if(tmp) { /* sip address in <...> */ |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
763 | tmp2 = tmp + 1; |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
764 | tmp = strchr(tmp2, '>'); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
765 | if(tmp) { |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
766 | from = g_strndup(tmp2, tmp - tmp2); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
767 | } else { |
| 15884 | 768 | purple_debug_info("simple", "found < without > in From\n"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
769 | return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
770 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
771 | } else { |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
772 | tmp = strchr(tmp2, ';'); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
773 | if(tmp) { |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
774 | from = g_strndup(tmp2, tmp - tmp2); |
|
11483
098043515257
[gaim-migrate @ 13725]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11439
diff
changeset
|
775 | } else { |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
776 | from = g_strdup(tmp2); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
777 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
778 | } |
| 15884 | 779 | purple_debug_info("simple", "got %s\n", from); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
780 | return from; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
781 | } |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
782 | static gchar *find_tag(const gchar *); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
783 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
784 | static gboolean process_subscribe_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
785 | gchar *to = NULL; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
786 | struct simple_buddy *b = NULL; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
787 | gchar *theirtag = NULL, *ourtag = NULL; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
788 | const gchar *callid = NULL; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
789 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
790 | purple_debug_info("simple", "process subscribe response\n"); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
791 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
792 | if(msg->response == 200 || msg->response == 202) { |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
793 | if ( (to = parse_from(sipmsg_find_header(msg, "To"))) && |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
794 | (b = g_hash_table_lookup(sip->buddies, to)) && |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
795 | !(b->dialog)) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
796 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
797 | purple_debug_info("simple", "creating dialog" |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
798 | " information for a subscription.\n"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
799 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
800 | theirtag = find_tag(sipmsg_find_header(msg, "To")); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
801 | ourtag = find_tag(sipmsg_find_header(msg, "From")); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
802 | callid = sipmsg_find_header(msg, "Call-ID"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
803 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
804 | if (theirtag && ourtag && callid) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
805 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
806 | b->dialog = g_new0(struct sip_dialog, 1); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
807 | b->dialog->ourtag = g_strdup(ourtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
808 | b->dialog->theirtag = g_strdup(theirtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
809 | b->dialog->callid = g_strdup(callid); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
810 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
811 | purple_debug_info("simple", "ourtag: %s\n", |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
812 | ourtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
813 | purple_debug_info("simple", "theirtag: %s\n", |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
814 | theirtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
815 | purple_debug_info("simple", "callid: %s\n", |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
816 | callid); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
817 | g_free(theirtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
818 | g_free(ourtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
819 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
820 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
821 | else |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
822 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
823 | purple_debug_info("simple", "cannot create dialog!\n"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
824 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
825 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
826 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
827 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
828 | to = parse_from(sipmsg_find_header(tc->msg, "To")); /* cant be NULL since it is our own msg */ |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
829 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
830 | /* we can not subscribe -> user is offline (TODO unknown status?) */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
831 | |
| 15884 | 832 | purple_prpl_got_user_status(sip->account, to, "offline", NULL); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
833 | g_free(to); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
834 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
835 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
836 | |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
837 | static void simple_subscribe_exp(struct simple_account_data *sip, struct simple_buddy *buddy, int expiration) { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
838 | gchar *contact, *to, *tmp, *tmp2; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
839 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
840 | tmp2 = g_strdup_printf( |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
841 | "Expires: %d\r\n" |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
842 | "Accept: application/pidf+xml, application/xpidf+xml\r\n" |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
843 | "Event: presence\r\n", |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
844 | expiration); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
845 | |
|
25603
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
846 | if(strncmp(buddy->name, "sip:", 4)) |
|
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
847 | to = g_strdup_printf("sip:%s", buddy->name); |
|
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
848 | else |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
849 | to = g_strdup(buddy->name); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
850 | |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
851 | tmp = get_contact(sip); |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
852 | contact = g_strdup_printf("%sContact: %s\r\n", tmp2, tmp); |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
853 | g_free(tmp); |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
854 | g_free(tmp2); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
855 | |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
856 | send_sip_request(sip->gc, "SUBSCRIBE", to, to, contact,"",buddy->dialog, |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
857 | (expiration > 0) ? process_subscribe_response : NULL); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
858 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
859 | g_free(to); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
860 | g_free(contact); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
861 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
862 | /* resubscribe before subscription expires */ |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
863 | /* add some jitter */ |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
864 | if (expiration > 60) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
865 | buddy->resubscribe = time(NULL) + (expiration - 60) + (rand() % 50); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
866 | else if (expiration > 0) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
867 | buddy->resubscribe = time(NULL) + ((int) (expiration / 2)); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
868 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
869 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
870 | static void simple_subscribe(struct simple_account_data *sip, struct simple_buddy *buddy) { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
871 | simple_subscribe_exp(sip, buddy, SUBSCRIBE_EXPIRATION); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
872 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
873 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
874 | static void simple_unsubscribe(char *name, struct simple_buddy *buddy, struct simple_account_data *sip) { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
875 | if (buddy->dialog) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
876 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
877 | purple_debug_info("simple", "Unsubscribing from %s\n", name); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
878 | simple_subscribe_exp(sip, buddy, 0); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
879 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
880 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
881 | |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
882 | static gboolean simple_add_lcs_contacts(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
883 | const gchar *tmp; |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
884 | xmlnode *item, *group, *isc; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
885 | const char *name_group; |
| 15884 | 886 | PurpleBuddy *b; |
| 887 | PurpleGroup *g = NULL; | |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
888 | struct simple_buddy *bs; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
889 | int len = msg->bodylen; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
890 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
891 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
892 | tmp = sipmsg_find_header(msg, "Event"); |
|
25603
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
893 | if(tmp && !strncmp(tmp, "vnd-microsoft-roaming-contacts", 30)){ |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
894 | |
| 15884 | 895 | purple_debug_info("simple", "simple_add_lcs_contacts->%s-%d\n", msg->body, len); |
| 896 | /*Convert the contact from XML to Purple Buddies*/ | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
897 | isc = xmlnode_from_str(msg->body, len); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
898 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
899 | /* ToDo. Find for all groups */ |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
900 | if ((group = xmlnode_get_child(isc, "group"))) { |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
901 | name_group = xmlnode_get_attrib(group, "name"); |
| 15884 | 902 | purple_debug_info("simple", "name_group->%s\n", name_group); |
| 903 | g = purple_find_group(name_group); | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
904 | if(!g) |
| 15884 | 905 | g = purple_group_new(name_group); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
906 | } |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
907 | |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
908 | if (!g) { |
| 15884 | 909 | g = purple_find_group("Buddies"); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
910 | if(!g) |
| 15884 | 911 | g = purple_group_new("Buddies"); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
912 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
913 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
914 | for(item = xmlnode_get_child(isc, "contact"); item; item = xmlnode_get_next_twin(item)) |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
915 | { |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
916 | const char *uri, *name, *groups; |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
917 | char *buddy_name; |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
918 | uri = xmlnode_get_attrib(item, "uri"); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
919 | name = xmlnode_get_attrib(item, "name"); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
920 | groups = xmlnode_get_attrib(item, "groups"); |
| 15884 | 921 | purple_debug_info("simple", "URI->%s\n", uri); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
922 | |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
923 | buddy_name = g_strdup_printf("sip:%s", uri); |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
924 | |
| 15884 | 925 | b = purple_find_buddy(sip->account, buddy_name); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
926 | if(!b){ |
| 15884 | 927 | b = purple_buddy_new(sip->account, buddy_name, uri); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
928 | } |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
929 | g_free(buddy_name); |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
930 | |
| 15884 | 931 | purple_blist_add_buddy(b, NULL, g, NULL); |
| 932 | purple_blist_alias_buddy(b, uri); | |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
933 | bs = g_new0(struct simple_buddy, 1); |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24040
diff
changeset
|
934 | bs->name = g_strdup(purple_buddy_get_name(b)); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
935 | g_hash_table_insert(sip->buddies, bs->name, bs); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
936 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
937 | xmlnode_free(isc); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
938 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
939 | return 0; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
940 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
941 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
942 | static void simple_subscribe_buddylist(struct simple_account_data *sip) { |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
943 | gchar *contact = "Event: vnd-microsoft-roaming-contacts\r\nAccept: application/vnd-microsoft-roaming-contacts+xml\r\nSupported: com.microsoft.autoextend\r\nSupported: ms-benotify\r\nProxy-Require: ms-benotify\r\nSupported: ms-piggyback-first-notify\r\n"; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
944 | gchar *to; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
945 | gchar *tmp; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
946 | to = g_strdup_printf("sip:%s@%s", sip->username, sip->servername); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
947 | |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
948 | tmp = get_contact(sip); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
949 | |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
950 | contact = g_strdup_printf("%sContact: %s\r\n", contact, tmp); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
951 | g_free(tmp); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
952 | |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
953 | send_sip_request(sip->gc, "SUBSCRIBE", to, to, contact, "", NULL, simple_add_lcs_contacts); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
954 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
955 | g_free(to); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
956 | g_free(contact); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
957 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
958 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
959 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
960 | static void simple_buddy_resub(char *name, struct simple_buddy *buddy, struct simple_account_data *sip) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
961 | time_t curtime = time(NULL); |
| 15884 | 962 | purple_debug_info("simple", "buddy resub\n"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
963 | if(buddy->resubscribe < curtime) { |
| 15884 | 964 | purple_debug(PURPLE_DEBUG_MISC, "simple", "simple_buddy_resub %s\n", name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
965 | simple_subscribe(sip, buddy); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
966 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
967 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
968 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
969 | static gboolean resend_timeout(struct simple_account_data *sip) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
970 | GSList *tmp = sip->transactions; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
971 | time_t currtime = time(NULL); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
972 | while(tmp) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
973 | struct transaction *trans = tmp->data; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
974 | tmp = tmp->next; |
|
22709
6bd336964410
Printf warning fixes.
Daniel Atallah <datallah@pidgin.im>
parents:
22634
diff
changeset
|
975 | purple_debug_info("simple", "have open transaction age: %lu\n", currtime- trans->time); |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
976 | if((currtime - trans->time > 5) && trans->retries >= 1) { |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
977 | /* TODO 408 */ |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
978 | } else { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
979 | if((currtime - trans->time > 2) && trans->retries == 0) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
980 | trans->retries++; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
981 | sendout_sipmsg(sip, trans->msg); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
982 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
983 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
984 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
985 | return TRUE; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
986 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
987 | |
|
12768
0783fffbd552
[gaim-migrate @ 15115]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12767
diff
changeset
|
988 | static gboolean subscribe_timeout(struct simple_account_data *sip) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
989 | GSList *tmp; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
990 | time_t curtime = time(NULL); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
991 | /* register again if first registration expires */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
992 | if(sip->reregister < curtime) { |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
993 | do_register(sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
994 | } |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
995 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
996 | /* publish status again if our last update is about to expire. */ |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
997 | if (sip->republish != -1 && |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
998 | sip->republish < curtime && |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
999 | purple_account_get_bool(sip->account, "dopublish", TRUE)) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1000 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1001 | purple_debug_info("simple", "subscribe_timeout: republishing status.\n"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1002 | send_open_publish(sip); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1003 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1004 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1005 | /* check for every subscription if we need to resubscribe */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1006 | g_hash_table_foreach(sip->buddies, (GHFunc)simple_buddy_resub, (gpointer)sip); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1007 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1008 | /* remove a timed out suscriber */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1009 | tmp = sip->watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1010 | while(tmp) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1011 | struct simple_watcher *watcher = tmp->data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1012 | if(watcher->expire < curtime) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1013 | watcher_remove(sip, watcher->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1014 | tmp = sip->watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1015 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1016 | if(tmp) tmp = tmp->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1017 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1018 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1019 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1020 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1021 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1022 | static void simple_send_message(struct simple_account_data *sip, const char *to, const char *msg, const char *type) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1023 | gchar *hdr; |
|
13185
ee7ac8a41ec4
[gaim-migrate @ 15547]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13178
diff
changeset
|
1024 | gchar *fullto; |
|
25603
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
1025 | if(strncmp(to, "sip:", 4)) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1026 | fullto = g_strdup_printf("sip:%s", to); |
|
25603
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
1027 | else |
|
13185
ee7ac8a41ec4
[gaim-migrate @ 15547]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13178
diff
changeset
|
1028 | fullto = g_strdup(to); |
|
25603
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
1029 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1030 | if(type) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1031 | hdr = g_strdup_printf("Content-Type: %s\r\n", type); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1032 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1033 | hdr = g_strdup("Content-Type: text/plain\r\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1034 | } |
|
13185
ee7ac8a41ec4
[gaim-migrate @ 15547]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13178
diff
changeset
|
1035 | send_sip_request(sip->gc, "MESSAGE", fullto, fullto, hdr, msg, NULL, NULL); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1036 | g_free(hdr); |
|
13185
ee7ac8a41ec4
[gaim-migrate @ 15547]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13178
diff
changeset
|
1037 | g_free(fullto); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1038 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1039 | |
| 15884 | 1040 | static int simple_im_send(PurpleConnection *gc, const char *who, const char *what, PurpleMessageFlags flags) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1041 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1042 | char *to = g_strdup(who); |
| 15884 | 1043 | char *text = purple_unescape_html(what); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1044 | simple_send_message(sip, to, text, NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1045 | g_free(to); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1046 | g_free(text); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1047 | return 1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1048 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1049 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1050 | static void process_incoming_message(struct simple_account_data *sip, struct sipmsg *msg) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1051 | gchar *from; |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1052 | const gchar *contenttype; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1053 | gboolean found = FALSE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1054 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1055 | from = parse_from(sipmsg_find_header(msg, "From")); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1056 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1057 | if(!from) return; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1058 | |
| 15884 | 1059 | purple_debug(PURPLE_DEBUG_MISC, "simple", "got message from %s: %s\n", from, msg->body); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1060 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1061 | contenttype = sipmsg_find_header(msg, "Content-Type"); |
|
25603
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
1062 | if(!contenttype || !strncmp(contenttype, "text/plain", 10) || !strncmp(contenttype, "text/html", 9)) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1063 | serv_got_im(sip->gc, from, msg->body, 0, time(NULL)); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1064 | send_sip_response(sip->gc, msg, 200, "OK", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1065 | found = TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1066 | } |
|
25603
d9748fa08309
This is a combination of patches from darkrain42 and Marcus Sundberg to fix
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25206
diff
changeset
|
1067 | else if(!strncmp(contenttype, "application/im-iscomposing+xml", 30)) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1068 | xmlnode *isc = xmlnode_from_str(msg->body, msg->bodylen); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1069 | xmlnode *state; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1070 | gchar *statedata; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1071 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1072 | if(!isc) { |
| 15884 | 1073 | purple_debug_info("simple", "process_incoming_message: can not parse iscomposing\n"); |
|
18840
05aeff1821c4
Fix from Will Hawkins to plug some leaks in error cases for the SIMPLE prpl. References #2181.
Daniel Atallah <datallah@pidgin.im>
parents:
18552
diff
changeset
|
1074 | g_free(from); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1075 | return; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1076 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1077 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1078 | state = xmlnode_get_child(isc, "state"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1079 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1080 | if(!state) { |
|
18840
05aeff1821c4
Fix from Will Hawkins to plug some leaks in error cases for the SIMPLE prpl. References #2181.
Daniel Atallah <datallah@pidgin.im>
parents:
18552
diff
changeset
|
1081 | purple_debug_info("simple", "process_incoming_message: no state found\n"); |
|
05aeff1821c4
Fix from Will Hawkins to plug some leaks in error cases for the SIMPLE prpl. References #2181.
Daniel Atallah <datallah@pidgin.im>
parents:
18552
diff
changeset
|
1082 | xmlnode_free(isc); |
|
05aeff1821c4
Fix from Will Hawkins to plug some leaks in error cases for the SIMPLE prpl. References #2181.
Daniel Atallah <datallah@pidgin.im>
parents:
18552
diff
changeset
|
1083 | g_free(from); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1084 | return; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1085 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1086 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1087 | statedata = xmlnode_get_data(state); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1088 | if(statedata) { |
|
24845
6418fb8799b8
Some cleanup. The headers are all NUL delimited, so we don't need to mess with
Daniel Atallah <datallah@pidgin.im>
parents:
24844
diff
changeset
|
1089 | if(strstr(statedata, "active")) |
|
6418fb8799b8
Some cleanup. The headers are all NUL delimited, so we don't need to mess with
Daniel Atallah <datallah@pidgin.im>
parents:
24844
diff
changeset
|
1090 | serv_got_typing(sip->gc, from, 0, PURPLE_TYPING); |
|
6418fb8799b8
Some cleanup. The headers are all NUL delimited, so we don't need to mess with
Daniel Atallah <datallah@pidgin.im>
parents:
24844
diff
changeset
|
1091 | else |
|
6418fb8799b8
Some cleanup. The headers are all NUL delimited, so we don't need to mess with
Daniel Atallah <datallah@pidgin.im>
parents:
24844
diff
changeset
|
1092 | serv_got_typing_stopped(sip->gc, from); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1093 | |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1094 | g_free(statedata); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1095 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1096 | xmlnode_free(isc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1097 | send_sip_response(sip->gc, msg, 200, "OK", NULL); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1098 | found = TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1099 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1100 | if(!found) { |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
18840
diff
changeset
|
1101 | purple_debug_info("simple", "got unknown mime-type\n"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1102 | send_sip_response(sip->gc, msg, 415, "Unsupported media type", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1103 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1104 | g_free(from); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1105 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1106 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1107 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1108 | gboolean process_register_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1109 | const gchar *tmp; |
| 15884 | 1110 | purple_debug(PURPLE_DEBUG_MISC, "simple", "in process register response response: %d\n", msg->response); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1111 | switch (msg->response) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1112 | case 200: |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1113 | if(sip->registerstatus < SIMPLE_REGISTER_COMPLETE) { /* registered */ |
| 15884 | 1114 | if(purple_account_get_bool(sip->account, "dopublish", TRUE)) { |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1115 | send_open_publish(sip); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1116 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1117 | } |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1118 | sip->registerstatus = SIMPLE_REGISTER_COMPLETE; |
| 15884 | 1119 | purple_connection_set_state(sip->gc, PURPLE_CONNECTED); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1120 | |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1121 | /* get buddies from blist */ |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1122 | simple_get_buddies(sip->gc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1123 | |
|
12768
0783fffbd552
[gaim-migrate @ 15115]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12767
diff
changeset
|
1124 | subscribe_timeout(sip); |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1125 | tmp = sipmsg_find_header(msg, "Allow-Events"); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1126 | if(tmp && strstr(tmp, "vnd-microsoft-provisioning")){ |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1127 | simple_subscribe_buddylist(sip); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1128 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1129 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1130 | break; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1131 | case 401: |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1132 | if(sip->registerstatus != SIMPLE_REGISTER_RETRY) { |
| 15884 | 1133 | purple_debug_info("simple", "REGISTER retries %d\n", sip->registrar.retries); |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1134 | if(sip->registrar.retries > SIMPLE_REGISTER_RETRY_MAX) { |
|
20658
91594d39738c
Clear the password consistently when we get a "Signed-On elsewhere" or a "Invalid Password" disconnection. Disconnection reason codes will take care of this in the core, but until then, this is ok. Fixes #3204.
Daniel Atallah <datallah@pidgin.im>
parents:
19991
diff
changeset
|
1135 | if (!purple_account_get_remember_password(sip->gc->account)) |
|
91594d39738c
Clear the password consistently when we get a "Signed-On elsewhere" or a "Invalid Password" disconnection. Disconnection reason codes will take care of this in the core, but until then, this is ok. Fixes #3204.
Daniel Atallah <datallah@pidgin.im>
parents:
19991
diff
changeset
|
1136 | purple_account_set_password(sip->gc->account, NULL); |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1137 | purple_connection_error_reason(sip->gc, |
| 21279 | 1138 | PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1139 | _("Incorrect password.")); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1140 | return TRUE; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1141 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1142 | tmp = sipmsg_find_header(msg, "WWW-Authenticate"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1143 | fill_auth(sip, tmp, &sip->registrar); |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1144 | sip->registerstatus = SIMPLE_REGISTER_RETRY; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1145 | do_register(sip); |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1146 | } |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1147 | break; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1148 | default: |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1149 | if (sip->registerstatus != SIMPLE_REGISTER_RETRY) { |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1150 | purple_debug_info("simple", "Unrecognized return code for REGISTER.\n"); |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1151 | if (sip->registrar.retries > SIMPLE_REGISTER_RETRY_MAX) { |
| 21279 | 1152 | purple_connection_error_reason(sip->gc, |
| 1153 | PURPLE_CONNECTION_ERROR_OTHER_ERROR, | |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1154 | _("Unknown server response.")); |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1155 | return TRUE; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1156 | } |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1157 | sip->registerstatus = SIMPLE_REGISTER_RETRY; |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1158 | do_register(sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1159 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1160 | break; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1161 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1162 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1163 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1164 | |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1165 | static gboolean dialog_match(struct sip_dialog *dialog, struct sipmsg *msg) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1166 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1167 | const gchar *fromhdr; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1168 | const gchar *tohdr; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1169 | const gchar *callid; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1170 | gchar *ourtag, *theirtag; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1171 | gboolean match = FALSE; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1172 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1173 | fromhdr = sipmsg_find_header(msg, "From"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1174 | tohdr = sipmsg_find_header(msg, "To"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1175 | callid = sipmsg_find_header(msg, "Call-ID"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1176 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1177 | if (!fromhdr || !tohdr || !callid) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1178 | return FALSE; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1179 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1180 | ourtag = find_tag(tohdr); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1181 | theirtag = find_tag(fromhdr); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1182 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1183 | if (ourtag && theirtag && |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1184 | !strcmp(dialog->callid, callid) && |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1185 | !strcmp(dialog->ourtag, ourtag) && |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1186 | !strcmp(dialog->theirtag, theirtag)) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1187 | match = TRUE; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1188 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1189 | g_free(ourtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1190 | g_free(theirtag); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1191 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1192 | return match; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1193 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1194 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1195 | static void process_incoming_notify(struct simple_account_data *sip, struct sipmsg *msg) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1196 | gchar *from; |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1197 | const gchar *fromhdr; |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1198 | gchar *basicstatus_data; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1199 | xmlnode *pidf; |
|
14132
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1200 | xmlnode *basicstatus = NULL, *tuple, *status; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1201 | gboolean isonline = FALSE; |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1202 | struct simple_buddy *b = NULL; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1203 | const gchar *sshdr = NULL; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1204 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1205 | fromhdr = sipmsg_find_header(msg, "From"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1206 | from = parse_from(fromhdr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1207 | if(!from) return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1208 | |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1209 | b = g_hash_table_lookup(sip->buddies, from); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1210 | if (!b) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1211 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1212 | g_free(from); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1213 | purple_debug_info("simple", "Could not find the buddy.\n"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1214 | return; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1215 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1216 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1217 | if (b->dialog && !dialog_match(b->dialog, msg)) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1218 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1219 | /* We only accept notifies from people that |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1220 | * we already have a dialog with. |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1221 | */ |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1222 | purple_debug_info("simple","No corresponding dialog for notify--discard\n"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1223 | g_free(from); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1224 | return; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1225 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1226 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1227 | pidf = xmlnode_from_str(msg->body, msg->bodylen); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1228 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1229 | if(!pidf) { |
| 15884 | 1230 | purple_debug_info("simple", "process_incoming_notify: no parseable pidf\n"); |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1231 | sshdr = sipmsg_find_header(msg, "Subscription-State"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1232 | if (sshdr) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1233 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1234 | int i = 0; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1235 | gchar **ssparts = g_strsplit(sshdr, ":", 0); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1236 | while (ssparts[i]) |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1237 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1238 | g_strchug(ssparts[i]); |
|
22634
faaadc2d74bb
Use purple_str_has_prefix which provides backwards compatibility with older
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22388
diff
changeset
|
1239 | if (purple_str_has_prefix(ssparts[i], "terminated")) |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1240 | { |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1241 | purple_debug_info("simple", "Subscription expired!"); |
| 24638 | 1242 | if (b->dialog) |
| 1243 | { | |
| 1244 | g_free(b->dialog->ourtag); | |
| 1245 | g_free(b->dialog->theirtag); | |
| 1246 | g_free(b->dialog->callid); | |
| 1247 | g_free(b->dialog); | |
| 1248 | b->dialog = NULL; | |
| 1249 | } | |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1250 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1251 | purple_prpl_got_user_status(sip->account, from, "offline", NULL); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1252 | break; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1253 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1254 | i++; |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1255 | } |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1256 | g_strfreev(ssparts); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1257 | } |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1258 | send_sip_response(sip->gc, msg, 200, "OK", NULL); |
|
18840
05aeff1821c4
Fix from Will Hawkins to plug some leaks in error cases for the SIMPLE prpl. References #2181.
Daniel Atallah <datallah@pidgin.im>
parents:
18552
diff
changeset
|
1259 | g_free(from); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1260 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1261 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1262 | |
|
14132
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1263 | if ((tuple = xmlnode_get_child(pidf, "tuple"))) |
|
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1264 | if ((status = xmlnode_get_child(tuple, "status"))) |
|
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1265 | basicstatus = xmlnode_get_child(status, "basic"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1266 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1267 | if(!basicstatus) { |
| 15884 | 1268 | purple_debug_info("simple", "process_incoming_notify: no basic found\n"); |
|
14132
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1269 | xmlnode_free(pidf); |
|
18840
05aeff1821c4
Fix from Will Hawkins to plug some leaks in error cases for the SIMPLE prpl. References #2181.
Daniel Atallah <datallah@pidgin.im>
parents:
18552
diff
changeset
|
1270 | g_free(from); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1271 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1272 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1273 | |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1274 | basicstatus_data = xmlnode_get_data(basicstatus); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1275 | |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1276 | if(!basicstatus_data) { |
| 15884 | 1277 | purple_debug_info("simple", "process_incoming_notify: no basic data found\n"); |
|
14132
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1278 | xmlnode_free(pidf); |
|
18840
05aeff1821c4
Fix from Will Hawkins to plug some leaks in error cases for the SIMPLE prpl. References #2181.
Daniel Atallah <datallah@pidgin.im>
parents:
18552
diff
changeset
|
1279 | g_free(from); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1280 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1281 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1282 | |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1283 | if(strstr(basicstatus_data, "open")) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1284 | isonline = TRUE; |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1285 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1286 | |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1287 | if(isonline) |
|
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1288 | purple_prpl_got_user_status(sip->account, from, "available", NULL); |
|
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1289 | else |
|
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1290 | purple_prpl_got_user_status(sip->account, from, "offline", NULL); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1291 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1292 | xmlnode_free(pidf); |
|
20989
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1293 | g_free(from); |
|
5707d9d29718
Patch from Will Hawkins for some cleanup of the SIMPLE notify message processing. This should hopefully fix some cases when a user signs off but we don't notice. Fixes #3507.
Daniel Atallah <datallah@pidgin.im>
parents:
20988
diff
changeset
|
1294 | g_free(basicstatus_data); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1295 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1296 | send_sip_response(sip->gc, msg, 200, "OK", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1297 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1298 | |
| 15884 | 1299 | static unsigned int simple_typing(PurpleConnection *gc, const char *name, PurpleTypingState state) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1300 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1301 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1302 | gchar *xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1303 | "<isComposing xmlns=\"urn:ietf:params:xml:ns:im-iscomposing\"\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1304 | "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1305 | "xsi:schemaLocation=\"urn:ietf:params:xml:ns:im-composing iscomposing.xsd\">\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1306 | "<state>%s</state>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1307 | "<contenttype>text/plain</contenttype>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1308 | "<refresh>60</refresh>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1309 | "</isComposing>"; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1310 | gchar *recv = g_strdup(name); |
| 15884 | 1311 | if(state == PURPLE_TYPING) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1312 | gchar *msg = g_strdup_printf(xml, "active"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1313 | simple_send_message(sip, recv, msg, "application/im-iscomposing+xml"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1314 | g_free(msg); |
| 15884 | 1315 | } else /* TODO: Only if (state == PURPLE_TYPED) ? */ { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1316 | gchar *msg = g_strdup_printf(xml, "idle"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1317 | simple_send_message(sip, recv, msg, "application/im-iscomposing+xml"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1318 | g_free(msg); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1319 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1320 | g_free(recv); |
|
13844
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13751
diff
changeset
|
1321 | /* |
|
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13751
diff
changeset
|
1322 | * TODO: Is this right? It will cause the core to call |
| 15884 | 1323 | * serv_send_typing(gc, who, PURPLE_TYPING) once every second |
|
13844
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13751
diff
changeset
|
1324 | * until the user stops typing. If that's not desired, |
|
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13751
diff
changeset
|
1325 | * then return 0 instead. |
|
835b8f7b3d1d
[gaim-migrate @ 16295]
Mark Doliner <markdoliner@pidgin.im>
parents:
13751
diff
changeset
|
1326 | */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1327 | return 1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1328 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1329 | |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1330 | static gchar *find_tag(const gchar *hdr) { |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1331 | const gchar *tmp = strstr(hdr, ";tag="), *tmp2; |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1332 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1333 | if(!tmp) return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1334 | tmp += 5; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1335 | if((tmp2 = strchr(tmp, ';'))) { |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1336 | return g_strndup(tmp, tmp2 - tmp); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1337 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1338 | return g_strdup(tmp); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1339 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1340 | |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1341 | static gchar* gen_xpidf(struct simple_account_data *sip) { |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1342 | gchar *doc = g_strdup_printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1343 | "<presence>\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1344 | "<presentity uri=\"sip:%s@%s;method=SUBSCRIBE\"/>\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1345 | "<display name=\"sip:%s@%s\"/>\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1346 | "<atom id=\"1234\">\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1347 | "<address uri=\"sip:%s@%s\">\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1348 | "<status status=\"%s\"/>\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1349 | "</address>\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1350 | "</atom>\n" |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1351 | "</presence>\n", |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1352 | sip->username, |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1353 | sip->servername, |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1354 | sip->username, |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1355 | sip->servername, |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1356 | sip->username, |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1357 | sip->servername, |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1358 | sip->status); |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1359 | return doc; |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1360 | } |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1361 | |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1362 | static gchar* gen_pidf(struct simple_account_data *sip, gboolean open) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1363 | gchar *doc = g_strdup_printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1364 | "<presence xmlns=\"urn:ietf:params:xml:ns:pidf\"\n" |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1365 | "xmlns:im=\"urn:ietf:params:xml:ns:pidf:im\"\n" |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1366 | "entity=\"sip:%s@%s\">\n" |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1367 | "<tuple id=\"bs35r9f\">\n" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1368 | "<status>\n" |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1369 | "<basic>%s</basic>\n" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1370 | "</status>\n" |
|
13656
32db312f1b9c
[gaim-migrate @ 16057]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13581
diff
changeset
|
1371 | "<note>%s</note>\n" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1372 | "</tuple>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1373 | "</presence>", |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1374 | sip->username, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1375 | sip->servername, |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1376 | (open == TRUE) ? "open" : "closed", |
|
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1377 | (open == TRUE) ? sip->status : ""); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1378 | return doc; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1379 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1380 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1381 | static void send_notify(struct simple_account_data *sip, struct simple_watcher *watcher) { |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1382 | gchar *doc = watcher->needsxpidf ? gen_xpidf(sip) : gen_pidf(sip, TRUE); |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1383 | gchar *hdr = watcher->needsxpidf ? "Event: presence\r\nContent-Type: application/xpidf+xml\r\n" : "Event: presence\r\nContent-Type: application/pidf+xml\r\n"; |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1384 | send_sip_request(sip->gc, "NOTIFY", watcher->name, watcher->name, hdr, doc, &watcher->dialog, NULL); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1385 | g_free(doc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1386 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1387 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1388 | static gboolean process_publish_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { |
|
22182
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1389 | |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1390 | const gchar *etag = NULL; |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1391 | |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1392 | if(msg->response != 200 && msg->response != 408) { |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1393 | /* never send again */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1394 | sip->republish = -1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1395 | } |
|
22182
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1396 | |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1397 | etag = sipmsg_find_header(msg, "SIP-Etag"); |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1398 | if (etag) { |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1399 | /* we must store the etag somewhere. */ |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1400 | g_free(sip->publish_etag); |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1401 | sip->publish_etag = g_strdup(etag); |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1402 | } |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1403 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1404 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1405 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1406 | |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1407 | static void send_open_publish(struct simple_account_data *sip) { |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1408 | gchar *add_headers = NULL; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1409 | gchar *uri = g_strdup_printf("sip:%s@%s", sip->username, sip->servername); |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1410 | gchar *doc = gen_pidf(sip, TRUE); |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1411 | |
|
22182
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1412 | add_headers = g_strdup_printf("%s%s%s%s%d\r\n%s", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1413 | sip->publish_etag ? "SIP-If-Match: " : "", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1414 | sip->publish_etag ? sip->publish_etag : "", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1415 | sip->publish_etag ? "\r\n" : "", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1416 | "Expires: ", PUBLISH_EXPIRATION, |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1417 | "Event: presence\r\n" |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1418 | "Content-Type: application/pidf+xml\r\n"); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1419 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1420 | send_sip_request(sip->gc, "PUBLISH", uri, uri, |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1421 | add_headers, doc, NULL, process_publish_response); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1422 | sip->republish = time(NULL) + PUBLISH_EXPIRATION - 50; |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1423 | g_free(uri); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1424 | g_free(doc); |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1425 | g_free(add_headers); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1426 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1427 | |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1428 | static void send_closed_publish(struct simple_account_data *sip) { |
|
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1429 | gchar *uri = g_strdup_printf("sip:%s@%s", sip->username, sip->servername); |
|
22182
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1430 | gchar *add_headers, *doc; |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1431 | |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1432 | add_headers = g_strdup_printf("%s%s%s%s", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1433 | sip->publish_etag ? "SIP-If-Match: " : "", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1434 | sip->publish_etag ? sip->publish_etag : "", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1435 | sip->publish_etag ? "\r\n" : "", |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1436 | "Expires: 600\r\n" |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1437 | "Event: presence\r\n" |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1438 | "Content-Type: application/pidf+xml\r\n"); |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1439 | |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1440 | doc = gen_pidf(sip, FALSE); |
|
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1441 | send_sip_request(sip->gc, "PUBLISH", uri, uri, add_headers, |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1442 | doc, NULL, process_publish_response); |
|
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1443 | /*sip->republish = time(NULL) + 500;*/ |
|
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1444 | g_free(uri); |
|
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1445 | g_free(doc); |
|
22182
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
1446 | g_free(add_headers); |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1447 | } |
|
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1448 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1449 | static void process_incoming_subscribe(struct simple_account_data *sip, struct sipmsg *msg) { |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1450 | const char *from_hdr = sipmsg_find_header(msg, "From"); |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1451 | gchar *from = parse_from(from_hdr); |
|
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1452 | gchar *theirtag = find_tag(from_hdr); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1453 | gchar *ourtag = find_tag(sipmsg_find_header(msg, "To")); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1454 | gboolean tagadded = FALSE; |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1455 | const gchar *callid = sipmsg_find_header(msg, "Call-ID"); |
|
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1456 | const gchar *expire = sipmsg_find_header(msg, "Expire"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1457 | gchar *tmp; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1458 | struct simple_watcher *watcher = watcher_find(sip, from); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1459 | if(!ourtag) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1460 | tagadded = TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1461 | ourtag = gentag(); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1462 | } |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1463 | if(!watcher) { /* new subscription */ |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1464 | const gchar *acceptheader = sipmsg_find_header(msg, "Accept"); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1465 | gboolean needsxpidf = FALSE; |
| 15884 | 1466 | if(!purple_privacy_check(sip->account, from)) { |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1467 | send_sip_response(sip->gc, msg, 202, "Ok", NULL); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1468 | goto privend; |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1469 | } |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1470 | if(acceptheader) { |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1471 | const gchar *tmp = acceptheader; |
|
14132
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1472 | gboolean foundpidf = FALSE; |
|
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1473 | gboolean foundxpidf = FALSE; |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1474 | while(tmp && tmp < acceptheader + strlen(acceptheader)) { |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1475 | gchar *tmp2 = strchr(tmp, ','); |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1476 | if(tmp2) *tmp2 = '\0'; |
|
17155
143ff2796376
Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents:
16746
diff
changeset
|
1477 | if(!g_ascii_strcasecmp("application/pidf+xml", tmp)) |
|
14132
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1478 | foundpidf = TRUE; |
|
17155
143ff2796376
Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents:
16746
diff
changeset
|
1479 | if(!g_ascii_strcasecmp("application/xpidf+xml", tmp)) |
|
14132
2325b60d8b77
[gaim-migrate @ 16691]
Daniel Atallah <datallah@pidgin.im>
parents:
14131
diff
changeset
|
1480 | foundxpidf = TRUE; |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1481 | if(tmp2) { |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1482 | *tmp2 = ','; |
|
17653
a71ca6b486a0
Fix a freeze caused by improper SIMPLE message parsing. Thanks, Michal Matyska! Fixes #1037
Sean Egan <seanegan@pidgin.im>
parents:
17226
diff
changeset
|
1483 | tmp = tmp2 + 1; |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1484 | while(*tmp == ' ') tmp++; |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1485 | } else |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1486 | tmp = 0; |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1487 | } |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1488 | if(!foundpidf && foundxpidf) needsxpidf = TRUE; |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1489 | } |
|
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1490 | watcher = watcher_create(sip, from, callid, ourtag, theirtag, needsxpidf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1491 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1492 | if(tagadded) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1493 | gchar *to = g_strdup_printf("%s;tag=%s", sipmsg_find_header(msg, "To"), ourtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1494 | sipmsg_remove_header(msg, "To"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1495 | sipmsg_add_header(msg, "To", to); |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1496 | g_free(to); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1497 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1498 | if(expire) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1499 | watcher->expire = time(NULL) + strtol(expire, NULL, 10); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1500 | else |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1501 | watcher->expire = time(NULL) + 600; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1502 | sipmsg_remove_header(msg, "Contact"); |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1503 | tmp = get_contact(sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1504 | sipmsg_add_header(msg, "Contact", tmp); |
|
13178
824d50326672
[gaim-migrate @ 15540]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13130
diff
changeset
|
1505 | g_free(tmp); |
| 15884 | 1506 | purple_debug_info("simple", "got subscribe: name %s ourtag %s theirtag %s callid %s\n", watcher->name, watcher->dialog.ourtag, watcher->dialog.theirtag, watcher->dialog.callid); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1507 | send_sip_response(sip->gc, msg, 200, "Ok", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1508 | send_notify(sip, watcher); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1509 | privend: |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1510 | g_free(from); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1511 | g_free(theirtag); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1512 | g_free(ourtag); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1513 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1514 | |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1515 | static void process_input_message(struct simple_account_data *sip, struct sipmsg *msg) { |
|
12745
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1516 | gboolean found = FALSE; |
|
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1517 | if(msg->response == 0) { /* request */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1518 | if(!strcmp(msg->method, "MESSAGE")) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1519 | process_incoming_message(sip, msg); |
|
12745
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1520 | found = TRUE; |
|
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1521 | } else if(!strcmp(msg->method, "NOTIFY")) { |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1522 | process_incoming_notify(sip, msg); |
|
12745
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1523 | found = TRUE; |
|
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1524 | } else if(!strcmp(msg->method, "SUBSCRIBE")) { |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1525 | process_incoming_subscribe(sip, msg); |
|
12745
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1526 | found = TRUE; |
|
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1527 | } else { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1528 | send_sip_response(sip->gc, msg, 501, "Not implemented", NULL); |
|
11190
16f02ac58a38
[gaim-migrate @ 13308]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11189
diff
changeset
|
1529 | } |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1530 | } else { /* response */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1531 | struct transaction *trans = transactions_find(sip, msg); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1532 | if(trans) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1533 | if(msg->response == 407) { |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1534 | gchar *resend, *auth; |
|
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1535 | const gchar *ptmp; |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
1536 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1537 | if(sip->proxy.retries > 3) return; |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1538 | sip->proxy.retries++; |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1539 | /* do proxy authentication */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1540 | |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
1541 | ptmp = sipmsg_find_header(msg, "Proxy-Authenticate"); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1542 | |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1543 | fill_auth(sip, ptmp, &sip->proxy); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1544 | auth = auth_header(sip, &sip->proxy, trans->msg->method, trans->msg->target); |
|
13273
68a4ff81c348
[gaim-migrate @ 15638]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13201
diff
changeset
|
1545 | sipmsg_remove_header(trans->msg, "Proxy-Authorization"); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1546 | sipmsg_add_header(trans->msg, "Proxy-Authorization", auth); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1547 | g_free(auth); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1548 | resend = sipmsg_to_string(trans->msg); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1549 | /* resend request */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1550 | sendout_pkt(sip->gc, resend); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1551 | g_free(resend); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1552 | } else { |
|
11517
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1553 | if(msg->response == 100) { |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1554 | /* ignore provisional response */ |
| 15884 | 1555 | purple_debug_info("simple", "got trying response\n"); |
|
11517
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1556 | } else { |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1557 | sip->proxy.retries = 0; |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1558 | if(!strcmp(trans->msg->method, "REGISTER")) { |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1559 | |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1560 | /* This is encountered when a REGISTER request was ... |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1561 | */ |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1562 | if(msg->response == 401) { |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1563 | /* denied until further authentication was provided. */ |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1564 | sip->registrar.retries++; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1565 | } |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1566 | else if (msg->response != 200) { |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1567 | /* denied for some other reason! */ |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1568 | sip->registrar.retries++; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1569 | } |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1570 | else { |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1571 | /* accepted! */ |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1572 | sip->registrar.retries = 0; |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1573 | } |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1574 | } else { |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1575 | if(msg->response == 401) { |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1576 | /* This is encountered when a generic (MESSAGE, NOTIFY, etc) |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1577 | * was denied until further authorization is provided. |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1578 | */ |
|
21100
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1579 | gchar *resend, *auth; |
|
814637ced463
Some constification, which also found and fixed some potential double-free
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21076
diff
changeset
|
1580 | const gchar *ptmp; |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1581 | |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1582 | if(sip->registrar.retries > SIMPLE_REGISTER_RETRY_MAX) return; |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1583 | sip->registrar.retries++; |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1584 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1585 | ptmp = sipmsg_find_header(msg, "WWW-Authenticate"); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1586 | |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1587 | fill_auth(sip, ptmp, &sip->registrar); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1588 | auth = auth_header(sip, &sip->registrar, trans->msg->method, trans->msg->target); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1589 | sipmsg_remove_header(trans->msg, "Authorization"); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1590 | sipmsg_add_header(trans->msg, "Authorization", auth); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1591 | g_free(auth); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1592 | resend = sipmsg_to_string(trans->msg); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1593 | /* resend request */ |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1594 | sendout_pkt(sip->gc, resend); |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1595 | g_free(resend); |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1596 | } else { |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1597 | /* Reset any count of retries that may have |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1598 | * accumulated in the above branch. |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1599 | */ |
|
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1600 | sip->registrar.retries = 0; |
|
13348
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1601 | } |
|
1fe9d587d705
[gaim-migrate @ 15717]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13297
diff
changeset
|
1602 | } |
|
11517
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1603 | if(trans->callback) { |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1604 | /* call the callback to process response*/ |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1605 | (trans->callback)(sip, msg, trans); |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1606 | } |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1607 | transactions_remove(sip, trans); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1608 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1609 | } |
|
12745
1dc3525647c2
[gaim-migrate @ 15092]
Daniel Atallah <datallah@pidgin.im>
parents:
12741
diff
changeset
|
1610 | found = TRUE; |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1611 | } else { |
| 15884 | 1612 | purple_debug(PURPLE_DEBUG_MISC, "simple", "received response to unknown transaction"); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1613 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1614 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1615 | if(!found) { |
| 15884 | 1616 | purple_debug(PURPLE_DEBUG_MISC, "simple", "received a unknown sip message with method %s and response %d\n", msg->method, msg->response); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1617 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1618 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1619 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1620 | static void process_input(struct simple_account_data *sip, struct sip_connection *conn) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1621 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1622 | char *cur; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1623 | char *dummy; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1624 | struct sipmsg *msg; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1625 | int restlen; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1626 | cur = conn->inbuf; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1627 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1628 | /* according to the RFC remove CRLF at the beginning */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1629 | while(*cur == '\r' || *cur == '\n') { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1630 | cur++; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1631 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1632 | if(cur != conn->inbuf) { |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1633 | memmove(conn->inbuf, cur, conn->inbufused - (cur - conn->inbuf)); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1634 | conn->inbufused = strlen(conn->inbuf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1635 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1636 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1637 | /* Received a full Header? */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1638 | if((cur = strstr(conn->inbuf, "\r\n\r\n")) != NULL) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1639 | time_t currtime = time(NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1640 | cur += 2; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1641 | cur[0] = '\0'; |
| 15884 | 1642 | purple_debug_info("simple", "\n\nreceived - %s\n######\n%s\n#######\n\n", ctime(&currtime), conn->inbuf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1643 | msg = sipmsg_parse_header(conn->inbuf); |
|
24758
26c1c4bc47c0
Add a NULL check to fix a crash. Fixes #4516.
Richard Laager <rlaager@pidgin.im>
parents:
24638
diff
changeset
|
1644 | |
|
26c1c4bc47c0
Add a NULL check to fix a crash. Fixes #4516.
Richard Laager <rlaager@pidgin.im>
parents:
24638
diff
changeset
|
1645 | if(!msg) { |
|
26c1c4bc47c0
Add a NULL check to fix a crash. Fixes #4516.
Richard Laager <rlaager@pidgin.im>
parents:
24638
diff
changeset
|
1646 | /* Should we re-use this error message (from lower in the function)? */ |
|
26c1c4bc47c0
Add a NULL check to fix a crash. Fixes #4516.
Richard Laager <rlaager@pidgin.im>
parents:
24638
diff
changeset
|
1647 | purple_debug_misc("simple", "received a incomplete sip msg: %s\n", conn->inbuf); |
|
26c1c4bc47c0
Add a NULL check to fix a crash. Fixes #4516.
Richard Laager <rlaager@pidgin.im>
parents:
24638
diff
changeset
|
1648 | return; |
|
26c1c4bc47c0
Add a NULL check to fix a crash. Fixes #4516.
Richard Laager <rlaager@pidgin.im>
parents:
24638
diff
changeset
|
1649 | } |
|
26c1c4bc47c0
Add a NULL check to fix a crash. Fixes #4516.
Richard Laager <rlaager@pidgin.im>
parents:
24638
diff
changeset
|
1650 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1651 | cur[0] = '\r'; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1652 | cur += 2; |
|
14131
2cd4ddea2f52
[gaim-migrate @ 16690]
Daniel Atallah <datallah@pidgin.im>
parents:
14043
diff
changeset
|
1653 | restlen = conn->inbufused - (cur - conn->inbuf); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1654 | if(restlen >= msg->bodylen) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1655 | dummy = g_malloc(msg->bodylen + 1); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1656 | memcpy(dummy, cur, msg->bodylen); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1657 | dummy[msg->bodylen] = '\0'; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1658 | msg->body = dummy; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1659 | cur += msg->bodylen; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1660 | memmove(conn->inbuf, cur, conn->inbuflen - (cur - conn->inbuf)); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1661 | conn->inbufused = strlen(conn->inbuf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1662 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1663 | sipmsg_free(msg); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1664 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1665 | } |
| 15884 | 1666 | purple_debug(PURPLE_DEBUG_MISC, "simple", "in process response response: %d\n", msg->response); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1667 | process_input_message(sip, msg); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1668 | } else { |
| 15884 | 1669 | purple_debug(PURPLE_DEBUG_MISC, "simple", "received a incomplete sip msg: %s\n", conn->inbuf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1670 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1671 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1672 | |
| 15884 | 1673 | static void simple_udp_process(gpointer data, gint source, PurpleInputCondition con) { |
| 1674 | PurpleConnection *gc = data; | |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1675 | struct simple_account_data *sip = gc->proto_data; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1676 | struct sipmsg *msg; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1677 | int len; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1678 | time_t currtime; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1679 | |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1680 | static char buffer[65536]; |
|
12770
f9bbe68a0c88
[gaim-migrate @ 15117]
Daniel Atallah <datallah@pidgin.im>
parents:
12769
diff
changeset
|
1681 | if((len = recv(source, buffer, sizeof(buffer) - 1, 0)) > 0) { |
|
12748
f2cbf850b529
[gaim-migrate @ 15095]
Daniel Atallah <datallah@pidgin.im>
parents:
12746
diff
changeset
|
1682 | buffer[len] = '\0'; |
| 15884 | 1683 | purple_debug_info("simple", "\n\nreceived - %s\n######\n%s\n#######\n\n", ctime(&currtime), buffer); |
|
12748
f2cbf850b529
[gaim-migrate @ 15095]
Daniel Atallah <datallah@pidgin.im>
parents:
12746
diff
changeset
|
1684 | msg = sipmsg_parse_msg(buffer); |
|
f2cbf850b529
[gaim-migrate @ 15095]
Daniel Atallah <datallah@pidgin.im>
parents:
12746
diff
changeset
|
1685 | if(msg) process_input_message(sip, msg); |
|
f2cbf850b529
[gaim-migrate @ 15095]
Daniel Atallah <datallah@pidgin.im>
parents:
12746
diff
changeset
|
1686 | } |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1687 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1688 | |
| 15884 | 1689 | static void simple_input_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1690 | { |
| 15884 | 1691 | PurpleConnection *gc = data; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1692 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1693 | int len; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1694 | struct sip_connection *conn = connection_find(sip, source); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1695 | if(!conn) { |
| 15884 | 1696 | purple_debug_error("simple", "Connection not found!\n"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1697 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1698 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1699 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1700 | if(conn->inbuflen < conn->inbufused + SIMPLE_BUF_INC) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1701 | conn->inbuflen += SIMPLE_BUF_INC; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1702 | conn->inbuf = g_realloc(conn->inbuf, conn->inbuflen); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1703 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1704 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1705 | len = read(source, conn->inbuf + conn->inbufused, SIMPLE_BUF_INC - 1); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1706 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1707 | if(len < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1708 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1709 | else if(len <= 0) { |
| 15884 | 1710 | purple_debug_info("simple", "simple_input_cb: read error\n"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1711 | connection_remove(sip, source); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1712 | if(sip->fd == source) sip->fd = -1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1713 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1714 | } |
|
22277
7c386db62c81
Don't send keep-alives if we've received data since in the last KEEPALIVE_INTERVAL seconds
Sean Egan <seanegan@pidgin.im>
parents:
22182
diff
changeset
|
1715 | gc->last_received = time(NULL); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1716 | conn->inbufused += len; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1717 | conn->inbuf[conn->inbufused] = '\0'; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1718 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1719 | process_input(sip, conn); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1720 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1721 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1722 | /* Callback for new connections on incoming TCP port */ |
| 15884 | 1723 | static void simple_newconn_cb(gpointer data, gint source, PurpleInputCondition cond) { |
| 1724 | PurpleConnection *gc = data; | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1725 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1726 | struct sip_connection *conn; |
|
24040
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1727 | int newfd, flags; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1728 | |
|
24040
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1729 | newfd = accept(source, NULL, NULL); |
|
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1730 | |
|
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1731 | flags = fcntl(newfd, F_GETFL); |
|
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1732 | fcntl(newfd, F_SETFL, flags | O_NONBLOCK); |
|
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1733 | #ifndef _WIN32 |
|
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1734 | fcntl(newfd, F_SETFD, FD_CLOEXEC); |
|
24ff94bfd09d
Use non-blocking io for inbound TCP connections for SIMPLE.
Daniel Atallah <datallah@pidgin.im>
parents:
23495
diff
changeset
|
1735 | #endif |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1736 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1737 | conn = connection_create(sip, newfd); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1738 | |
| 15884 | 1739 | conn->inputhandler = purple_input_add(newfd, PURPLE_INPUT_READ, simple_input_cb, gc); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1740 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1741 | |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1742 | static void login_cb(gpointer data, gint source, const gchar *error_message) { |
| 15884 | 1743 | PurpleConnection *gc = data; |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1744 | struct simple_account_data *sip; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1745 | struct sip_connection *conn; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1746 | |
| 15884 | 1747 | if (!PURPLE_CONNECTION_IS_VALID(gc)) |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1748 | { |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1749 | if (source >= 0) |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1750 | close(source); |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1751 | return; |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1752 | } |
|
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1753 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1754 | if(source < 0) { |
| 21279 | 1755 | purple_connection_error_reason(gc, |
| 1756 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1757 | _("Could not connect")); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1758 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1759 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1760 | |
|
14180
77010795da2c
[gaim-migrate @ 16752]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
1761 | sip = gc->proto_data; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1762 | sip->fd = source; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1763 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1764 | conn = connection_create(sip, source); |
|
13093
e27434c31f00
[gaim-migrate @ 15454]
Daniel Atallah <datallah@pidgin.im>
parents:
13089
diff
changeset
|
1765 | |
| 15884 | 1766 | sip->registertimeout = purple_timeout_add((rand()%100)+10*1000, (GSourceFunc)subscribe_timeout, sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1767 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1768 | do_register(sip); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1769 | |
| 15884 | 1770 | conn->inputhandler = purple_input_add(sip->fd, PURPLE_INPUT_READ, simple_input_cb, gc); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1771 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1772 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1773 | static guint simple_ht_hash_nick(const char *nick) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1774 | char *lc = g_utf8_strdown(nick, -1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1775 | guint bucket = g_str_hash(lc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1776 | g_free(lc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1777 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1778 | return bucket; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1779 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1780 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1781 | static gboolean simple_ht_equals_nick(const char *nick1, const char *nick2) { |
| 15884 | 1782 | return (purple_utf8_strcasecmp(nick1, nick2) == 0); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1783 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1784 | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1785 | static void simple_udp_host_resolved_listen_cb(int listenfd, gpointer data) { |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1786 | struct simple_account_data *sip = (struct simple_account_data*) data; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1787 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1788 | sip->listen_data = NULL; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1789 | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1790 | if(listenfd == -1) { |
| 21279 | 1791 | purple_connection_error_reason(sip->gc, |
| 1792 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1793 | _("Could not create listen socket")); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1794 | return; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1795 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1796 | |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1797 | sip->fd = listenfd; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1798 | |
| 15884 | 1799 | sip->listenport = purple_network_get_port_from_fd(sip->fd); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1800 | sip->listenfd = sip->fd; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1801 | |
| 15884 | 1802 | sip->listenpa = purple_input_add(sip->fd, PURPLE_INPUT_READ, simple_udp_process, sip->gc); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1803 | |
| 15884 | 1804 | sip->resendtimeout = purple_timeout_add(2500, (GSourceFunc) resend_timeout, sip); |
| 1805 | sip->registertimeout = purple_timeout_add((rand()%100)+10*1000, (GSourceFunc)subscribe_timeout, sip); | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1806 | do_register(sip); |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1807 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1808 | |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1809 | static void simple_udp_host_resolved(GSList *hosts, gpointer data, const char *error_message) { |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1810 | struct simple_account_data *sip = (struct simple_account_data*) data; |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1811 | int addr_size; |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1812 | |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
1813 | sip->query_data = NULL; |
|
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
1814 | |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1815 | if (!hosts || !hosts->data) { |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1816 | purple_connection_error_reason(sip->gc, |
| 21279 | 1817 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1818 | _("Couldn't resolve host")); |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1819 | return; |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1820 | } |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1821 | |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1822 | addr_size = GPOINTER_TO_INT(hosts->data); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1823 | hosts = g_slist_remove(hosts, hosts->data); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1824 | memcpy(&(sip->serveraddr), hosts->data, addr_size); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1825 | g_free(hosts->data); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1826 | hosts = g_slist_remove(hosts, hosts->data); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1827 | while(hosts) { |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1828 | hosts = g_slist_remove(hosts, hosts->data); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1829 | g_free(hosts->data); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1830 | hosts = g_slist_remove(hosts, hosts->data); |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1831 | } |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1832 | |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1833 | /* create socket for incoming connections */ |
| 15884 | 1834 | sip->listen_data = purple_network_listen_range(5060, 5160, SOCK_DGRAM, |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1835 | simple_udp_host_resolved_listen_cb, sip); |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1836 | if (sip->listen_data == NULL) { |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1837 | purple_connection_error_reason(sip->gc, |
| 21279 | 1838 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1839 | _("Could not create listen socket")); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1840 | return; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1841 | } |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1842 | } |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1843 | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1844 | static void |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1845 | simple_tcp_connect_listen_cb(int listenfd, gpointer data) { |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1846 | struct simple_account_data *sip = (struct simple_account_data*) data; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1847 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1848 | sip->listen_data = NULL; |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1849 | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1850 | sip->listenfd = listenfd; |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1851 | if(sip->listenfd == -1) { |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1852 | purple_connection_error_reason(sip->gc, |
| 21279 | 1853 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1854 | _("Could not create listen socket")); |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1855 | return; |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1856 | } |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1857 | |
| 15884 | 1858 | purple_debug_info("simple", "listenfd: %d\n", sip->listenfd); |
| 1859 | sip->listenport = purple_network_get_port_from_fd(sip->listenfd); | |
| 1860 | sip->listenpa = purple_input_add(sip->listenfd, PURPLE_INPUT_READ, | |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1861 | simple_newconn_cb, sip->gc); |
| 15884 | 1862 | purple_debug_info("simple", "connecting to %s port %d\n", |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1863 | sip->realhostname, sip->realport); |
|
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1864 | /* open tcp connection to the server */ |
| 15884 | 1865 | if (purple_proxy_connect(sip->gc, sip->account, sip->realhostname, |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14696
diff
changeset
|
1866 | sip->realport, login_cb, sip->gc) == NULL) { |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1867 | purple_connection_error_reason(sip->gc, |
| 21279 | 1868 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1869 | _("Couldn't create socket")); |
|
12909
dfcf4df1dcd7
[gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents:
12770
diff
changeset
|
1870 | } |
|
12767
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1871 | } |
|
4870d7755883
[gaim-migrate @ 15114]
Daniel Atallah <datallah@pidgin.im>
parents:
12760
diff
changeset
|
1872 | |
| 15884 | 1873 | static void srvresolved(PurpleSrvResponse *resp, int results, gpointer data) { |
|
13581
d0f0e28aa864
[gaim-migrate @ 15962]
Mark Doliner <markdoliner@pidgin.im>
parents:
13399
diff
changeset
|
1874 | struct simple_account_data *sip; |
|
d0f0e28aa864
[gaim-migrate @ 15962]
Mark Doliner <markdoliner@pidgin.im>
parents:
13399
diff
changeset
|
1875 | gchar *hostname; |
|
d0f0e28aa864
[gaim-migrate @ 15962]
Mark Doliner <markdoliner@pidgin.im>
parents:
13399
diff
changeset
|
1876 | int port; |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1877 | |
|
14370
12ef3d4096ee
[gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents:
14329
diff
changeset
|
1878 | sip = data; |
|
12ef3d4096ee
[gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents:
14329
diff
changeset
|
1879 | sip->srv_query_data = NULL; |
|
13581
d0f0e28aa864
[gaim-migrate @ 15962]
Mark Doliner <markdoliner@pidgin.im>
parents:
13399
diff
changeset
|
1880 | |
| 15884 | 1881 | port = purple_account_get_int(sip->account, "port", 0); |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1882 | |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1883 | /* find the host to connect to */ |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1884 | if(results) { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1885 | hostname = g_strdup(resp->hostname); |
|
12769
21ce86fd6ffa
[gaim-migrate @ 15116]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12768
diff
changeset
|
1886 | if(!port) |
|
21ce86fd6ffa
[gaim-migrate @ 15116]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12768
diff
changeset
|
1887 | port = resp->port; |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1888 | g_free(resp); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1889 | } else { |
| 15884 | 1890 | if(!purple_account_get_bool(sip->account, "useproxy", FALSE)) { |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1891 | hostname = g_strdup(sip->servername); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1892 | } else { |
| 15884 | 1893 | hostname = g_strdup(purple_account_get_string(sip->account, "proxy", sip->servername)); |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1894 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1895 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1896 | |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1897 | sip->realhostname = hostname; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1898 | sip->realport = port; |
|
12769
21ce86fd6ffa
[gaim-migrate @ 15116]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12768
diff
changeset
|
1899 | if(!sip->realport) sip->realport = 5060; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1900 | |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1901 | /* TCP case */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1902 | if(!sip->udp) { |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1903 | /* create socket for incoming connections */ |
| 15884 | 1904 | sip->listen_data = purple_network_listen_range(5060, 5160, SOCK_STREAM, |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1905 | simple_tcp_connect_listen_cb, sip); |
|
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
1906 | if (sip->listen_data == NULL) { |
| 21279 | 1907 | purple_connection_error_reason(sip->gc, |
| 1908 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1909 | _("Could not create listen socket")); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1910 | return; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1911 | } |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1912 | } else { /* UDP */ |
| 15884 | 1913 | purple_debug_info("simple", "using udp with server %s and port %d\n", hostname, port); |
|
12565
8601c9c26f93
[gaim-migrate @ 14884]
Daniel Atallah <datallah@pidgin.im>
parents:
12563
diff
changeset
|
1914 | |
| 15884 | 1915 | sip->query_data = purple_dnsquery_a(hostname, port, simple_udp_host_resolved, sip); |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
1916 | if (sip->query_data == NULL) { |
| 21279 | 1917 | purple_connection_error_reason(sip->gc, |
| 1918 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, | |
|
20459
db73082a228c
Add disconnection reasons to SIMPLE.
Will Thompson <resiak@pidgin.im>
parents:
19991
diff
changeset
|
1919 | _("Could not resolve hostname")); |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
1920 | } |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1921 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1922 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1923 | |
| 15884 | 1924 | static void simple_login(PurpleAccount *account) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1925 | { |
| 15884 | 1926 | PurpleConnection *gc; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1927 | struct simple_account_data *sip; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1928 | gchar **userserver; |
|
23495
cc9ee7e6a09f
There's no need to dup this
Mark Doliner <markdoliner@pidgin.im>
parents:
23302
diff
changeset
|
1929 | const gchar *hosttoconnect; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1930 | |
| 15884 | 1931 | const char *username = purple_account_get_username(account); |
| 1932 | gc = purple_account_get_connection(account); | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1933 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1934 | if (strpbrk(username, " \t\v\r\n") != NULL) { |
| 21279 | 1935 | purple_connection_error_reason(gc, |
| 1936 | PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, | |
|
22942
2bf494f8e2a4
Change the string "screen name" to "username" everywhere. I think most
Mark Doliner <markdoliner@pidgin.im>
parents:
22709
diff
changeset
|
1937 | _("SIP usernames may not contain whitespaces or @ symbols")); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1938 | return; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1939 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1940 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1941 | gc->proto_data = sip = g_new0(struct simple_account_data, 1); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1942 | sip->gc = gc; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1943 | sip->account = account; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1944 | sip->registerexpire = 900; |
| 15884 | 1945 | sip->udp = purple_account_get_bool(account, "udp", FALSE); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1946 | /* TODO: is there a good default grow size? */ |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1947 | if(!sip->udp) |
| 15884 | 1948 | sip->txbuf = purple_circ_buffer_new(0); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
1949 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1950 | userserver = g_strsplit(username, "@", 2); |
|
25179
0dbf2eb5f168
Don't allow connecting a SIMPLE account if no server is configured. Fixes #7767.
Florian Quèze <florian@instantbird.org>
parents:
24845
diff
changeset
|
1951 | if (userserver[1] == NULL || userserver[1][0] == '\0') { |
|
0dbf2eb5f168
Don't allow connecting a SIMPLE account if no server is configured. Fixes #7767.
Florian Quèze <florian@instantbird.org>
parents:
24845
diff
changeset
|
1952 | purple_connection_error_reason(gc, |
|
0dbf2eb5f168
Don't allow connecting a SIMPLE account if no server is configured. Fixes #7767.
Florian Quèze <florian@instantbird.org>
parents:
24845
diff
changeset
|
1953 | PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, |
|
25206
4758bccd444c
disapproval of revision '99fcf96872a999874e2f1e5f46bd44f4a487119c'
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25201
diff
changeset
|
1954 | _("SIP connect server not specified")); |
|
25179
0dbf2eb5f168
Don't allow connecting a SIMPLE account if no server is configured. Fixes #7767.
Florian Quèze <florian@instantbird.org>
parents:
24845
diff
changeset
|
1955 | return; |
|
0dbf2eb5f168
Don't allow connecting a SIMPLE account if no server is configured. Fixes #7767.
Florian Quèze <florian@instantbird.org>
parents:
24845
diff
changeset
|
1956 | } |
|
0dbf2eb5f168
Don't allow connecting a SIMPLE account if no server is configured. Fixes #7767.
Florian Quèze <florian@instantbird.org>
parents:
24845
diff
changeset
|
1957 | |
| 15884 | 1958 | purple_connection_set_display_name(gc, userserver[0]); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1959 | sip->username = g_strdup(userserver[0]); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1960 | sip->servername = g_strdup(userserver[1]); |
| 15884 | 1961 | sip->password = g_strdup(purple_connection_get_password(gc)); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1962 | g_strfreev(userserver); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1963 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1964 | sip->buddies = g_hash_table_new((GHashFunc)simple_ht_hash_nick, (GEqualFunc)simple_ht_equals_nick); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1965 | |
| 15884 | 1966 | purple_connection_update_progress(gc, _("Connecting"), 1, 2); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1967 | |
|
11837
2f1206084fef
[gaim-migrate @ 14128]
Mark Doliner <markdoliner@pidgin.im>
parents:
11718
diff
changeset
|
1968 | /* TODO: Set the status correctly. */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1969 | sip->status = g_strdup("available"); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1970 | |
| 15884 | 1971 | if(!purple_account_get_bool(account, "useproxy", FALSE)) { |
|
23495
cc9ee7e6a09f
There's no need to dup this
Mark Doliner <markdoliner@pidgin.im>
parents:
23302
diff
changeset
|
1972 | hosttoconnect = sip->servername; |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1973 | } else { |
|
23495
cc9ee7e6a09f
There's no need to dup this
Mark Doliner <markdoliner@pidgin.im>
parents:
23302
diff
changeset
|
1974 | hosttoconnect = purple_account_get_string(account, "proxy", sip->servername); |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1975 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1976 | |
| 15884 | 1977 | sip->srv_query_data = purple_srv_resolve("sip", |
|
14370
12ef3d4096ee
[gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents:
14329
diff
changeset
|
1978 | sip->udp ? "udp" : "tcp", hosttoconnect, srvresolved, sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1979 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1980 | |
| 15884 | 1981 | static void simple_close(PurpleConnection *gc) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1982 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1983 | struct simple_account_data *sip = gc->proto_data; |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1984 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1985 | if(sip) { |
|
13399
e877a5672fe8
[gaim-migrate @ 15772]
Richard Laager <rlaager@pidgin.im>
parents:
13348
diff
changeset
|
1986 | /* unregister */ |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1987 | if (sip->registerstatus == SIMPLE_REGISTER_COMPLETE) |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1988 | { |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1989 | g_hash_table_foreach(sip->buddies, |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1990 | (GHFunc)simple_unsubscribe, |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1991 | (gpointer)sip); |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1992 | |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1993 | if(purple_account_get_bool(sip->account, |
|
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1994 | "dopublish", TRUE)) |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1995 | send_closed_publish(sip); |
|
21417
48f4f6c2fe47
Patch from Will Hawkins to make the SIMPLE prpl more standards compliant by keeping all subscribe/notify messaging within a dialog. This didn't apply cleanly, so I had to manually apply it - hopefully I didn't break anything during the process. Fixes #3778.
Daniel Atallah <datallah@pidgin.im>
parents:
21106
diff
changeset
|
1996 | |
|
19991
603d11d2afa7
Fixes #3051 Patch from Will Hawkins to clean up SIMPLE login and registration
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
1997 | do_register_exp(sip, 0); |
|
20988
75eab0f2aa19
Patch from Will Hawkins to publish a status of closed when signing out of a SIMPLE account. Fixes #1914.
Daniel Atallah <datallah@pidgin.im>
parents:
20658
diff
changeset
|
1998 | } |
|
13399
e877a5672fe8
[gaim-migrate @ 15772]
Richard Laager <rlaager@pidgin.im>
parents:
13348
diff
changeset
|
1999 | connection_free_all(sip); |
|
e877a5672fe8
[gaim-migrate @ 15772]
Richard Laager <rlaager@pidgin.im>
parents:
13348
diff
changeset
|
2000 | |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
2001 | if (sip->query_data != NULL) |
| 15884 | 2002 | purple_dnsquery_destroy(sip->query_data); |
|
14300
68a0aa63f3b8
[gaim-migrate @ 16920]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
2003 | |
|
14370
12ef3d4096ee
[gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents:
14329
diff
changeset
|
2004 | if (sip->srv_query_data != NULL) |
| 15884 | 2005 | purple_srv_cancel(sip->srv_query_data); |
|
14370
12ef3d4096ee
[gaim-migrate @ 16998]
Mark Doliner <markdoliner@pidgin.im>
parents:
14329
diff
changeset
|
2006 | |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
2007 | if (sip->listen_data != NULL) |
| 15884 | 2008 | purple_network_listen_cancel(sip->listen_data); |
|
14329
05c3cc0c1f79
[gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
2009 | |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2010 | g_free(sip->servername); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2011 | g_free(sip->username); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2012 | g_free(sip->password); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2013 | g_free(sip->registrar.nonce); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2014 | g_free(sip->registrar.opaque); |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2015 | g_free(sip->registrar.target); |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2016 | g_free(sip->registrar.realm); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2017 | g_free(sip->registrar.digest_session_key); |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2018 | g_free(sip->proxy.nonce); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2019 | g_free(sip->proxy.opaque); |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2020 | g_free(sip->proxy.target); |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2021 | g_free(sip->proxy.realm); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2022 | g_free(sip->proxy.digest_session_key); |
|
22182
0a0d7e312397
Patch from Will Hawkins to implement sending a SIP-If-Match header on subsequent PUBLISHes after receiving a SIP-Etag header. I made some minor tweaks to this, hopefully I didn't break anything. Fixes #4422.
Daniel Atallah <datallah@pidgin.im>
parents:
22104
diff
changeset
|
2023 | g_free(sip->publish_etag); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13185
diff
changeset
|
2024 | if(sip->txbuf) |
| 15884 | 2025 | purple_circ_buffer_destroy(sip->txbuf); |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2026 | g_free(sip->realhostname); |
| 15884 | 2027 | if(sip->listenpa) purple_input_remove(sip->listenpa); |
| 2028 | if(sip->tx_handler) purple_input_remove(sip->tx_handler); | |
| 2029 | if(sip->resendtimeout) purple_timeout_remove(sip->resendtimeout); | |
| 2030 | if(sip->registertimeout) purple_timeout_remove(sip->registertimeout); | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2031 | } |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
2032 | g_free(gc->proto_data); |
|
12571
7c80d5a7d9f7
[gaim-migrate @ 14890]
Daniel Atallah <datallah@pidgin.im>
parents:
12570
diff
changeset
|
2033 | gc->proto_data = NULL; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2034 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2035 | |
| 15884 | 2036 | static PurplePluginProtocolInfo prpl_info = |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2037 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2038 | 0, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2039 | NULL, /* user_splits */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2040 | NULL, /* protocol_options */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2041 | NO_BUDDY_ICONS, /* icon_spec */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2042 | simple_list_icon, /* list_icon */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2043 | NULL, /* list_emblems */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2044 | NULL, /* status_text */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2045 | NULL, /* tooltip_text */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2046 | simple_status_types, /* away_states */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2047 | NULL, /* blist_node_menu */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2048 | NULL, /* chat_info */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2049 | NULL, /* chat_info_defaults */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2050 | simple_login, /* login */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2051 | simple_close, /* close */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2052 | simple_im_send, /* send_im */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2053 | NULL, /* set_info */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2054 | simple_typing, /* send_typing */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2055 | NULL, /* get_info */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2056 | simple_set_status, /* set_status */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2057 | NULL, /* set_idle */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2058 | NULL, /* change_passwd */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2059 | simple_add_buddy, /* add_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2060 | NULL, /* add_buddies */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2061 | simple_remove_buddy, /* remove_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2062 | NULL, /* remove_buddies */ |
|
22388
9f418ec14552
Remove some empty PRPL callbacks
Mark Doliner <markdoliner@pidgin.im>
parents:
22277
diff
changeset
|
2063 | NULL, /* add_permit */ |
|
9f418ec14552
Remove some empty PRPL callbacks
Mark Doliner <markdoliner@pidgin.im>
parents:
22277
diff
changeset
|
2064 | NULL, /* add_deny */ |
|
9f418ec14552
Remove some empty PRPL callbacks
Mark Doliner <markdoliner@pidgin.im>
parents:
22277
diff
changeset
|
2065 | NULL, /* rem_permit */ |
|
9f418ec14552
Remove some empty PRPL callbacks
Mark Doliner <markdoliner@pidgin.im>
parents:
22277
diff
changeset
|
2066 | NULL, /* rem_deny */ |
|
9f418ec14552
Remove some empty PRPL callbacks
Mark Doliner <markdoliner@pidgin.im>
parents:
22277
diff
changeset
|
2067 | NULL, /* set_permit_deny */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2068 | NULL, /* join_chat */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2069 | NULL, /* reject_chat */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2070 | NULL, /* get_chat_name */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2071 | NULL, /* chat_invite */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2072 | NULL, /* chat_leave */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2073 | NULL, /* chat_whisper */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2074 | NULL, /* chat_send */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2075 | simple_keep_alive, /* keepalive */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2076 | NULL, /* register_user */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2077 | NULL, /* get_cb_info */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2078 | NULL, /* get_cb_away */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2079 | NULL, /* alias_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2080 | NULL, /* group_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2081 | NULL, /* rename_group */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2082 | NULL, /* buddy_free */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2083 | NULL, /* convo_closed */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2084 | NULL, /* normalize */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2085 | NULL, /* set_buddy_icon */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2086 | NULL, /* remove_group */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2087 | NULL, /* get_cb_real_name */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2088 | NULL, /* set_chat_topic */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2089 | NULL, /* find_blist_chat */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2090 | NULL, /* roomlist_get_list */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2091 | NULL, /* roomlist_cancel */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2092 | NULL, /* roomlist_expand_category */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2093 | NULL, /* can_receive_file */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
2094 | NULL, /* send_file */ |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12595
diff
changeset
|
2095 | NULL, /* new_xfer */ |
|
12645
a907ba243930
[gaim-migrate @ 14983]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12600
diff
changeset
|
2096 | NULL, /* offline_message */ |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12595
diff
changeset
|
2097 | NULL, /* whiteboard_prpl_ops */ |
| 15185 | 2098 | simple_send_raw, /* send_raw */ |
| 2099 | NULL, /* roomlist_room_serialize */ | |
|
22071
4c47e360e467
Fix the prplinfo structs and get rid of some compile warnings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22069
diff
changeset
|
2100 | NULL, /* unregister_user */ |
|
4c47e360e467
Fix the prplinfo structs and get rid of some compile warnings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22069
diff
changeset
|
2101 | NULL, /* send_attention */ |
|
4c47e360e467
Fix the prplinfo structs and get rid of some compile warnings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22069
diff
changeset
|
2102 | NULL, /* get_attention_types */ |
|
23276
f4944cfaa1ff
Use up the last padding for PurplePluginProtocolInfo in a way that allows
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22709
diff
changeset
|
2103 | sizeof(PurplePluginProtocolInfo), /* struct_size */ |
|
23707
480f94157418
propagate from branch 'im.pidgin.pidgin' (head bd5f7f61d9349053ee4738efc0d17453f0574057)
Sadrul Habib Chowdhury <sadrul@pidgin.im>
diff
changeset
|
2104 | NULL, /* get_account_text_table */ |
|
22648
e286d795c5f9
Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22647
diff
changeset
|
2105 | NULL, /* initiate_media */ |
|
23707
480f94157418
propagate from branch 'im.pidgin.pidgin' (head bd5f7f61d9349053ee4738efc0d17453f0574057)
Sadrul Habib Chowdhury <sadrul@pidgin.im>
diff
changeset
|
2106 | NULL /* can_do_media */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2107 | }; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2108 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2109 | |
| 15884 | 2110 | static PurplePluginInfo info = |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2111 | { |
| 15884 | 2112 | PURPLE_PLUGIN_MAGIC, |
| 2113 | PURPLE_MAJOR_VERSION, | |
| 2114 | PURPLE_MINOR_VERSION, | |
| 2115 | PURPLE_PLUGIN_PROTOCOL, /**< type */ | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2116 | NULL, /**< ui_requirement */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2117 | 0, /**< flags */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2118 | NULL, /**< dependencies */ |
| 15884 | 2119 | PURPLE_PRIORITY_DEFAULT, /**< priority */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2120 | |
|
12489
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
2121 | "prpl-simple", /**< id */ |
|
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
2122 | "SIMPLE", /**< name */ |
|
21106
b85fbef13eed
Add a --with-extraversion option to ./configure so packagers can fine tune
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21100
diff
changeset
|
2123 | DISPLAY_VERSION, /**< version */ |
|
12489
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
2124 | N_("SIP/SIMPLE Protocol Plugin"), /** summary */ |
|
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
2125 | N_("The SIP/SIMPLE Protocol Plugin"), /** description */ |
|
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
2126 | "Thomas Butter <butter@uni-mannheim.de>", /**< author */ |
| 15884 | 2127 | PURPLE_WEBSITE, /**< homepage */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2128 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2129 | NULL, /**< load */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2130 | NULL, /**< unload */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2131 | NULL, /**< destroy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2132 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2133 | NULL, /**< ui_info */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2134 | &prpl_info, /**< extra_info */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2135 | NULL, |
|
16746
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16238
diff
changeset
|
2136 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16238
diff
changeset
|
2137 | |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16238
diff
changeset
|
2138 | /* padding */ |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16238
diff
changeset
|
2139 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16238
diff
changeset
|
2140 | NULL, |
|
72faf41c3c4f
And now the protocols
Gary Kramlich <grim@reaperworld.com>
parents:
16238
diff
changeset
|
2141 | NULL, |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2142 | NULL |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2143 | }; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2144 | |
| 15884 | 2145 | static void _init_plugin(PurplePlugin *plugin) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2146 | { |
| 15884 | 2147 | PurpleAccountUserSplit *split; |
| 2148 | PurpleAccountOption *option; | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2149 | |
| 15884 | 2150 | split = purple_account_user_split_new(_("Server"), "", '@'); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
2151 | prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2152 | |
| 15884 | 2153 | option = purple_account_option_bool_new(_("Publish status (note: everyone may watch you)"), "dopublish", TRUE); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
2154 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
2155 | |
| 15884 | 2156 | option = purple_account_option_int_new(_("Connect port"), "port", 0); |
|
12730
f64fdbc34677
[gaim-migrate @ 15074]
Daniel Atallah <datallah@pidgin.im>
parents:
12689
diff
changeset
|
2157 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
f64fdbc34677
[gaim-migrate @ 15074]
Daniel Atallah <datallah@pidgin.im>
parents:
12689
diff
changeset
|
2158 | |
| 15884 | 2159 | option = purple_account_option_bool_new(_("Use UDP"), "udp", FALSE); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
2160 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 2161 | option = purple_account_option_bool_new(_("Use proxy"), "useproxy", FALSE); |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
2162 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 2163 | option = purple_account_option_string_new(_("Proxy"), "proxy", ""); |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
2164 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 2165 | option = purple_account_option_string_new(_("Auth User"), "authuser", ""); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2166 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
| 15884 | 2167 | option = purple_account_option_string_new(_("Auth Domain"), "authdomain", ""); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13084
diff
changeset
|
2168 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2169 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2170 | |
| 15884 | 2171 | PURPLE_INIT_PLUGIN(simple, _init_plugin, info); |