src/protocols/msn/ft.c

Fri, 21 May 2004 14:33:32 +0000

author
Stu Tomlinson <nosnilmot@pidgin.im>
date
Fri, 21 May 2004 14:33:32 +0000
changeset 8999
dd434cfec86a
parent 8886
df24f18563dc
child 9198
e8eb6d5eb9eb
permissions
-rw-r--r--

[gaim-migrate @ 9774]
" This patch renames the existing received-*-msg signals
to receiving-*msg to fit the naming of other signals
where a pointer to the message is passed (writing,
sending, displaying)

It adds new received-*-msg signals which are emitted
after the receiving signals, in line with the other
conversation signals (wrote, sent, displayed)

This is necessary to allow plugins which depend on the
final received message to work alongside plugins which
may modify the message.

One known example of this is festival-gaim alongside
gaim-encryption - festival-gaim would try to "speak"
the encrypted text:
http://sf.net/tracker/?func=detail&aid=943216&group_id=89763&atid=591320

I've tested this with gaim-encryption and festival-gaim
(locally modified so gaim-encryption uses the receiving
signal and festival uses the received signal)

All in-tree users of received-*-msg are updated to use
receiving-*-msg if they do modify the message, the
conversation-signals documentation is updated, the
signals-test.c & signal-test.tcl plugins are also updated." --Stu Tomlinson

committer: Luke Schierer <lschiere@pidgin.im>

