annotate libpurple/protocols/msn/slp.c @ 30844:7b1b7a4e0bb4

Documetn P2P Application ID in a enum and use it instead of 'magic numbers'.
author masca@cpw.pidgin.im
date Mon, 05 Jul 2010 22:00:10 +0000
parents 56ef12440d52
children 23be655cc688
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file msnslp.c MSNSLP support
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
4 * purple
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * source distribution.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
19681
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19591
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 */
30742
a99b6dcdb60d Remove unnecesary includes from msn.h.
masca@cpw.pidgin.im
parents: 30735
diff changeset
24
30758
230caecf5435 Include internal.h on each c file to avoid windows breakage as recommended by Daniel.
masca@cpw.pidgin.im
parents: 30742
diff changeset
25 #include "internal.h"
30742
a99b6dcdb60d Remove unnecesary includes from msn.h.
masca@cpw.pidgin.im
parents: 30735
diff changeset
26 #include "debug.h"
a99b6dcdb60d Remove unnecesary includes from msn.h.
masca@cpw.pidgin.im
parents: 30735
diff changeset
27
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "slp.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29 #include "slpcall.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
30 #include "slpmsg.h"
30013
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 29495
diff changeset
31 #include "msnutils.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33 #include "object.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
34 #include "user.h"
30811
fcfe022982e4 This header is needed to know the max size of a part.
masca@cpw.pidgin.im
parents: 30810
diff changeset
35 #include "sbconn.h"
30013
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 29495
diff changeset
36 #include "directconn.h"
30762
e03f912141dd Start moving p2p specific code to its own module.
masca@cpw.pidgin.im
parents: 30760
diff changeset
37 #include "p2p.h"
30832
eabeba9c823f Move msn_xfer code to it's own module aiming to simplify slp code.
masca@cpw.pidgin.im
parents: 30831
diff changeset
38 #include "xfer.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
39
30081
ee423c6c71b6 Minor comment fix.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30079
diff changeset
40 /* seconds to delay between sending buddy icon requests to the server. */
24399
9bdaf273c0ff Use purple_timeout_add_seconds() instead of purple_timeout_add() in a
Mark Doliner <mark@kingant.net>
parents: 24398
diff changeset
41 #define BUDDY_ICON_DELAY 20
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
42
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
43
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
44 /**************************************************************************
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
45 * SLP Control
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
46 **************************************************************************/
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
47
30013
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 29495
diff changeset
48 void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 29495
diff changeset
49 msn_slp_send_ok(MsnSlpCall *slpcall, const char *branch,
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
50 const char *type, const char *content)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
51 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 MsnSlpLink *slplink;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53 MsnSlpMessage *slpmsg;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
54
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55 slplink = slpcall->slplink;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57 /* 200 OK */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58 slpmsg = msn_slpmsg_sip_new(slpcall, 1,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
59 "MSNSLP/1.0 200 OK",
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
60 branch, type, content);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
61
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
62 slpmsg->info = "SLP 200 OK";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
63 slpmsg->text_body = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
64
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
65 msn_slplink_queue_slpmsg(slplink, slpmsg);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
66 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
67
30013
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 29495
diff changeset
68 void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 29495
diff changeset
69 msn_slp_send_decline(MsnSlpCall *slpcall, const char *branch,
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
70 const char *type, const char *content)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
71 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
72 MsnSlpLink *slplink;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
73 MsnSlpMessage *slpmsg;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
74
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
75 slplink = slpcall->slplink;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
77 /* 603 Decline */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
78 slpmsg = msn_slpmsg_sip_new(slpcall, 1,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
79 "MSNSLP/1.0 603 Decline",
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
80 branch, type, content);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
82 slpmsg->info = "SLP 603 Decline";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83 slpmsg->text_body = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
85 msn_slplink_queue_slpmsg(slplink, slpmsg);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
86 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
87
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
88 /**************************************************************************
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
89 * Msg Callbacks
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
90 **************************************************************************/
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
91
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
92 /*
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
93 * Called on a timeout from end_user_display(). Frees a buddy icon window slow and dequeues the next
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
94 * buddy icon request if there is one.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
95 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
96 static gboolean
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
97 msn_release_buddy_icon_request_timeout(gpointer data)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
98 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
99 MsnUserList *userlist = (MsnUserList *)data;
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 23129
diff changeset
100
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
101 /* Free one window slot */
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 23129
diff changeset
102 userlist->buddy_icon_window++;
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 23129
diff changeset
103
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
104 /* Clear the tag for our former request timer */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105 userlist->buddy_icon_request_timer = 0;
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 23129
diff changeset
106
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 msn_release_buddy_icon_request(userlist);
23298
5cdd93dac7a2 Delete trailing whitespace
Mark Doliner <mark@kingant.net>
parents: 23129
diff changeset
108
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
109 return FALSE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
110 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
113 got_user_display(MsnSlpCall *slpcall,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114 const guchar *data, gsize size)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
115 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116 MsnUserList *userlist;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 const char *info;
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
118 PurpleAccount *account;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
120 g_return_if_fail(slpcall != NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
121
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122 info = slpcall->data_info;
27432
35b6fd563056 Change all MSN_DEBUG_* messages to use the new purple_debug_is_verbose call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26517
diff changeset
123 if (purple_debug_is_verbose())
35b6fd563056 Change all MSN_DEBUG_* messages to use the new purple_debug_is_verbose call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26517
diff changeset
124 purple_debug_info("msn", "Got User Display: %s\n", slpcall->slplink->remote_user);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
125
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126 userlist = slpcall->slplink->session->userlist;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127 account = slpcall->slplink->session->account;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
129 purple_buddy_icons_set_for_user(account, slpcall->slplink->remote_user,
16391
24bbd7e46bfe Change the imgstore and by extension, then the buddy icon code to take over
Richard Laager <rlaager@wiktel.com>
parents: 16390
diff changeset
130 g_memdup(data, size), size, info);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
131
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
132 #if 0
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
133 /* Free one window slot */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
134 userlist->buddy_icon_window++;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
135
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
136 purple_debug_info("msn", "got_user_display(): buddy_icon_window++ yields =%d\n",
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
137 userlist->buddy_icon_window);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
138
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
139 msn_release_buddy_icon_request(userlist);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
140 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
141 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
142
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
143 static void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
144 end_user_display(MsnSlpCall *slpcall, MsnSession *session)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
145 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
146 MsnUserList *userlist;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
147
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
148 g_return_if_fail(session != NULL);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
149
27432
35b6fd563056 Change all MSN_DEBUG_* messages to use the new purple_debug_is_verbose call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26517
diff changeset
150 if (purple_debug_is_verbose())
35b6fd563056 Change all MSN_DEBUG_* messages to use the new purple_debug_is_verbose call
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 26517
diff changeset
151 purple_debug_info("msn", "End User Display\n");
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
152
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
153 userlist = session->userlist;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
154
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
155 /* If the session is being destroyed we better stop doing anything. */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
156 if (session->destroying)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
157 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
158
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
159 /* Delay before freeing a buddy icon window slot and requesting the next icon, if appropriate.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
160 * If we don't delay, we'll rapidly hit the MSN equivalent of AIM's rate limiting; the server will
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
161 * send us an error 800 like so:
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
162 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
163 * C: NS 000: XFR 21 SB
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
164 * S: NS 000: 800 21
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
165 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
166 if (userlist->buddy_icon_request_timer) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
167 /* Free the window slot used by this previous request */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168 userlist->buddy_icon_window++;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
169
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
170 /* Clear our pending timeout */
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
171 purple_timeout_remove(userlist->buddy_icon_request_timer);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
172 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
173
24399
9bdaf273c0ff Use purple_timeout_add_seconds() instead of purple_timeout_add() in a
Mark Doliner <mark@kingant.net>
parents: 24398
diff changeset
174 /* Wait BUDDY_ICON_DELAY s before freeing our window slot and requesting the next icon. */
9bdaf273c0ff Use purple_timeout_add_seconds() instead of purple_timeout_add() in a
Mark Doliner <mark@kingant.net>
parents: 24398
diff changeset
175 userlist->buddy_icon_request_timer = purple_timeout_add_seconds(BUDDY_ICON_DELAY,
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
176 msn_release_buddy_icon_request_timeout, userlist);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
177 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
178
23497
01c3074b2299 A patch from felipec to make (msn_)request_user_display static.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23298
diff changeset
179 static void
30835
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
180 request_own_user_display(MsnUser *user)
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
181 {
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
182 PurpleAccount *account;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
183 MsnSession *session;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
184 MsnObject *my_obj = NULL;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
185 gconstpointer data = NULL;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
186 const char *info;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
187 size_t len = 0;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
188
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
189 if (purple_debug_is_verbose())
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
190 purple_debug_info("msn", "Requesting our own user display\n");
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
191
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
192 session = user->userlist->session;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
193 account = session->account;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
194 my_obj = msn_user_get_object(user);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
195
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
196 if (my_obj != NULL) {
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
197 PurpleStoredImage *img = msn_object_get_image(my_obj);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
198 data = purple_imgstore_get_data(img);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
199 len = purple_imgstore_get_size(img);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
200 info = msn_object_get_sha1(my_obj);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
201 }
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
202
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
203 purple_buddy_icons_set_for_user(account, user->passport, g_memdup(data, len), len, info);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
204
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
205 /* Free one window slot */
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
206 session->userlist->buddy_icon_window++;
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
207
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
208 if (purple_debug_is_verbose())
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
209 purple_debug_info("msn", "msn_request_user_display(): buddy_icon_window++ yields =%d\n",
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
210 session->userlist->buddy_icon_window);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
211
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
212 msn_release_buddy_icon_request(session->userlist);
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
213 }
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
214
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
215 void
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
216 msn_request_user_display(MsnUser *user)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
217 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15373
diff changeset
218 PurpleAccount *account;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
219 MsnSession *session;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
220 MsnSlpLink *slplink;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
221 MsnObject *obj;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
222 const char *info;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
223
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224 session = user->userlist->session;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
225 account = session->account;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
226
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
227 slplink = msn_session_get_slplink(session, user->passport);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
228
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
229 obj = msn_user_get_object(user);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
230
16031
7873f314fadf Patch in Trac ticket #113 from Simom.
Richard Laager <rlaager@wiktel.com>
parents: 15822
diff changeset
231 info = msn_object_get_sha1(obj);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
232
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
233 if (g_ascii_strcasecmp(user->passport,
30835
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
234 purple_account_get_username(account)))
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
235 msn_slplink_request_object(slplink, info, got_user_display,
30835
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
236 end_user_display, obj);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
237 else
30835
56ef12440d52 Move queue logic in requesting user display out of slp code.
masca@cpw.pidgin.im
parents: 30833
diff changeset
238 request_own_user_display(user);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
239 }
30831
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
240
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
241 static void
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
242 send_file_cb(MsnSlpCall *slpcall)
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
243 {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
244 MsnSlpMessage *slpmsg;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
245 PurpleXfer *xfer;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
246
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
247 xfer = (PurpleXfer *)slpcall->xfer;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
248 if (purple_xfer_get_status(xfer) >= PURPLE_XFER_STATUS_STARTED)
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
249 return;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
250
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
251 purple_xfer_ref(xfer);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
252 purple_xfer_start(xfer, -1, NULL, 0);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
253 if (purple_xfer_get_status(xfer) != PURPLE_XFER_STATUS_STARTED) {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
254 purple_xfer_unref(xfer);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
255 return;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
256 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
257 purple_xfer_unref(xfer);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
258
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
259 slpmsg = msn_slpmsg_file_new(slpcall, purple_xfer_get_size(xfer));
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
260 msn_slpmsg_set_slplink(slpmsg, slpcall->slplink);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
261
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
262 msn_slplink_send_slpmsg(slpcall->slplink, slpmsg);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
263 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
264
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
265 static gchar *
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
266 gen_context(PurpleXfer *xfer, const char *file_name, const char *file_path)
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
267 {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
268 gsize size = 0;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
269 MsnFileContext *header;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
270 gchar *u8 = NULL;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
271 gchar *ret;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
272 gunichar2 *uni = NULL;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
273 glong currentChar = 0;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
274 glong len = 0;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
275 const char *preview;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
276 gsize preview_len;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
277
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
278 size = purple_xfer_get_size(xfer);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
279
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
280 purple_xfer_prepare_thumbnail(xfer, "png");
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
281
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
282 if (!file_name) {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
283 gchar *basename = g_path_get_basename(file_path);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
284 u8 = purple_utf8_try_convert(basename);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
285 g_free(basename);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
286 file_name = u8;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
287 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
288
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
289 uni = g_utf8_to_utf16(file_name, -1, NULL, &len, NULL);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
290
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
291 if (u8) {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
292 g_free(u8);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
293 file_name = NULL;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
294 u8 = NULL;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
295 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
296
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
297 preview = purple_xfer_get_thumbnail(xfer, &preview_len);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
298 header = g_malloc(sizeof(MsnFileContext) + preview_len);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
299
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
300 header->length = GUINT32_TO_LE(sizeof(MsnFileContext) - 1);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
301 header->version = GUINT32_TO_LE(2); /* V.3 contains additional unnecessary data */
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
302 header->file_size = GUINT64_TO_LE(size);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
303 if (preview)
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
304 header->type = GUINT32_TO_LE(0);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
305 else
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
306 header->type = GUINT32_TO_LE(1);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
307
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
308 len = MIN(len, MAX_FILE_NAME_LEN);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
309 for (currentChar = 0; currentChar < len; currentChar++) {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
310 header->file_name[currentChar] = GUINT16_TO_LE(uni[currentChar]);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
311 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
312 memset(&header->file_name[currentChar], 0x00, (MAX_FILE_NAME_LEN - currentChar) * 2);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
313
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
314 memset(&header->unknown1, 0, sizeof(header->unknown1));
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
315 header->unknown2 = GUINT32_TO_LE(0xffffffff);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
316 if (preview) {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
317 memcpy(&header->preview, preview, preview_len);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
318 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
319 header->preview[preview_len] = '\0';
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
320
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
321 g_free(uni);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
322 ret = purple_base64_encode((const guchar *)header, sizeof(MsnFileContext) + preview_len);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
323 g_free(header);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
324 return ret;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
325 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
326
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
327 void
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
328 msn_request_ft(PurpleXfer *xfer)
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
329 {
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
330 MsnSlpCall *slpcall;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
331 MsnSlpLink *slplink;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
332 char *context;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
333 const char *fn;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
334 const char *fp;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
335
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
336 fn = purple_xfer_get_filename(xfer);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
337 fp = purple_xfer_get_local_filename(xfer);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
338
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
339 slplink = xfer->data;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
340
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
341 g_return_if_fail(slplink != NULL);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
342 g_return_if_fail(fp != NULL);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
343
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
344 slpcall = msn_slpcall_new(slplink);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
345 msn_slpcall_init(slpcall, MSN_SLPCALL_DC);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
346
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
347 slpcall->session_init_cb = send_file_cb;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
348 slpcall->end_cb = msn_xfer_end_cb;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
349 slpcall->cb = msn_xfer_completed_cb;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
350 slpcall->xfer = xfer;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
351 purple_xfer_ref(slpcall->xfer);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
352
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
353 slpcall->pending = TRUE;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
354
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
355 purple_xfer_set_cancel_send_fnc(xfer, msn_xfer_cancel);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
356 purple_xfer_set_read_fnc(xfer, msn_xfer_read);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
357 purple_xfer_set_write_fnc(xfer, msn_xfer_write);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
358
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
359 xfer->data = slpcall;
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
360
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
361 context = gen_context(xfer, fn, fp);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
362
30844
7b1b7a4e0bb4 Documetn P2P Application ID in a enum and use it instead of 'magic numbers'.
masca@cpw.pidgin.im
parents: 30835
diff changeset
363 msn_slpcall_invite(slpcall, MSN_FT_GUID, P2P_APPID_FILE, context);
30831
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
364 msn_slplink_unref(slplink);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
365
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
366 g_free(context);
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
367 }
210feb895031 Move file request up in the stack.
masca@cpw.pidgin.im
parents: 30827
diff changeset
368