Mon, 13 Jul 2009 05:01:42 +0000
On MSN, pop up an "invite message" request similar to oscar, and send that
in the add request. We really should try and move this into the add buddy
dialog instead of an extra prompt.
Fixes #8503.
| 5309 | 1 | /** |
| 2 | * @file servconn.c Server connection functions | |
| 3 | * | |
| 15884 | 4 | * purple |
| 5309 | 5 | * |
| 15884 | 6 | * Purple is the legal property of its developers, whose names are too numerous |
|
9198
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
7 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
8 | * source distribution. |
|
6701
7e2db9273748
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
6122
diff
changeset
|
9 | * |
| 5309 | 10 | * This program is free software; you can redistribute it and/or modify |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 21 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19578
diff
changeset
|
22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 5309 | 23 | */ |
| 24 | #include "msn.h" | |
| 25 | #include "servconn.h" | |
| 8569 | 26 | #include "error.h" |
| 5309 | 27 | |
| 15884 | 28 | static void read_cb(gpointer data, gint source, PurpleInputCondition cond); |
|
8583
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
29 | |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
30 | /************************************************************************** |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
31 | * Main |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
32 | **************************************************************************/ |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
33 | |
| 5309 | 34 | MsnServConn * |
|
9158
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
35 | msn_servconn_new(MsnSession *session, MsnServConnType type) |
| 5309 | 36 | { |
| 37 | MsnServConn *servconn; | |
| 38 | ||
| 39 | g_return_val_if_fail(session != NULL, NULL); | |
| 40 | ||
| 41 | servconn = g_new0(MsnServConn, 1); | |
| 42 | ||
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
43 | servconn->type = type; |
|
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
44 | |
| 5309 | 45 | servconn->session = session; |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
46 | servconn->cmdproc = msn_cmdproc_new(session); |
|
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
47 | servconn->cmdproc->servconn = servconn; |
| 5309 | 48 | |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
49 | servconn->httpconn = msn_httpconn_new(servconn); |
|
7288
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
50 | |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
51 | servconn->num = session->servconns_count++; |
|
5898
77c591517706
[gaim-migrate @ 6330]
Christian Hammond <chipx86@chipx86.com>
parents:
5897
diff
changeset
|
52 | |
| 15884 | 53 | servconn->tx_buf = purple_circ_buffer_new(MSN_BUF_LEN); |
|
19578
1b959e85174c
Input handlers are unsigned integers. So set them to 0 instead of -1 after
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
17724
diff
changeset
|
54 | servconn->tx_handler = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
55 | |
|
20664
5c766e725d54
Obligatory typo.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20663
diff
changeset
|
56 | servconn->fd = -1; |
|
20663
277ab3707384
Initialize file descriptors to -1 here too. These haven't caused any
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20602
diff
changeset
|
57 | |
| 5309 | 58 | return servconn; |
| 59 | } | |
| 60 | ||
|
9158
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
61 | void |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
62 | msn_servconn_destroy(MsnServConn *servconn) |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
63 | { |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
64 | g_return_if_fail(servconn != NULL); |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
65 | |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
66 | if (servconn->processing) |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
67 | { |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
68 | servconn->wasted = TRUE; |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
69 | return; |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
70 | } |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
71 | |
|
24708
a5f6cef9797e
This should fix another crash I've seen. We weren't correctly
Mark Doliner <markdoliner@pidgin.im>
parents:
24668
diff
changeset
|
72 | msn_servconn_disconnect(servconn); |
|
9158
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
73 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
74 | if (servconn->destroy_cb) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
75 | servconn->destroy_cb(servconn); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
76 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
77 | if (servconn->httpconn != NULL) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
78 | msn_httpconn_destroy(servconn->httpconn); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
79 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
80 | g_free(servconn->host); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
81 | |
| 15884 | 82 | purple_circ_buffer_destroy(servconn->tx_buf); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
83 | if (servconn->tx_handler > 0) |
| 15884 | 84 | purple_input_remove(servconn->tx_handler); |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
85 | |
|
9158
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
86 | msn_cmdproc_destroy(servconn->cmdproc); |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
87 | g_free(servconn); |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
88 | } |
|
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
89 | |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
90 | void |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
91 | msn_servconn_set_connect_cb(MsnServConn *servconn, |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
92 | void (*connect_cb)(MsnServConn *)) |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
93 | { |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
94 | g_return_if_fail(servconn != NULL); |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
95 | servconn->connect_cb = connect_cb; |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
96 | } |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
97 | |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
98 | void |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
99 | msn_servconn_set_disconnect_cb(MsnServConn *servconn, |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
100 | void (*disconnect_cb)(MsnServConn *)) |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
101 | { |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
102 | g_return_if_fail(servconn != NULL); |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
103 | |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
104 | servconn->disconnect_cb = disconnect_cb; |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
105 | } |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
106 | |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
107 | void |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
108 | msn_servconn_set_destroy_cb(MsnServConn *servconn, |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
109 | void (*destroy_cb)(MsnServConn *)) |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
110 | { |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
111 | g_return_if_fail(servconn != NULL); |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
112 | |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
113 | servconn->destroy_cb = destroy_cb; |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
114 | } |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
115 | |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
116 | /************************************************************************** |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
117 | * Utility |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
118 | **************************************************************************/ |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
119 | |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
120 | void |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
121 | msn_servconn_got_error(MsnServConn *servconn, MsnServConnError error) |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
122 | { |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
123 | char *tmp; |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
124 | const char *reason; |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
125 | |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
126 | const char *names[] = { "Notification", "Switchboard" }; |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
127 | const char *name; |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
128 | |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
129 | name = names[servconn->type]; |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
130 | |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
131 | switch (error) |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
132 | { |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
133 | case MSN_SERVCONN_ERROR_CONNECT: |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
134 | reason = _("Unable to connect"); break; |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
135 | case MSN_SERVCONN_ERROR_WRITE: |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
136 | reason = _("Writing error"); break; |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
137 | case MSN_SERVCONN_ERROR_READ: |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
138 | reason = _("Reading error"); break; |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
139 | default: |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
140 | reason = _("Unknown error"); break; |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
141 | } |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
142 | |
| 15884 | 143 | purple_debug_error("msn", "Connection error from %s server (%s): %s\n", |
|
11897
10853b830964
[gaim-migrate @ 14188]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10773
diff
changeset
|
144 | name, servconn->host, reason); |
|
10853b830964
[gaim-migrate @ 14188]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10773
diff
changeset
|
145 | tmp = g_strdup_printf(_("Connection error from %s server:\n%s"), |
|
10853b830964
[gaim-migrate @ 14188]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10773
diff
changeset
|
146 | name, reason); |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
147 | |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
148 | if (servconn->type == MSN_SERVCONN_NS) |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
149 | { |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
150 | msn_session_set_error(servconn->session, MSN_ERROR_SERVCONN, tmp); |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
151 | } |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
152 | else if (servconn->type == MSN_SERVCONN_SB) |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
153 | { |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
154 | MsnSwitchBoard *swboard; |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
155 | swboard = servconn->cmdproc->data; |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
156 | if (swboard != NULL) |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
157 | swboard->error = MSN_SB_ERROR_CONNECTION; |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
158 | } |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
159 | |
|
14084
6dd13f1ca6e6
[gaim-migrate @ 16619]
Mark Doliner <markdoliner@pidgin.im>
parents:
14040
diff
changeset
|
160 | msn_servconn_disconnect(servconn); |
|
6dd13f1ca6e6
[gaim-migrate @ 16619]
Mark Doliner <markdoliner@pidgin.im>
parents:
14040
diff
changeset
|
161 | |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
162 | g_free(tmp); |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
163 | } |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
164 | |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
165 | /************************************************************************** |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
166 | * Connect |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
167 | **************************************************************************/ |
|
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
168 | |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
169 | static void |
| 20538 | 170 | connect_cb(gpointer data, gint source, const char *error_message) |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
171 | { |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
172 | MsnServConn *servconn; |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
173 | |
|
14174
1615a99529dc
[gaim-migrate @ 16746]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
174 | servconn = data; |
|
14324
8cbedd82b6ac
[gaim-migrate @ 16944]
Mark Doliner <markdoliner@pidgin.im>
parents:
14254
diff
changeset
|
175 | servconn->connect_data = NULL; |
|
10403
4647a87ef73b
[gaim-migrate @ 11648]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10296
diff
changeset
|
176 | |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
177 | servconn->fd = source; |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
178 | |
|
14343
0620a31943fe
[gaim-migrate @ 16966]
Mark Doliner <markdoliner@pidgin.im>
parents:
14324
diff
changeset
|
179 | if (source >= 0) |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
180 | { |
|
10403
4647a87ef73b
[gaim-migrate @ 11648]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10296
diff
changeset
|
181 | servconn->connected = TRUE; |
|
4647a87ef73b
[gaim-migrate @ 11648]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10296
diff
changeset
|
182 | |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
183 | /* Someone wants to know we connected. */ |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
184 | servconn->connect_cb(servconn); |
| 15884 | 185 | servconn->inpa = purple_input_add(servconn->fd, PURPLE_INPUT_READ, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
186 | read_cb, data); |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
187 | } |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
188 | else |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
189 | { |
|
17644
b335f081a036
We should surface this error to the user when calling
Mark Doliner <markdoliner@pidgin.im>
parents:
15884
diff
changeset
|
190 | purple_debug_error("msn", "Connection error: %s\n", error_message); |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
191 | msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_CONNECT); |
|
10296
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
192 | } |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
193 | } |
|
9badf1cedc6e
[gaim-migrate @ 11476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10225
diff
changeset
|
194 | |
| 5309 | 195 | gboolean |
|
23816
fd601d075bd0
Allow forcing an MSN HTTP connection to connect to a new server. This
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23441
diff
changeset
|
196 | msn_servconn_connect(MsnServConn *servconn, const char *host, int port, gboolean force) |
| 5309 | 197 | { |
|
7288
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
198 | MsnSession *session; |
| 5309 | 199 | |
|
8583
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
200 | g_return_val_if_fail(servconn != NULL, FALSE); |
|
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
201 | g_return_val_if_fail(host != NULL, FALSE); |
|
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
202 | g_return_val_if_fail(port > 0, FALSE); |
|
7288
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
203 | |
|
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
204 | session = servconn->session; |
| 5309 | 205 | |
|
8583
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
206 | if (servconn->connected) |
|
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
207 | msn_servconn_disconnect(servconn); |
|
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
208 | |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14343
diff
changeset
|
209 | g_free(servconn->host); |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
210 | servconn->host = g_strdup(host); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
211 | |
|
7288
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
212 | if (session->http_method) |
|
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
213 | { |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
214 | /* HTTP Connection. */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
215 | |
|
23816
fd601d075bd0
Allow forcing an MSN HTTP connection to connect to a new server. This
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23441
diff
changeset
|
216 | if (!servconn->httpconn->connected || force) |
|
10568
15f02c0e7fc1
[gaim-migrate @ 11954]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10481
diff
changeset
|
217 | if (!msn_httpconn_connect(servconn->httpconn, host, port)) |
|
19989
1f1bb361a75a
A fix from Laszlo Pandy to make the MSN HTTP Method work again. Fixes #2638 and should make a number of people happy. This introduces a new string that isn't marked as translatable for 2.2.0 because it is so late in the game.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
218 | return FALSE; |
|
9198
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
219 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
220 | servconn->connected = TRUE; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
221 | servconn->httpconn->virgin = TRUE; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
222 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
223 | /* Someone wants to know we connected. */ |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
224 | servconn->connect_cb(servconn); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
225 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
226 | return TRUE; |
|
7288
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
227 | } |
|
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
228 | |
| 15884 | 229 | servconn->connect_data = purple_proxy_connect(NULL, session->account, |
|
14899
c65f0b4fb351
[gaim-migrate @ 17606]
Mark Doliner <markdoliner@pidgin.im>
parents:
14343
diff
changeset
|
230 | host, port, connect_cb, servconn); |
| 5309 | 231 | |
|
24606
c6eabc2d155f
The "processing" flag basically says "this connection is busy, don't
Mark Doliner <markdoliner@pidgin.im>
parents:
24421
diff
changeset
|
232 | return (servconn->connect_data != NULL); |
| 5309 | 233 | } |
| 234 | ||
| 235 | void | |
| 236 | msn_servconn_disconnect(MsnServConn *servconn) | |
| 237 | { | |
| 238 | g_return_if_fail(servconn != NULL); | |
|
10434
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
239 | |
|
23838
4e6e74a4683b
On MSN, cancel the connection process to a server before checking
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23829
diff
changeset
|
240 | if (servconn->connect_data != NULL) |
|
4e6e74a4683b
On MSN, cancel the connection process to a server before checking
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23829
diff
changeset
|
241 | { |
|
4e6e74a4683b
On MSN, cancel the connection process to a server before checking
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23829
diff
changeset
|
242 | purple_proxy_connect_cancel(servconn->connect_data); |
|
4e6e74a4683b
On MSN, cancel the connection process to a server before checking
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23829
diff
changeset
|
243 | servconn->connect_data = NULL; |
|
4e6e74a4683b
On MSN, cancel the connection process to a server before checking
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23829
diff
changeset
|
244 | } |
|
4e6e74a4683b
On MSN, cancel the connection process to a server before checking
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23829
diff
changeset
|
245 | |
|
10434
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
246 | if (!servconn->connected) |
|
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
247 | { |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
248 | /* We could not connect. */ |
|
10434
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
249 | if (servconn->disconnect_cb != NULL) |
|
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
250 | servconn->disconnect_cb(servconn); |
|
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
251 | |
|
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
252 | return; |
|
17665eed4948
[gaim-migrate @ 11691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10403
diff
changeset
|
253 | } |
| 5309 | 254 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
255 | if (servconn->session->http_method) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
256 | { |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
257 | /* Fake disconnection. */ |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
258 | if (servconn->disconnect_cb != NULL) |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
259 | servconn->disconnect_cb(servconn); |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
260 | |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
261 | return; |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
262 | } |
|
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
263 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
264 | if (servconn->inpa > 0) |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
265 | { |
| 15884 | 266 | purple_input_remove(servconn->inpa); |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
267 | servconn->inpa = 0; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
268 | } |
| 5309 | 269 | |
|
5744
138b30636f76
[gaim-migrate @ 6168]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
270 | close(servconn->fd); |
|
138b30636f76
[gaim-migrate @ 6168]
Christian Hammond <chipx86@chipx86.com>
parents:
5681
diff
changeset
|
271 | |
|
10403
4647a87ef73b
[gaim-migrate @ 11648]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10296
diff
changeset
|
272 | servconn->rx_buf = NULL; |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
273 | servconn->rx_len = 0; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
274 | servconn->payload_len = 0; |
| 5309 | 275 | |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
276 | servconn->connected = FALSE; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
277 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
278 | if (servconn->disconnect_cb != NULL) |
|
8583
56f69df8f12f
[gaim-migrate @ 9333]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8569
diff
changeset
|
279 | servconn->disconnect_cb(servconn); |
| 5309 | 280 | } |
| 281 | ||
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
282 | static void |
| 15884 | 283 | servconn_write_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
284 | { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
285 | MsnServConn *servconn = data; |
|
24031
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23939
diff
changeset
|
286 | gssize ret; |
|
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23939
diff
changeset
|
287 | int writelen; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
288 | |
| 15884 | 289 | writelen = purple_circ_buffer_get_max_read(servconn->tx_buf); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
290 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
291 | if (writelen == 0) { |
| 15884 | 292 | purple_input_remove(servconn->tx_handler); |
|
19578
1b959e85174c
Input handlers are unsigned integers. So set them to 0 instead of -1 after
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
17724
diff
changeset
|
293 | servconn->tx_handler = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
294 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
295 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
296 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
297 | ret = write(servconn->fd, servconn->tx_buf->outptr, writelen); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
298 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
299 | if (ret < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
300 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
301 | else if (ret <= 0) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
302 | msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_WRITE); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
303 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
304 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
305 | |
| 15884 | 306 | purple_circ_buffer_mark_read(servconn->tx_buf, ret); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
307 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
308 | |
| 23078 | 309 | gssize |
|
9158
f8dab42adeaf
[gaim-migrate @ 9942]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9093
diff
changeset
|
310 | msn_servconn_write(MsnServConn *servconn, const char *buf, size_t len) |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
311 | { |
| 23078 | 312 | gssize ret = 0; |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
313 | |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
314 | g_return_val_if_fail(servconn != NULL, 0); |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
315 | |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
316 | if (!servconn->session->http_method) |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
317 | { |
|
19578
1b959e85174c
Input handlers are unsigned integers. So set them to 0 instead of -1 after
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
17724
diff
changeset
|
318 | if (servconn->tx_handler == 0) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
319 | switch (servconn->type) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
320 | { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
321 | case MSN_SERVCONN_NS: |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
322 | case MSN_SERVCONN_SB: |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
323 | ret = write(servconn->fd, buf, len); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
324 | break; |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
325 | #if 0 |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
326 | case MSN_SERVCONN_DC: |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
327 | ret = write(servconn->fd, &buf, sizeof(len)); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
328 | ret = write(servconn->fd, buf, len); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
329 | break; |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
330 | #endif |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
331 | default: |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
332 | ret = write(servconn->fd, buf, len); |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
333 | break; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
334 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
335 | } else { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
336 | ret = -1; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
337 | errno = EAGAIN; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
338 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
339 | |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
340 | if (ret < 0 && errno == EAGAIN) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
341 | ret = 0; |
|
17724
86e7e4aaec9e
Avoid accessing an invalid pointer when ret == -1
Daniel Atallah <datallah@pidgin.im>
parents:
17644
diff
changeset
|
342 | if (ret >= 0 && ret < len) { |
|
19578
1b959e85174c
Input handlers are unsigned integers. So set them to 0 instead of -1 after
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
17724
diff
changeset
|
343 | if (servconn->tx_handler == 0) |
| 15884 | 344 | servconn->tx_handler = purple_input_add( |
| 345 | servconn->fd, PURPLE_INPUT_WRITE, | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
346 | servconn_write_cb, servconn); |
| 15884 | 347 | purple_circ_buffer_append(servconn->tx_buf, buf + ret, |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
12213
diff
changeset
|
348 | len - ret); |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
349 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
350 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
351 | else |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
352 | { |
|
10463
f2f97738b401
[gaim-migrate @ 11737]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10434
diff
changeset
|
353 | ret = msn_httpconn_write(servconn->httpconn, buf, len); |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
354 | } |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
355 | |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
356 | if (ret == -1) |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
357 | { |
|
10481
a5d6b8e1717d
[gaim-migrate @ 11769]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10463
diff
changeset
|
358 | msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_WRITE); |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
359 | } |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
360 | |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
361 | return ret; |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
362 | } |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
363 | |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
364 | static void |
| 15884 | 365 | read_cb(gpointer data, gint source, PurpleInputCondition cond) |
| 5309 | 366 | { |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
367 | MsnServConn *servconn; |
| 5309 | 368 | char buf[MSN_BUF_LEN]; |
|
24031
f9c3efb8afa6
Fix up some types.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23939
diff
changeset
|
369 | gssize len; |
| 5309 | 370 | |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
371 | servconn = data; |
|
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
372 | |
|
23939
90cd53dcef0f
Update MSN's last_received time when we receive something on the NS
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23838
diff
changeset
|
373 | if (servconn->type == MSN_SERVCONN_NS) |
|
24668
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
374 | servconn->session->account->gc->last_received = time(NULL); |
| 5309 | 375 | |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24663
diff
changeset
|
376 | len = read(servconn->fd, buf, sizeof(buf) - 1); |
|
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24663
diff
changeset
|
377 | if (len < 0 && errno == EAGAIN) |
|
23829
b6b23770413e
In MSN servconn, make handling of EAGAIN similar to that in httpconn.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23816
diff
changeset
|
378 | return; |
|
24667
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24663
diff
changeset
|
379 | if (len <= 0) { |
|
ea4a31429bbd
Make the two "read_cb()" functions more similar, and fix a rare
Mark Doliner <markdoliner@pidgin.im>
parents:
24663
diff
changeset
|
380 | purple_debug_error("msn", "servconn %03d read error, " |
|
24421
7e436b064a17
print out the servconn number when it's disconnected
Ka-Hing Cheung <khc@pidgin.im>
parents:
24044
diff
changeset
|
381 | "len: %" G_GSSIZE_FORMAT ", errno: %d, error: %s\n", |
|
7e436b064a17
print out the servconn number when it's disconnected
Ka-Hing Cheung <khc@pidgin.im>
parents:
24044
diff
changeset
|
382 | servconn->num, len, errno, g_strerror(errno)); |
|
23829
b6b23770413e
In MSN servconn, make handling of EAGAIN similar to that in httpconn.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23816
diff
changeset
|
383 | msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); |
|
b6b23770413e
In MSN servconn, make handling of EAGAIN similar to that in httpconn.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23816
diff
changeset
|
384 | |
|
b6b23770413e
In MSN servconn, make handling of EAGAIN similar to that in httpconn.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23816
diff
changeset
|
385 | return; |
| 5309 | 386 | } |
| 387 | ||
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
388 | buf[len] = '\0'; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
389 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
390 | servconn->rx_buf = g_realloc(servconn->rx_buf, len + servconn->rx_len + 1); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
391 | memcpy(servconn->rx_buf + servconn->rx_len, buf, len + 1); |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
392 | servconn->rx_len += len; |
| 5309 | 393 | |
|
24668
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
394 | msn_servconn_process_data(servconn); |
|
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
395 | } |
|
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
396 | |
|
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
397 | void msn_servconn_process_data(MsnServConn *servconn) |
|
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
398 | { |
|
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
399 | char *cur, *end, *old_rx_buf; |
|
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
400 | int cur_len; |
|
853a6d533d60
Separate the parsing of data into a separate function from the reading of
Mark Doliner <markdoliner@pidgin.im>
parents:
24667
diff
changeset
|
401 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
402 | end = old_rx_buf = servconn->rx_buf; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
403 | |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
404 | servconn->processing = TRUE; |
|
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
405 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
406 | do |
|
7288
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
407 | { |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
408 | cur = end; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
409 | |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
410 | if (servconn->payload_len) |
|
7288
486e8b44a14b
[gaim-migrate @ 7869]
Christian Hammond <chipx86@chipx86.com>
parents:
6842
diff
changeset
|
411 | { |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
412 | if (servconn->payload_len > servconn->rx_len) |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
413 | /* The payload is still not complete. */ |
| 5309 | 414 | break; |
| 415 | ||
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
416 | cur_len = servconn->payload_len; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
417 | end += cur_len; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
418 | } |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
419 | else |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
420 | { |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
421 | end = strstr(cur, "\r\n"); |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
422 | |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
423 | if (end == NULL) |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
424 | /* The command is still not complete. */ |
| 5309 | 425 | break; |
| 426 | ||
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
427 | *end = '\0'; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
428 | end += 2; |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
429 | cur_len = end - cur; |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
430 | } |
| 5309 | 431 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
432 | servconn->rx_len -= cur_len; |
|
5899
cc081a4924f6
[gaim-migrate @ 6331]
Christian Hammond <chipx86@chipx86.com>
parents:
5898
diff
changeset
|
433 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
434 | if (servconn->payload_len) |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
435 | { |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
436 | msn_cmdproc_process_payload(servconn->cmdproc, cur, cur_len); |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
437 | servconn->payload_len = 0; |
| 5309 | 438 | } |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
439 | else |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
440 | { |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
441 | msn_cmdproc_process_cmd_text(servconn->cmdproc, cur); |
|
20473
91e1b3a49d10
msn.tgz from SF Patch #1621854 from Ka-Hing Cheung
Ka-Hing Cheung <khc@pidgin.im>
parents:
20472
diff
changeset
|
442 | servconn->payload_len = servconn->cmdproc->last_cmd->payload_len; |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
443 | } |
|
10773
ef88ffed66eb
[gaim-migrate @ 12382]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10568
diff
changeset
|
444 | } while (servconn->connected && !servconn->wasted && servconn->rx_len > 0); |
| 5309 | 445 | |
|
10773
ef88ffed66eb
[gaim-migrate @ 12382]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10568
diff
changeset
|
446 | if (servconn->connected && !servconn->wasted) |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
447 | { |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
448 | if (servconn->rx_len > 0) |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
449 | servconn->rx_buf = g_memdup(cur, servconn->rx_len); |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
450 | else |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
451 | servconn->rx_buf = NULL; |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
452 | } |
| 5309 | 453 | |
|
8808
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
454 | servconn->processing = FALSE; |
|
1cb5ddf6b625
[gaim-migrate @ 9570]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8662
diff
changeset
|
455 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
456 | if (servconn->wasted) |
|
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
457 | msn_servconn_destroy(servconn); |
| 5309 | 458 | |
|
8646
74d0e7406e3b
[gaim-migrate @ 9398]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8583
diff
changeset
|
459 | g_free(old_rx_buf); |
| 5309 | 460 | } |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
461 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
462 | #if 0 |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
463 | static int |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
464 | create_listener(int port) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
465 | { |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
466 | int fd; |
|
20997
7e27312a7d07
Fix all our calls to fcntl(listenfd, F_SETFL, O_NONBLOCK);
Mark Doliner <markdoliner@pidgin.im>
parents:
20747
diff
changeset
|
467 | int flags; |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
468 | const int on = 1; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
469 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
470 | #if 0 |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
471 | struct addrinfo hints; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
472 | struct addrinfo *c, *res; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
473 | char port_str[5]; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
474 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
475 | snprintf(port_str, sizeof(port_str), "%d", port); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
476 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
477 | memset(&hints, 0, sizeof(hints)); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
478 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
479 | hints.ai_flags = AI_PASSIVE; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
480 | hints.ai_family = AF_UNSPEC; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
481 | hints.ai_socktype = SOCK_STREAM; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
482 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
483 | if (getaddrinfo(NULL, port_str, &hints, &res) != 0) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
484 | { |
| 15884 | 485 | purple_debug_error("msn", "Could not get address info: %s.\n", |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
486 | port_str); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
487 | return -1; |
|
9198
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
488 | } |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
489 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
490 | for (c = res; c != NULL; c = c->ai_next) |
|
9198
e8eb6d5eb9eb
[gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents:
9193
diff
changeset
|
491 | { |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
492 | fd = socket(c->ai_family, c->ai_socktype, c->ai_protocol); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
493 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
494 | if (fd < 0) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
495 | continue; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
496 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
497 | setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
498 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
499 | if (bind(fd, c->ai_addr, c->ai_addrlen) == 0) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
500 | break; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
501 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
502 | close(fd); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
503 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
504 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
505 | if (c == NULL) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
506 | { |
| 15884 | 507 | purple_debug_error("msn", "Could not find socket: %s.\n", port_str); |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
508 | return -1; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
509 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
510 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
511 | freeaddrinfo(res); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
512 | #else |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
513 | struct sockaddr_in sockin; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
514 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
515 | fd = socket(AF_INET, SOCK_STREAM, 0); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
516 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
517 | if (fd < 0) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
518 | return -1; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
519 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
520 | if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) != 0) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
521 | { |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
522 | close(fd); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
523 | return -1; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
524 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
525 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
526 | memset(&sockin, 0, sizeof(struct sockaddr_in)); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
527 | sockin.sin_family = AF_INET; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
528 | sockin.sin_port = htons(port); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
529 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
530 | if (bind(fd, (struct sockaddr *)&sockin, sizeof(struct sockaddr_in)) != 0) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
531 | { |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
532 | close(fd); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
533 | return -1; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
534 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
535 | #endif |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
536 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
537 | if (listen (fd, 4) != 0) |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
538 | { |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
539 | close (fd); |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
540 | return -1; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
541 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
542 | |
|
20997
7e27312a7d07
Fix all our calls to fcntl(listenfd, F_SETFL, O_NONBLOCK);
Mark Doliner <markdoliner@pidgin.im>
parents:
20747
diff
changeset
|
543 | flags = fcntl(fd, F_GETFL); |
|
7e27312a7d07
Fix all our calls to fcntl(listenfd, F_SETFL, O_NONBLOCK);
Mark Doliner <markdoliner@pidgin.im>
parents:
20747
diff
changeset
|
544 | fcntl(fd, F_SETFL, flags | O_NONBLOCK); |
|
24044
3fd74bed3968
More leaks of fds to client processes.
Daniel Atallah <datallah@pidgin.im>
parents:
24031
diff
changeset
|
545 | #ifndef _WIN32 |
|
3fd74bed3968
More leaks of fds to client processes.
Daniel Atallah <datallah@pidgin.im>
parents:
24031
diff
changeset
|
546 | fcntl(fd, F_SETFD, FD_CLOEXEC); |
|
3fd74bed3968
More leaks of fds to client processes.
Daniel Atallah <datallah@pidgin.im>
parents:
24031
diff
changeset
|
547 | #endif |
|
9193
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
548 | |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
549 | return fd; |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
550 | } |
|
6e76f1367896
[gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
9165
diff
changeset
|
551 | #endif |