4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file msn.c The MSN protocol plugin
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 * gaim
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 *
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 * Copyright (C) 2003, Christian Hammond <chipx86@gnupdate.org>
6701
7e2db9273748 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 5914
diff changeset
7 *
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * (at your option) any later version.
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 *
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * GNU General Public License for more details.
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 *
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 *
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 #include "msn.h"
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 static struct gaim_xfer *
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
26 find_xfer_by_cookie(GaimConnection *gc, unsigned long cookie)
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
27 {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 GSList *g;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29 struct msn_data *md = (struct msn_data *)gc->proto_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
30 struct gaim_xfer *xfer = NULL;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
32
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
33 for (g = md->file_transfers; g != NULL; g = g->next) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 xfer = (struct gaim_xfer *)g->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37 if (xfer_data->cookie == cookie)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38 break;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40 xfer = NULL;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 return xfer;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
45
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
46 static void
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47 msn_xfer_init(struct gaim_xfer *xfer)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48 {
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
49 GaimAccount *account;
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
50 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 struct msn_switchboard *ms;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52 char header[MSN_BUF_LEN];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53 char buf[MSN_BUF_LEN];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
54
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55 account = gaim_xfer_get_account(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57 ms = msn_find_switch(account->gc, xfer->who);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
61 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
62 /*
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63 * NOTE: We actually have to wait for the next Invitation message
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 * before the transfer starts. We handle that in
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 * msn_xfer_start().
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66 */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 g_snprintf(header, sizeof(header),
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
69 "MIME-Version: 1.0\r\n"
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70 "Content-Type: text/x-msmsgsinvite; charset=UTF-8\r\n\r\n"
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
71 "Invitation-Command: ACCEPT\r\n"
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72 "Invitation-Cookie: %lu\r\n"
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73 "Launch-Application: FALSE\r\n"
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
74 "Request-Data: IP-Address:\r\n",
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75 (unsigned long)xfer_data->cookie);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
76
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
77 g_snprintf(buf, sizeof(buf), "MSG %u N %d\r\n%s\r\n\r\n",
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
78 ++ms->trId, strlen(header) + strlen("\r\n\r\n"),
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
79 header);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
80
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81 if (msn_write(ms->fd, buf, strlen(buf)) < 0) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82 msn_kill_switch(ms);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
83 gaim_xfer_destroy(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
84
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
85 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
87 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
88 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
90 static void
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91 msn_xfer_start(struct gaim_xfer *xfer)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92 {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
96
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 xfer_data->transferring = TRUE;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100 char sendbuf[MSN_BUF_LEN];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102 /* Send the TFR string to request the start of a transfer. */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
103 g_snprintf(sendbuf, sizeof(sendbuf), "TFR\r\n");
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
105 if (msn_write(xfer->fd, sendbuf, strlen(sendbuf)) < 0) {
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
106 gaim_xfer_cancel_remote(xfer);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
107 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
108 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
109 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
110
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
111 static void
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
112 msn_xfer_end(struct gaim_xfer *xfer)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113 {
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
114 GaimAccount *account;
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
115 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
116 struct msn_data *md;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
117
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
118 account = gaim_xfer_get_account(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
119 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
120 md = (struct msn_data *)account->gc->proto_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
121
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
122 if (gaim_xfer_get_type(xfer) == GAIM_XFER_RECEIVE) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
123 char sendbuf[MSN_BUF_LEN];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
124
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
125 g_snprintf(sendbuf, sizeof(sendbuf), "BYE 16777989\r\n");
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
126
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
127 msn_write(xfer->fd, sendbuf, strlen(sendbuf));
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
128
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
129 md->file_transfers = g_slist_remove(md->file_transfers, xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
130
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
131 g_free(xfer_data);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
132 xfer->data = NULL;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
133 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
134 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
135
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
136 static void
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
137 msn_xfer_cancel_send(struct gaim_xfer *xfer)
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
138 {
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
139 GaimAccount *account;
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
140 struct msn_xfer_data *xfer_data;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
141 struct msn_data *md;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
142
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
143 xfer_data = (struct msn_xfer_data *)xfer->data;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
144
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
145 xfer_data->do_cancel = TRUE;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
146
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
147 account = gaim_xfer_get_account(xfer);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
148 md = (struct msn_data *)account->gc->proto_data;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
149
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
150 md->file_transfers = g_slist_remove(md->file_transfers, xfer);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
151
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
152 g_free(xfer_data);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
153 xfer->data = NULL;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
154 }
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
155
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
156 static void
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
157 msn_xfer_cancel_recv(struct gaim_xfer *xfer)
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
158 {
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
159 GaimAccount *account;
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
160 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
161 struct msn_data *md;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
162
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
163 account = gaim_xfer_get_account(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
164 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
165 md = (struct msn_data *)account->gc->proto_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
166
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
167 md->file_transfers = g_slist_remove(md->file_transfers, xfer);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
168
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
169 g_free(xfer_data);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
170 xfer->data = NULL;
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
171 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
172
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
173 static size_t
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
174 msn_xfer_read(char **buffer, struct gaim_xfer *xfer)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
175 {
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
176 struct msn_xfer_data *xfer_data;
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
177 unsigned char header[3];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
178 size_t len, size;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
179
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
180 xfer_data = (struct msn_xfer_data *)xfer->data;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
181
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
182 if (xfer_data->do_cancel)
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
183 {
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
184 write(xfer->fd, "CCL\n", 4);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
185
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
186 return 0;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
187 }
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
188
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189 if (read(xfer->fd, header, sizeof(header)) < 3) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
190 gaim_xfer_set_completed(xfer, TRUE);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
191 return 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
192 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
193
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
194 if (header[0] != 0) {
5221
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
195 gaim_debug(GAIM_DEBUG_ERROR, "msn",
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
196 "MSNFTP: Invalid header[0]: %d. Aborting.\n",
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
197 header[0]);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
198 return 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
199 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
200
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
201 size = header[1] | (header[2] << 8);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
202
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
203 *buffer = g_new0(char, size);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
204
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
205 for (len = 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206 len < size;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
207 len += read(xfer->fd, *buffer + len, size - len))
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 ;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
210 if (len == 0)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
211 gaim_xfer_set_completed(xfer, TRUE);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
212
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
213 return len;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
214 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
215
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216 static size_t
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
217 msn_xfer_write(const char *buffer, size_t size, struct gaim_xfer *xfer)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
218 {
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
219 GaimAccount *account;
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
220 struct msn_xfer_data *xfer_data;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
221 struct msn_data *md;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
222 unsigned char header[3];
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
223
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
224 xfer_data = (struct msn_xfer_data *)xfer->data;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
225 account = gaim_xfer_get_account(xfer);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
226 md = (struct msn_data *)account->gc->proto_data;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
227
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
228 if (xfer_data->do_cancel)
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
229 {
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
230 header[0] = 1;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
231 header[1] = 0;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
232 header[2] = 0;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
233
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
234 if (write(xfer->fd, header, sizeof(header)) < 3) {
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
235 gaim_xfer_cancel_remote(xfer);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
236 return 0;
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
237 }
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
238 }
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
239 else
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
240 {
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
241 /* Not implemented yet. */
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
242 }
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
243
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
244 return 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
245 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
246
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
247 static int
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
248 msn_process_msnftp(struct gaim_xfer *xfer, gint source, const char *buf)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
249 {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
250 struct msn_xfer_data *xfer_data;
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
251 GaimAccount *account;
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
252 char sendbuf[MSN_BUF_LEN];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
253
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
254 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
255 account = gaim_xfer_get_account(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
256
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4675
diff changeset
257 if (!g_ascii_strncasecmp(buf, "VER MSNFTP", 10)) {
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
258 /* Send the USR string */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
259 g_snprintf(sendbuf, sizeof(sendbuf), "USR %s %lu\r\n",
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
260 account->gc->username,
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
261 (unsigned long)xfer_data->authcookie);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
262
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
263 if (msn_write(source, sendbuf, strlen(sendbuf)) < 0) {
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
264 gaim_xfer_cancel_remote(xfer); /* ? */
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
265
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
266 return 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
267 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
268 }
4793
1da93f6c80f3 [gaim-migrate @ 5113]
Nathan Walp <nwalp@pidgin.im>
parents: 4675
diff changeset
269 else if (!g_ascii_strncasecmp(buf, "FIL", 3)) {
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
270 gaim_input_remove(xfer_data->inpa);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
271 xfer_data->inpa = 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
272
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
273 gaim_xfer_start(xfer, source, NULL, 0);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
274 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
275 #if 0
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
276 char *tmp = buf;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
277
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
278 /*
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
279 * This data is the size, but we already have
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
280 * the size, so who cares.
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
281 */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
282 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
283
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
284 /* Send the TFR string to request the start of a transfer. */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
285 g_snprintf(sendbuf, sizeof(sendbuf), "TFR\r\n");
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
286
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
287
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
288 if (msn_write(source, sendbuf, strlen(sendbuf)) < 0) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
289 gaim_xfer_cancel(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
290
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
291 return 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
292 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
293 #endif
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
294
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
295 return 1;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
296 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
297
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
298 static void
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
299 msn_msnftp_cb(gpointer data, gint source, GaimInputCondition cond)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
300 {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
301 struct gaim_xfer *xfer;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
302 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
303 char buf[MSN_BUF_LEN];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
304 gboolean cont = TRUE;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
305 size_t len;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
306
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
307 xfer = (struct gaim_xfer *)data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
308 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
309
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
310 len = read(source, buf, sizeof(buf));
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
311
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
312 if (len <= 0) {
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
313 gaim_xfer_cancel_remote(xfer);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
314 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
315 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
316
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
317 xfer_data->rxqueue = g_realloc(xfer_data->rxqueue,
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
318 len + xfer_data->rxlen);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
319 memcpy(xfer_data->rxqueue + xfer_data->rxlen, buf, len);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
320 xfer_data->rxlen += len;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
321
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
322 while (cont) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
323 char *end = xfer_data->rxqueue;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
324 char *cmd;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
325 int cmdlen;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
326 int i = 0;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
327
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
328 if (!xfer_data->rxlen)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
329 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
330
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
331 for (i = 0; i < xfer_data->rxlen - 1; end++, i++) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
332 if (*end == '\r' && *(end + 1) == '\n')
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
333 break;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
334 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
335
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
336 if (i == xfer_data->rxlen - 1)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
337 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
338
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
339 cmdlen = end - xfer_data->rxqueue + 2;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
340 cmd = xfer_data->rxqueue;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
341
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
342 xfer_data->rxlen -= cmdlen;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
343
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
344 if (xfer_data->rxlen)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
345 xfer_data->rxqueue = g_memdup(cmd + cmdlen, xfer_data->rxlen);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
346 else {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
347 xfer_data->rxqueue = NULL;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
348 cmd = g_realloc(cmd, cmdlen + 1);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
349 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
350
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
351 cmd[cmdlen] = '\0';
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
352
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
353 g_strchomp(cmd);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
354
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
355 cont = msn_process_msnftp(xfer, source, cmd);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
356
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
357 g_free(cmd);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
358 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
359 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
360
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
361 static void
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
362 msn_msnftp_connect(gpointer data, gint source, GaimInputCondition cond)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
363 {
5564
1779a1bfbdb8 [gaim-migrate @ 5966]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
364 GaimAccount *account;
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
365 struct gaim_xfer *xfer;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
366 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
367 char buf[MSN_BUF_LEN];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
368
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
369 xfer = (struct gaim_xfer *)data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
370 account = gaim_xfer_get_account(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
371 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
372
5914
70c15057c4ea [gaim-migrate @ 6346]
Nathan Walp <nwalp@pidgin.im>
parents: 5912
diff changeset
373 if (source == -1 || !g_slist_find(gaim_connections_get_all(), account->gc)) {
5221
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
374 gaim_debug(GAIM_DEBUG_ERROR, "msn",
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
375 "MSNFTP: Error establishing connection\n");
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
376 close(source);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
377
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
378 gaim_xfer_cancel_remote(xfer);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
379
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
380 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
381 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
382
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
383 g_snprintf(buf, sizeof(buf), "VER MSNFTP\r\n");
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
384
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
385 if (msn_write(source, buf, strlen(buf)) < 0) {
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
386 gaim_xfer_cancel_remote(xfer);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
387 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
388 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
389
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
390 xfer_data->inpa = gaim_input_add(source, GAIM_INPUT_READ,
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
391 msn_msnftp_cb, xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
392 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
393
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
394 void
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
395 msn_process_ft_msg(struct msn_switchboard *ms, char *msg)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
396 {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
397 struct gaim_xfer *xfer;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
398 struct msn_xfer_data *xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
399 struct msn_data *md = ms->gc->proto_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
400 char *tmp = msg;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
401
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
402 if (strstr(msg, "Application-GUID: " MSN_FT_GUID) &&
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
403 strstr(msg, "Invitation-Command: INVITE")) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
404
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
405 /*
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
406 * First invitation message, requesting an ACCEPT or CANCEL from
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
407 * the recipient. Used in incoming file transfers.
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
408 */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
409
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
410 char *filename;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
411 char *cookie_s, *filesize_s;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
412
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
413 tmp = strstr(msg, "Invitation-Cookie");
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
414 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
415 cookie_s = tmp;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
416 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
417 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
418 filename = tmp;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
419
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
420 /* Needed for filenames with spaces */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
421 tmp = strchr(tmp, '\r');
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
422 *tmp = '\0';
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
423 tmp += 2;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
424
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
425 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
426 filesize_s = tmp;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
427 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
428
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
429 /* Setup the MSN-specific file transfer data */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
430 xfer_data = g_new0(struct msn_xfer_data, 1);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
431 xfer_data->cookie = atoi(cookie_s);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
432 xfer_data->transferring = FALSE;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
433
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
434 /* Build the file transfer handle. */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
435 xfer = gaim_xfer_new(ms->gc->account, GAIM_XFER_RECEIVE, ms->msguser);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
436 xfer->data = xfer_data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
437
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
438 /* Set the info about the incoming file. */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
439 gaim_xfer_set_filename(xfer, filename);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
440 gaim_xfer_set_size(xfer, atoi(filesize_s));
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
441
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
442 /* Setup our I/O op functions */
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
443 gaim_xfer_set_init_fnc(xfer, msn_xfer_init);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
444 gaim_xfer_set_start_fnc(xfer, msn_xfer_start);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
445 gaim_xfer_set_end_fnc(xfer, msn_xfer_end);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
446 gaim_xfer_set_cancel_send_fnc(xfer, msn_xfer_cancel_send);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
447 gaim_xfer_set_cancel_recv_fnc(xfer, msn_xfer_cancel_recv);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
448 gaim_xfer_set_read_fnc(xfer, msn_xfer_read);
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
449 gaim_xfer_set_write_fnc(xfer, msn_xfer_write);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
450
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
451 /* Keep track of this transfer for later. */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
452 md->file_transfers = g_slist_append(md->file_transfers, xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
453
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
454 /* Now perform the request */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
455 gaim_xfer_request(xfer);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
456 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
457 else if (strstr(msg, "Invitation-Command: ACCEPT")) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
458
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
459 /*
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
460 * XXX I hope these checks don't return false positives, but they
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
461 * seem like they should work. The only issue is alternative
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
462 * protocols, *maybe*.
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
463 */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
464
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
465 if (strstr(msg, "AuthCookie:")) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
466
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
467 /*
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
468 * Second invitation request, sent after the recipient accepts
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
469 * the request. Used in incoming file transfers.
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
470 */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
471 char *cookie_s, *ip, *port_s, *authcookie_s;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
472 char ip_s[16];
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
473
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
474 tmp = strstr(msg, "Invitation-Cookie");
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
475 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
476 cookie_s = tmp;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
477 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
478 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
479 ip = tmp;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
480 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
481 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
482 port_s = tmp;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
483 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
484 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
485 authcookie_s = tmp;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
486 GET_NEXT(tmp);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
487
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
488 xfer = find_xfer_by_cookie(ms->gc, atoi(cookie_s));
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
489
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
490 if (xfer == NULL)
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
491 {
5221
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
492 gaim_debug(GAIM_DEBUG_ERROR, "msn",
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
493 "MSNFTP : Cookie not found. "
86a1444cc9ac [gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents: 4793
diff changeset
494 "File transfer aborted.\n");
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
495 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
496 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
497
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
498 xfer_data = (struct msn_xfer_data *)xfer->data;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
499 xfer_data->authcookie = atol(authcookie_s);
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
500
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
501 strncpy(ip_s, ip, sizeof(ip_s));
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
502
5681
514fbc5374dc [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 5564
diff changeset
503 if (gaim_proxy_connect(xfer->account, ip_s, atoi(port_s),
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
504 msn_msnftp_connect, xfer) != 0) {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
505
4675
8e0a7b537ca2 [gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents: 4634
diff changeset
506 gaim_xfer_cancel_remote(xfer);
4542
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
507
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
508 return;
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
509 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
510 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
511 else
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
512 {
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
513 /*
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
514 * An accept message from the recipient. Used in outgoing
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
515 * file transfers.
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
516 */
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
517 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
518 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
519 }
05a476dec582 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
520

mercurial