Sun, 15 Mar 2009 05:13:41 +0000
Close a small race with disconnecting while establishing a connection and
a potential invalid use of a fd.
|
23607
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
1 | /* |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
2 | * purple - Jabber Protocol Plugin |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
3 | * |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
4 | * Copyright (C) 2008, Tobias Markmann <tmarkmann@googlemail.com> |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
5 | * |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
6 | * This program is free software; you can redistribute it and/or modify |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
7 | * it under the terms of the GNU General Public License as published by |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
8 | * the Free Software Foundation; either version 2 of the License, or |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
9 | * (at your option) any later version. |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
10 | * |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
11 | * This program is distributed in the hope that it will be useful, |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
14 | * GNU General Public License for more details. |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
15 | * |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
16 | * You should have received a copy of the GNU General Public License |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
17 | * along with this program; if not, write to the Free Software |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
19 | * |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
20 | */ |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
21 | #include "internal.h" |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
22 | #include "core.h" |
|
23607
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
23 | #include "cipher.h" |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
24 | #include "debug.h" |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
25 | #include "prpl.h" |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
26 | #include "util.h" |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
27 | #include "xmlnode.h" |
|
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
28 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
29 | #include "bosh.h" |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
30 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
31 | #define MAX_HTTP_CONNECTIONS 2 |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
32 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
33 | typedef struct _PurpleHTTPConnection PurpleHTTPConnection; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
34 | |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
35 | typedef void (*PurpleBOSHConnectionConnectFunction)(PurpleBOSHConnection *conn); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
36 | typedef void (*PurpleBOSHConnectionReceiveFunction)(PurpleBOSHConnection *conn, xmlnode *node); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
37 | |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
38 | static char *bosh_useragent = NULL; |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
39 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
40 | typedef enum { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
41 | PACKET_TERMINATE, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
42 | PACKET_STREAM_RESTART, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
43 | PACKET_NORMAL, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
44 | } PurpleBOSHPacketType; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
45 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
46 | struct _PurpleBOSHConnection { |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
47 | /* decoded URL */ |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
48 | char *host; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
49 | int port; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
50 | char *path; |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
51 | |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
52 | /* Must be big enough to hold 2^53 - 1 */ |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
53 | guint64 rid; |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
54 | char *sid; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
55 | int wait; |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
56 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
57 | JabberStream *js; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
58 | gboolean pipelining; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
59 | PurpleHTTPConnection *connections[MAX_HTTP_CONNECTIONS]; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
60 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
61 | int max_inactivity; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
62 | int max_requests; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
63 | int requests; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
64 | GString *pending; |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
65 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
66 | gboolean ready; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
67 | PurpleBOSHConnectionConnectFunction connect_cb; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
68 | PurpleBOSHConnectionReceiveFunction receive_cb; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
69 | }; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
70 | |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
71 | struct _PurpleHTTPConnection { |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
72 | int fd; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
73 | gboolean ready; |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
74 | int ie_handle; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
75 | int requests; /* number of outstanding HTTP requests */ |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
76 | |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
77 | GString *buf; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
78 | gboolean headers_done; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
79 | gsize handled_len; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
80 | gsize body_len; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
81 | |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
82 | PurpleBOSHConnection *bosh; |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
83 | }; |
|
23607
bc82598d3798
* looking for alternative connection methods if direct connection fails
Tobias Markmann <tfar@soc.pidgin.im>
parents:
diff
changeset
|
84 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
85 | static void jabber_bosh_connection_stream_restart(PurpleBOSHConnection *conn); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
86 | static gboolean jabber_bosh_connection_error_check(PurpleBOSHConnection *conn, xmlnode *node); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
87 | static void jabber_bosh_connection_received(PurpleBOSHConnection *conn, xmlnode *node); |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
88 | static void jabber_bosh_connection_send_native(PurpleBOSHConnection *conn, PurpleBOSHPacketType, xmlnode *node); |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
89 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
90 | static void http_connection_connect(PurpleHTTPConnection *conn); |
|
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
91 | static void http_connection_send_request(PurpleHTTPConnection *conn, const GString *req); |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
92 | |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
93 | void jabber_bosh_init(void) |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
94 | { |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
95 | GHashTable *ui_info = purple_core_get_ui_info(); |
|
25487
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
96 | const char *ui_name = NULL; |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
97 | const char *ui_version = NULL; |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
98 | |
|
25487
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
99 | if (ui_info) { |
|
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
100 | ui_name = g_hash_table_lookup(ui_info, "name"); |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
101 | ui_version = g_hash_table_lookup(ui_info, "version"); |
|
25487
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
102 | } |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
103 | |
|
25487
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
104 | if (ui_name) |
|
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
105 | bosh_useragent = g_strdup_printf("%s%s%s (libpurple " VERSION ")", |
|
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
106 | ui_name, ui_version ? " " : "", |
|
00e94f044205
The BOSH User Agent should include the client name (and optionally version),
Paul Aurich <darkrain42@pidgin.im>
parents:
25486
diff
changeset
|
107 | ui_version ? ui_version : ""); |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
108 | else |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
109 | bosh_useragent = g_strdup("libpurple " VERSION); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
110 | } |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
111 | |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
112 | void jabber_bosh_uninit(void) |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
113 | { |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
114 | g_free(bosh_useragent); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
115 | bosh_useragent = NULL; |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
116 | } |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
117 | |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
118 | static PurpleHTTPConnection* |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
119 | jabber_bosh_http_connection_init(PurpleBOSHConnection *bosh) |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
120 | { |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
121 | PurpleHTTPConnection *conn = g_new0(PurpleHTTPConnection, 1); |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
122 | conn->bosh = bosh; |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
123 | conn->fd = -1; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
124 | conn->ready = FALSE; |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
125 | |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
126 | return conn; |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
127 | } |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
128 | |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
129 | static void |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
130 | jabber_bosh_http_connection_destroy(PurpleHTTPConnection *conn) |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
131 | { |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
132 | if (conn->buf) |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
133 | g_string_free(conn->buf, TRUE); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
134 | |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
135 | if (conn->ie_handle) |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
136 | purple_input_remove(conn->ie_handle); |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
137 | if (conn->fd >= 0) |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
138 | close(conn->fd); |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
139 | |
|
26079
4d75323e1e6b
Close a small race with disconnecting while establishing a connection and
Paul Aurich <darkrain42@pidgin.im>
parents:
26078
diff
changeset
|
140 | purple_proxy_connect_cancel_with_handle(conn); |
|
4d75323e1e6b
Close a small race with disconnecting while establishing a connection and
Paul Aurich <darkrain42@pidgin.im>
parents:
26078
diff
changeset
|
141 | |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
142 | g_free(conn); |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
143 | } |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
144 | |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
145 | PurpleBOSHConnection* |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
146 | jabber_bosh_connection_init(JabberStream *js, const char *url) |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
147 | { |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
148 | PurpleBOSHConnection *conn; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
149 | char *host, *path, *user, *passwd; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
150 | int port; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
151 | |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
152 | if (!purple_url_parse(url, &host, &port, &path, &user, &passwd)) { |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
153 | purple_debug_info("jabber", "Unable to parse given URL.\n"); |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
154 | return NULL; |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
155 | } |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
156 | |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
157 | conn = g_new0(PurpleBOSHConnection, 1); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
158 | conn->host = host; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
159 | conn->port = port; |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
160 | conn->path = g_strdup_printf("/%s", path); |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
161 | g_free(path); |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
162 | conn->pipelining = TRUE; |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
163 | |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
164 | if ((user && user[0] != '\0') || (passwd && passwd[0] != '\0')) { |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
165 | purple_debug_info("jabber", "Ignoring unexpected username and password " |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
166 | "in BOSH URL.\n"); |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
167 | } |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
168 | |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
169 | g_free(user); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
170 | g_free(passwd); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
171 | |
|
23613
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
172 | conn->js = js; |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
173 | /* FIXME: This doesn't seem very random */ |
|
23613
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
174 | conn->rid = rand() % 100000 + 1728679472; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
175 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
176 | conn->pending = g_string_new(""); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
177 | |
|
23621
d7a6cc7ca517
* sending empty <body> requests if there are not othere requests to be answered to keep a CM -> client channel open
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23620
diff
changeset
|
178 | conn->ready = FALSE; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
179 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
180 | conn->connections[0] = jabber_bosh_http_connection_init(conn); |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
181 | |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
182 | return conn; |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
183 | } |
|
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
184 | |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
185 | void |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
186 | jabber_bosh_connection_destroy(PurpleBOSHConnection *conn) |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
187 | { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
188 | int i; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
189 | |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
190 | g_free(conn->host); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
191 | g_free(conn->path); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
192 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
193 | if (conn->pending) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
194 | g_string_free(conn->pending, TRUE); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
195 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
196 | for (i = 0; i < MAX_HTTP_CONNECTIONS; ++i) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
197 | if (conn->connections[i]) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
198 | jabber_bosh_http_connection_destroy(conn->connections[i]); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
199 | } |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
200 | |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
201 | g_free(conn); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
202 | } |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
203 | |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
204 | void jabber_bosh_connection_close(PurpleBOSHConnection *conn) |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
205 | { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
206 | jabber_bosh_connection_send_native(conn, PACKET_TERMINATE, NULL); |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
207 | } |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
208 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
209 | static void jabber_bosh_connection_stream_restart(PurpleBOSHConnection *conn) { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
210 | jabber_bosh_connection_send_native(conn, PACKET_STREAM_RESTART, NULL); |
|
23619
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
211 | } |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
212 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
213 | static gboolean jabber_bosh_connection_error_check(PurpleBOSHConnection *conn, xmlnode *node) { |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
214 | const char *type; |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
215 | |
|
23623
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
216 | type = xmlnode_get_attrib(node, "type"); |
|
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
217 | |
|
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
218 | if (type != NULL && !strcmp(type, "terminate")) { |
|
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
219 | conn->ready = FALSE; |
|
23624
84b42375e411
* removing some comment with XML example
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23623
diff
changeset
|
220 | purple_connection_error_reason (conn->js->gc, |
|
84b42375e411
* removing some comment with XML example
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23623
diff
changeset
|
221 | PURPLE_CONNECTION_ERROR_OTHER_ERROR, |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
222 | _("The BOSH connection manager terminated your session.")); |
|
23623
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
223 | return TRUE; |
|
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
224 | } |
|
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
225 | return FALSE; |
|
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
226 | } |
|
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
227 | |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
228 | static void jabber_bosh_connection_received(PurpleBOSHConnection *conn, xmlnode *node) { |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
229 | xmlnode *child; |
|
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
230 | JabberStream *js = conn->js; |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
231 | |
|
25485
cb56bf5684c1
BOSH: Another g_return_if_fail that is backward
Paul Aurich <darkrain42@pidgin.im>
parents:
25484
diff
changeset
|
232 | g_return_if_fail(node != NULL); |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
233 | if (jabber_bosh_connection_error_check(conn, node)) |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
234 | return; |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
235 | |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
236 | child = node->child; |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
237 | while (child != NULL) { |
|
24886
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
238 | /* jabber_process_packet might free child */ |
|
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
239 | xmlnode *next = child->next; |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
240 | if (child->type == XMLNODE_TYPE_TAG) { |
|
24886
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
241 | if (!strcmp(child->name, "iq")) { |
|
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
242 | if (xmlnode_get_child(child, "session")) |
|
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
243 | conn->ready = TRUE; |
|
23623
b7b226b72971
* fixing a bug in jabber_bosh_http_connection_receive_parse_header()
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23621
diff
changeset
|
244 | } |
|
24886
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
245 | |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
246 | jabber_process_packet(js, &child); |
|
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
247 | } |
|
24886
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
248 | |
|
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
249 | child = next; |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
250 | } |
|
23619
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
251 | } |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
252 | |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
253 | static void auth_response_cb(PurpleBOSHConnection *conn, xmlnode *node) { |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
254 | xmlnode *child; |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
255 | |
|
24886
de0388948ac8
Jabber BOSH: memory management fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
24885
diff
changeset
|
256 | g_return_if_fail(node != NULL); |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
257 | if (jabber_bosh_connection_error_check(conn, node)) |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
258 | return; |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
259 | |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
260 | child = node->child; |
|
23619
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
261 | while(child != NULL && child->type != XMLNODE_TYPE_TAG) { |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
262 | child = child->next; |
|
23619
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
263 | } |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
264 | |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
265 | /* We're only expecting one XML node here, so only process the first one */ |
|
23619
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
266 | if (child != NULL && child->type == XMLNODE_TYPE_TAG) { |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
267 | JabberStream *js = conn->js; |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
268 | if (!strcmp(child->name, "success")) { |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
269 | jabber_bosh_connection_stream_restart(conn); |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
270 | jabber_process_packet(js, &child); |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
271 | conn->receive_cb = jabber_bosh_connection_received; |
|
23619
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
272 | } else { |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
273 | js->state = JABBER_STREAM_AUTHENTICATING; |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
274 | jabber_process_packet(js, &child); |
|
5c215ab46f1e
* moving BOSH interfacing from jabber_send to jabber_send_raw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23618
diff
changeset
|
275 | } |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
276 | } else { |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
277 | purple_debug_warning("jabber", "Received unexepcted empty BOSH packet.\n"); |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
278 | } |
|
23618
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
279 | } |
|
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
280 | |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
281 | static void boot_response_cb(PurpleBOSHConnection *conn, xmlnode *node) { |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
282 | const char *sid, *version; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
283 | const char *inactivity, *requests; |
|
24885
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
284 | xmlnode *packet; |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
285 | |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
286 | g_return_if_fail(node != NULL); |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
287 | if (jabber_bosh_connection_error_check(conn, node)) |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
288 | return; |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
289 | |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
290 | sid = xmlnode_get_attrib(node, "sid"); |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
291 | version = xmlnode_get_attrib(node, "ver"); |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
292 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
293 | inactivity = xmlnode_get_attrib(node, "inactivity"); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
294 | requests = xmlnode_get_attrib(node, "requests"); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
295 | |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
296 | if (sid) { |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
297 | conn->sid = g_strdup(sid); |
|
23618
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
298 | } else { |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
299 | purple_connection_error_reason(conn->js->gc, |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
300 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
301 | _("No session ID given")); |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
302 | return; |
|
23618
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
303 | } |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
304 | |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
305 | if (version) { |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
306 | const char *dot = strstr(version, "."); |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
307 | int major = atoi(version); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
308 | int minor = atoi(dot + 1); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
309 | |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
310 | purple_debug_info("jabber", "BOSH connection manager version %s\n", version); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
311 | |
|
24885
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
312 | if (major != 1 || minor < 6) { |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
313 | purple_connection_error_reason(conn->js->gc, |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
314 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
315 | _("Unsupported version of BOSH protocol")); |
|
24885
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
316 | return; |
|
23618
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
317 | } |
|
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
318 | } else { |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
319 | purple_debug_info("jabber", "Missing version in BOSH initiation\n"); |
|
23618
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
320 | } |
|
24885
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
321 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
322 | if (inactivity) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
323 | conn->max_inactivity = atoi(inactivity); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
324 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
325 | if (requests) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
326 | conn->max_requests = atoi(requests); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
327 | |
|
24885
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
328 | /* FIXME: Depending on receiving features might break with some hosts */ |
|
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
329 | packet = xmlnode_get_child(node, "features"); |
|
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
330 | conn->js->use_bosh = TRUE; |
|
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
331 | conn->receive_cb = auth_response_cb; |
|
353c663c8110
Jabber BOSH: Try to continue with no BOSH version attribute
Paul Aurich <darkrain42@pidgin.im>
parents:
24884
diff
changeset
|
332 | jabber_stream_features_parse(conn->js, packet); |
|
23616
5e5d6a440ee6
* calling PurpleBOSHConnection's receive_cb
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23615
diff
changeset
|
333 | } |
|
5e5d6a440ee6
* calling PurpleBOSHConnection's receive_cb
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23615
diff
changeset
|
334 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
335 | static PurpleHTTPConnection * |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
336 | find_available_http_connection(PurpleBOSHConnection *conn) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
337 | { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
338 | int i; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
339 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
340 | /* Easy solution: Does everyone involved support pipelining? Hooray! Just use |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
341 | * one TCP connection! */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
342 | if (conn->pipelining) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
343 | return conn->connections[0]; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
344 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
345 | /* First loop, look for a connection that's ready */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
346 | for (i = 0; i < MAX_HTTP_CONNECTIONS; ++i) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
347 | if (conn->connections[i] && conn->connections[i]->ready && |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
348 | conn->connections[i]->requests == 0) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
349 | return conn->connections[i]; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
350 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
351 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
352 | /* Second loop, look for one that's NULL and create a new connection */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
353 | for (i = 0; i < MAX_HTTP_CONNECTIONS; ++i) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
354 | if (!conn->connections[i]) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
355 | conn->connections[i] = jabber_bosh_http_connection_init(conn); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
356 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
357 | http_connection_connect(conn->connections[i]); |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
358 | return NULL; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
359 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
360 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
361 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
362 | /* None available. */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
363 | return NULL; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
364 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
365 | |
|
23612
0d8cc9f7f223
* adding receive callback; preparing receiving and boot code
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23611
diff
changeset
|
366 | static void jabber_bosh_connection_boot(PurpleBOSHConnection *conn) { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
367 | GString *buf = g_string_new(""); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
368 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
369 | g_string_printf(buf, "<body content='text/xml; charset=utf-8' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
370 | "secure='true' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
371 | "to='%s' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
372 | "xml:lang='en' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
373 | "xmpp:version='1.0' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
374 | "ver='1.6' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
375 | "xmlns:xmpp='urn:xmpp:bosh' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
376 | "rid='%" G_GUINT64_FORMAT "' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
377 | /* TODO: This should be adjusted/adjustable automatically according to |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
378 | * realtime network behavior */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
379 | "wait='60' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
380 | "hold='1' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
381 | "xmlns='http://jabber.org/protocol/httpbind'/>", |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
382 | conn->js->user->domain, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
383 | ++conn->rid); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
384 | |
|
24875
0fa0cf6ea28e
Make the Request ID a long long (fit in 2^53-1)
Paul Aurich <darkrain42@pidgin.im>
parents:
24874
diff
changeset
|
385 | conn->receive_cb = boot_response_cb; |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
386 | http_connection_send_request(conn->connections[0], buf); |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
387 | g_string_free(buf, TRUE); |
|
23613
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
388 | } |
|
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
389 | |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
390 | static void |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
391 | http_received_cb(const char *data, int len, PurpleBOSHConnection *conn) |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
392 | { |
|
23616
5e5d6a440ee6
* calling PurpleBOSHConnection's receive_cb
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23615
diff
changeset
|
393 | if (conn->receive_cb) { |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
394 | xmlnode *node = xmlnode_from_str(data, len); |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
395 | if (node) { |
|
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
396 | char *txt = xmlnode_to_formatted_str(node, NULL); |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
397 | printf("\nhttp_received_cb\n%s\n", txt); |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
398 | g_free(txt); |
|
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
399 | conn->receive_cb(conn, node); |
|
23625
8d5884281cfb
* free xmlnodes after bosh receive callback is called
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23624
diff
changeset
|
400 | xmlnode_free(node); |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
401 | } else { |
|
25486
5ed3de6b1794
BOSH: Fix an off-by-one g_memdup that was missing the null terminator.
Paul Aurich <darkrain42@pidgin.im>
parents:
25485
diff
changeset
|
402 | purple_debug_warning("jabber", "BOSH: Received invalid XML\n"); |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
403 | } |
|
25486
5ed3de6b1794
BOSH: Fix an off-by-one g_memdup that was missing the null terminator.
Paul Aurich <darkrain42@pidgin.im>
parents:
25485
diff
changeset
|
404 | } else { |
|
5ed3de6b1794
BOSH: Fix an off-by-one g_memdup that was missing the null terminator.
Paul Aurich <darkrain42@pidgin.im>
parents:
25485
diff
changeset
|
405 | g_return_if_reached(); |
|
5ed3de6b1794
BOSH: Fix an off-by-one g_memdup that was missing the null terminator.
Paul Aurich <darkrain42@pidgin.im>
parents:
25485
diff
changeset
|
406 | } |
|
23612
0d8cc9f7f223
* adding receive callback; preparing receiving and boot code
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23611
diff
changeset
|
407 | } |
|
0d8cc9f7f223
* adding receive callback; preparing receiving and boot code
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23611
diff
changeset
|
408 | |
|
0d8cc9f7f223
* adding receive callback; preparing receiving and boot code
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23611
diff
changeset
|
409 | void jabber_bosh_connection_send(PurpleBOSHConnection *conn, xmlnode *node) { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
410 | jabber_bosh_connection_send_native(conn, PACKET_NORMAL, node); |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
411 | } |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
412 | |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
413 | void jabber_bosh_connection_send_raw(PurpleBOSHConnection *conn, |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
414 | const char *data, int len) |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
415 | { |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
416 | xmlnode *node = xmlnode_from_str(data, len); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
417 | if (node) { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
418 | jabber_bosh_connection_send_native(conn, PACKET_NORMAL, node); |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
419 | xmlnode_free(node); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
420 | } else { |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
421 | /* |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
422 | * This best emulates what a normal XMPP server would do |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
423 | * if you send bad XML. |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
424 | */ |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
425 | purple_connection_error_reason(conn->js->gc, |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
426 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
427 | _("Cannot send malformed XML")); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
428 | } |
|
23618
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
429 | } |
|
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
430 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
431 | static void |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
432 | jabber_bosh_connection_send_native(PurpleBOSHConnection *conn, PurpleBOSHPacketType type, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
433 | xmlnode *node) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
434 | { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
435 | PurpleHTTPConnection *chosen; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
436 | GString *packet = NULL; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
437 | char *buf = NULL; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
438 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
439 | chosen = find_available_http_connection(conn); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
440 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
441 | if (type != PACKET_NORMAL && !chosen) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
442 | /* |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
443 | * For non-ordinary traffic, we don't want to 'buffer' it, so use the first |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
444 | * connection. |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
445 | */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
446 | chosen = conn->connections[0]; |
|
23618
8497c2f5e62d
* using libpurple's internal SASL mechanisms during BOSH authentication phase
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23617
diff
changeset
|
447 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
448 | if (!chosen->ready) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
449 | purple_debug_warning("jabber", "First BOSH connection wasn't ready. Bad " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
450 | "things may happen.\n"); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
451 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
452 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
453 | if (node) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
454 | buf = xmlnode_to_str(node, NULL); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
455 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
456 | if (type == PACKET_NORMAL && (!chosen || |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
457 | (conn->max_requests > 0 && conn->requests == conn->max_requests))) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
458 | /* |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
459 | * For normal data, send up to max_requests requests at a time or there is no |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
460 | * connection ready (likely, we're currently opening a second connection and |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
461 | * will send these packets when connected). |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
462 | */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
463 | if (buf) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
464 | conn->pending = g_string_append(conn->pending, buf); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
465 | g_free(buf); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
466 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
467 | return; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
468 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
469 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
470 | packet = g_string_new(""); |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
471 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
472 | g_string_printf(packet, "<body " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
473 | "rid='%" G_GUINT64_FORMAT "' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
474 | "sid='%s' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
475 | "to='%s' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
476 | "xml:lang='en' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
477 | "xmlns='http://jabber.org/protocol/httpbind' " |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
478 | "xmlns:xmpp='urn:xmpp:xbosh'", |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
479 | ++conn->rid, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
480 | conn->sid, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
481 | conn->js->user->domain); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
482 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
483 | if (type == PACKET_STREAM_RESTART) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
484 | packet = g_string_append(packet, " xmpp:restart='true'/>"); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
485 | else { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
486 | if (type == PACKET_TERMINATE) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
487 | packet = g_string_append(packet, " type='terminate'"); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
488 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
489 | g_string_append_printf(packet, ">%s%s</body>", conn->pending->str, |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
490 | buf ? buf : ""); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
491 | g_string_truncate(conn->pending, 0); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
492 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
493 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
494 | g_free(buf); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
495 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
496 | http_connection_send_request(chosen, packet); |
|
23612
0d8cc9f7f223
* adding receive callback; preparing receiving and boot code
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23611
diff
changeset
|
497 | } |
|
0d8cc9f7f223
* adding receive callback; preparing receiving and boot code
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23611
diff
changeset
|
498 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
499 | static void http_connection_connected(PurpleHTTPConnection *conn) |
|
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
500 | { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
501 | conn->ready = TRUE; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
502 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
503 | if (conn->bosh->ready) { |
|
23621
d7a6cc7ca517
* sending empty <body> requests if there are not othere requests to be answered to keep a CM -> client channel open
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23620
diff
changeset
|
504 | purple_debug_info("jabber", "BOSH session already exists. Trying to reuse it.\n"); |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
505 | if (conn->bosh->pending && conn->bosh->pending->len > 0) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
506 | /* Send the pending data */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
507 | jabber_bosh_connection_send_native(conn->bosh, PACKET_NORMAL, NULL); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
508 | } |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
509 | #if 0 |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
510 | conn->bosh->receive_cb = jabber_bosh_connection_received; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
511 | if (conn->bosh->connect_cb) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
512 | conn->bosh->connect_cb(conn->bosh); |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
513 | #endif |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
514 | } else |
|
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
515 | jabber_bosh_connection_boot(conn->bosh); |
|
23621
d7a6cc7ca517
* sending empty <body> requests if there are not othere requests to be answered to keep a CM -> client channel open
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23620
diff
changeset
|
516 | } |
|
d7a6cc7ca517
* sending empty <body> requests if there are not othere requests to be answered to keep a CM -> client channel open
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23620
diff
changeset
|
517 | |
|
24874
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
518 | void jabber_bosh_connection_refresh(PurpleBOSHConnection *conn) |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
519 | { |
|
33902e1daba1
Reorder some functions to eliminate prototypes and
Paul Aurich <darkrain42@pidgin.im>
parents:
24873
diff
changeset
|
520 | jabber_bosh_connection_send(conn, NULL); |
|
23621
d7a6cc7ca517
* sending empty <body> requests if there are not othere requests to be answered to keep a CM -> client channel open
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23620
diff
changeset
|
521 | } |
|
d7a6cc7ca517
* sending empty <body> requests if there are not othere requests to be answered to keep a CM -> client channel open
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23620
diff
changeset
|
522 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
523 | static void http_connection_disconnected(PurpleHTTPConnection *conn) |
|
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
524 | { |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
525 | /* |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
526 | * Well, then. Fine! I never liked you anyway, server! I was cheating on you |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
527 | * with AIM! |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
528 | */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
529 | conn->ready = FALSE; |
|
26079
4d75323e1e6b
Close a small race with disconnecting while establishing a connection and
Paul Aurich <darkrain42@pidgin.im>
parents:
26078
diff
changeset
|
530 | conn->fd = -1; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
531 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
532 | if (conn->bosh->pipelining) |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
533 | /* Hmmmm, fall back to multiple connections */ |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
534 | conn->bosh->pipelining = FALSE; |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
535 | |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
536 | /* No! Please! Take me back. It was me, not you! I was weak! */ |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
537 | http_connection_connect(conn); |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
538 | } |
|
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
539 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
540 | void jabber_bosh_connection_connect(PurpleBOSHConnection *bosh) { |
|
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
541 | PurpleHTTPConnection *conn = bosh->connections[0]; |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
542 | http_connection_connect(conn); |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
543 | } |
|
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
544 | |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
545 | static void |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
546 | jabber_bosh_http_connection_process(PurpleHTTPConnection *conn) |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
547 | { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
548 | const char *cursor; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
549 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
550 | cursor = conn->buf->str + conn->handled_len; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
551 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
552 | if (!conn->headers_done) { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
553 | const char *content_length = purple_strcasestr(cursor, "\r\nContent-Length"); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
554 | const char *end_of_headers = purple_strcasestr(cursor, "\r\n\r\n"); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
555 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
556 | /* Make sure Content-Length is in headers, not body */ |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
557 | if (content_length && content_length < end_of_headers) { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
558 | char *sep = strstr(content_length, ": "); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
559 | int len = atoi(sep + 2); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
560 | if (len == 0) |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
561 | purple_debug_warning("jabber", "Found mangled Content-Length header.\n"); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
562 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
563 | conn->body_len = len; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
564 | } |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
565 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
566 | if (end_of_headers) { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
567 | conn->headers_done = TRUE; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
568 | conn->handled_len = end_of_headers - conn->buf->str + 4; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
569 | cursor = end_of_headers + 4; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
570 | } else { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
571 | conn->handled_len = conn->buf->len; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
572 | return; |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
573 | } |
|
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
574 | } |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
575 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
576 | /* Have we handled everything in the buffer? */ |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
577 | if (conn->handled_len >= conn->buf->len) |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
578 | return; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
579 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
580 | /* Have we read all that the Content-Length promised us? */ |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
581 | if (conn->buf->len - conn->handled_len < conn->body_len) |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
582 | return; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
583 | |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
584 | --conn->requests; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
585 | --conn->bosh->requests; |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
586 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
587 | #warning For a pure HTTP 1.1 stack, this would need to be handled elsewhere. |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
588 | if (conn->bosh->ready && conn->bosh->requests == 0) { |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
589 | jabber_bosh_connection_send(conn->bosh, NULL); |
|
25486
5ed3de6b1794
BOSH: Fix an off-by-one g_memdup that was missing the null terminator.
Paul Aurich <darkrain42@pidgin.im>
parents:
25485
diff
changeset
|
590 | purple_debug_misc("jabber", "BOSH: Sending an empty request\n"); |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
591 | } |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
592 | |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
593 | http_received_cb(conn->buf->str + conn->handled_len, conn->body_len, |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
594 | conn->bosh); |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
595 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
596 | g_string_free(conn->buf, TRUE); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
597 | conn->buf = NULL; |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
598 | conn->headers_done = FALSE; |
|
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
599 | conn->handled_len = conn->body_len = 0; |
|
23620
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
600 | } |
|
e306af5178d7
* data buffer for received data. Support for any HTTP resonse size now.
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23619
diff
changeset
|
601 | |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
602 | static void |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
603 | jabber_bosh_http_connection_read(gpointer data, gint fd, |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
604 | PurpleInputCondition condition) |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
605 | { |
|
23613
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
606 | PurpleHTTPConnection *conn = data; |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
607 | char buffer[1025]; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
608 | int perrno; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
609 | int cnt, count = 0; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
610 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
611 | purple_debug_info("jabber", "jabber_bosh_http_connection_read\n"); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
612 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
613 | if (!conn->buf) |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
614 | conn->buf = g_string_new(""); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
615 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
616 | while ((cnt = read(fd, buffer, sizeof(buffer))) > 0) { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
617 | purple_debug_info("jabber", "bosh read %d bytes\n", cnt); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
618 | count += cnt; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
619 | g_string_append_len(conn->buf, buffer, cnt); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
620 | } |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
621 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
622 | perrno = errno; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
623 | if (cnt == 0 && count) { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
624 | /* TODO: process should know this response ended with a closed socket |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
625 | * and throw an error if it's not a complete response. */ |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
626 | jabber_bosh_http_connection_process(conn); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
627 | } |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
628 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
629 | if (cnt == 0 || (cnt < 0 && perrno != EAGAIN)) { |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
630 | if (cnt < 0) |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
631 | purple_debug_info("jabber", "bosh read: %d\n", cnt); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
632 | else |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
633 | purple_debug_info("jabber", "bosh socket closed\n"); |
|
23615
6a9e7febac16
* parsing HTTP response and emitting HTTP request callback
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23614
diff
changeset
|
634 | |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
635 | purple_input_remove(conn->ie_handle); |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
636 | conn->ie_handle = 0; |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
637 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
638 | http_connection_disconnected(conn); |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
639 | return; |
|
23614
cb637468e183
* preparing handling of multiple requests for pipelining support
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23613
diff
changeset
|
640 | } |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
641 | |
|
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
642 | jabber_bosh_http_connection_process(conn); |
|
23612
0d8cc9f7f223
* adding receive callback; preparing receiving and boot code
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23611
diff
changeset
|
643 | } |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
644 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
645 | static void http_connection_cb(gpointer data, gint source, const gchar *error) |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
646 | { |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
647 | PurpleHTTPConnection *conn = data; |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
648 | PurpleConnection *gc = conn->bosh->js->gc; |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
649 | |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
650 | if (source < 0) { |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
651 | gchar *tmp; |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
652 | tmp = g_strdup_printf(_("Could not establish a connection with the server:\n%s"), |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
653 | error); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
654 | purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
655 | g_free(tmp); |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
656 | return; |
|
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
657 | } |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
658 | |
|
23611
d811757e19b5
* adding bosh files to Makefile.am & .mingw
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23609
diff
changeset
|
659 | conn->fd = source; |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
660 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
661 | http_connection_connected(conn); |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
662 | |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
663 | conn->ie_handle = purple_input_add(conn->fd, PURPLE_INPUT_READ, |
|
24884
896733ece217
Jabber BOSH: Model the parsing on the SOAP stuff
Paul Aurich <darkrain42@pidgin.im>
parents:
24883
diff
changeset
|
664 | jabber_bosh_http_connection_read, conn); |
| 23609 | 665 | } |
| 666 | ||
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
667 | static void http_connection_connect(PurpleHTTPConnection *conn) |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
668 | { |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
669 | PurpleBOSHConnection *bosh = conn->bosh; |
|
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
670 | PurpleConnection *gc = bosh->js->gc; |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
671 | PurpleAccount *account = purple_connection_get_account(gc); |
|
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
672 | |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
673 | if ((purple_proxy_connect(conn, account, bosh->host, bosh->port, |
|
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
674 | http_connection_cb, conn)) == NULL) { |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
675 | purple_connection_error_reason(gc, |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
676 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
677 | _("Unable to create socket")); |
|
24872
68de61b562f6
Jabber BOSH: Many fixes
Paul Aurich <darkrain42@pidgin.im>
parents:
23625
diff
changeset
|
678 | } |
|
23613
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
679 | } |
|
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
680 | |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
681 | static void |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
682 | http_connection_send_request(PurpleHTTPConnection *conn, const GString *req) |
|
24873
7d1e91d5ec46
Jabber BOSH: more fixes.
Paul Aurich <darkrain42@pidgin.im>
parents:
24872
diff
changeset
|
683 | { |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
684 | GString *packet = g_string_new(""); |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
685 | int ret; |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
686 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
687 | g_string_printf(packet, "POST %s HTTP/1.1\r\n" |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
688 | "Host: %s\r\n" |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
689 | "User-Agent: %s\r\n" |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
690 | "Content-Encoding: text/xml; charset=utf-8\r\n" |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
691 | "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n", |
|
26078
3526ac955ce3
Rename a few functions and drop some data members.
Paul Aurich <darkrain42@pidgin.im>
parents:
26076
diff
changeset
|
692 | conn->bosh->path, conn->bosh->host, bosh_useragent, |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
693 | req->len); |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
694 | |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
695 | packet = g_string_append(packet, req->str); |
|
25483
38e11b5dd1cf
BOSH: Fix the HTTP Post to include the actual payload.
Paul Aurich <darkrain42@pidgin.im>
parents:
24886
diff
changeset
|
696 | |
|
25486
5ed3de6b1794
BOSH: Fix an off-by-one g_memdup that was missing the null terminator.
Paul Aurich <darkrain42@pidgin.im>
parents:
25485
diff
changeset
|
697 | purple_debug_misc("jabber", "BOSH out: %s\n", packet->str); |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
698 | /* TODO: Better error handling, circbuffer or possible integration with |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
699 | * low-level code in jabber.c */ |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
700 | ret = write(conn->fd, packet->str, packet->len); |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
701 | |
|
25488
acdb4dbab299
Don't track a cb-per-POST and remove the PurpleHTTPResponse structure.
Paul Aurich <darkrain42@pidgin.im>
parents:
25487
diff
changeset
|
702 | ++conn->requests; |
|
26076
1755f871f1d1
Restore BOSH to a more-or-less working state.
Paul Aurich <darkrain42@pidgin.im>
parents:
25489
diff
changeset
|
703 | ++conn->bosh->requests; |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
704 | g_string_free(packet, TRUE); |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
705 | |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
706 | if (ret < 0 && errno == EAGAIN) |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
707 | purple_debug_warning("jabber", "BOSH write would have blocked\n"); |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
708 | |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
709 | if (ret <= 0) { |
|
25489
9c591341d172
Store PurpleBOSHConnection* instead of void* userdata
Paul Aurich <darkrain42@pidgin.im>
parents:
25488
diff
changeset
|
710 | purple_connection_error_reason(conn->bosh->js->gc, |
|
24883
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
711 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
712 | _("Write error")); |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
713 | return; |
|
c283f8737645
Jabber BOSH: Store less for each Request/Response
Paul Aurich <darkrain42@pidgin.im>
parents:
24875
diff
changeset
|
714 | } |
|
23613
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
715 | } |
|
1da7c5cbcc54
* doing HTTP requests
Tobias Markmann <tfar@soc.pidgin.im>
parents:
23612
diff
changeset
|
716 |