annotate libpurple/protocols/msn/directconn.c @ 30544:ef7303c25751

For some reason, this line creates the following warning: directconn.c:67: warning: dereferencing type-punned pointer will break strict-aliasing rules I don't understand why it only happens for this line, and not the ones after it. At least this change stops the warning. If anyone knows how to properly fix it, or whether it's a bug in GCC or something, please let me know.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Fri, 28 May 2010 21:26:57 +0000
parents 7f564cf26ea3
children f7e1d5d397b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15374
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 directconn.c MSN direct connection functions
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15374
diff changeset
4 * purple
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15374
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
15374
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
19680
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 18431
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24 #include "msn.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25 #include "directconn.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
27 #include "slp.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
28 #include "slpmsg.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
29
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
30 #pragma pack(push,1)
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
31 typedef struct {
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
32 guint32 session_id;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
33 guint32 seq_id;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
34 guint64 offset;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
35 guint64 total_size;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
36 guint32 length;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
37 guint32 flags;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
38 guint32 ack_id;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
39 guint32 ack_uid;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
40 guint64 ack_size;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
41 /* guint8 body[1]; */
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
42 } MsnDcContext;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
43 #pragma pack(pop)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
44
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
45 #define DC_PACKET_HEADER_SIZE sizeof(MsnDcContext)
30473
56871d6c06fc I've seen packet sizes larger than our current maximum. Hopefully 8KiB is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30472
diff changeset
46 #define DC_MAX_BODY_SIZE 8*1024
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
47 #define DC_MAX_PACKET_SIZE (DC_PACKET_HEADER_SIZE + DC_MAX_BODY_SIZE)
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
48
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
49 static void
30461
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
50 msn_dc_calculate_nonce_hash(MsnDirectConnNonceType type,
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
51 const guchar nonce[16], gchar nonce_hash[37])
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 {
30544
ef7303c25751 For some reason, this line creates the following warning:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30525
diff changeset
53 guint32 *tmp;
30439
bc720282a62d Clean up msn_dc_generate_nonce. It just looked weird.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30438
diff changeset
54 guchar digest[20];
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55
30461
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
56 if (type == DC_NONCE_SHA1) {
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
57 PurpleCipher *cipher = purple_ciphers_find_cipher("sha1");
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
58 PurpleCipherContext *context = purple_cipher_context_new(cipher, NULL);
30461
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
59 purple_cipher_context_append(context, nonce, sizeof(nonce));
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
60 purple_cipher_context_digest(context, sizeof(digest), digest, NULL);
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
61 purple_cipher_context_destroy(context);
30461
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
62 } else if (type == DC_NONCE_PLAIN) {
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
63 memcpy(digest, nonce, 16);
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
64 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
65
30544
ef7303c25751 For some reason, this line creates the following warning:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30525
diff changeset
66 /* TODO: Somebody please tell me why this first one causes a warning,
ef7303c25751 For some reason, this line creates the following warning:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30525
diff changeset
67 but the others don't! */
ef7303c25751 For some reason, this line creates the following warning:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30525
diff changeset
68 tmp = (guint32 *)&digest[0];
ef7303c25751 For some reason, this line creates the following warning:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30525
diff changeset
69
30461
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
70 g_sprintf(nonce_hash,
30439
bc720282a62d Clean up msn_dc_generate_nonce. It just looked weird.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30438
diff changeset
71 "%08X-%04X-%04X-%04X-%08X%04X",
30544
ef7303c25751 For some reason, this line creates the following warning:
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30525
diff changeset
72 GUINT32_FROM_LE(*tmp),
30439
bc720282a62d Clean up msn_dc_generate_nonce. It just looked weird.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30438
diff changeset
73 GUINT16_FROM_LE(*((guint16 *)(digest + 4))),
bc720282a62d Clean up msn_dc_generate_nonce. It just looked weird.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30438
diff changeset
74 GUINT16_FROM_LE(*((guint16 *)(digest + 6))),
bc720282a62d Clean up msn_dc_generate_nonce. It just looked weird.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30438
diff changeset
75 GUINT16_FROM_BE(*((guint16 *)(digest + 8))),
bc720282a62d Clean up msn_dc_generate_nonce. It just looked weird.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30438
diff changeset
76 GUINT32_FROM_BE(*((guint32 *)(digest + 10))),
bc720282a62d Clean up msn_dc_generate_nonce. It just looked weird.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30438
diff changeset
77 GUINT16_FROM_BE(*((guint16 *)(digest + 14)))
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
78 );
30461
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
79 }
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
80
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
81 static void
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
82 msn_dc_generate_nonce(MsnDirectConn *dc)
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
83 {
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
84 guint32 *nonce;
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
85 int i;
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
86
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
87 nonce = (guint32 *)&dc->nonce;
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
88 for (i = 0; i < 4; i++)
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
89 nonce[i] = rand();
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
90
3affd3508612 Remove some duplicate code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30459
diff changeset
91 msn_dc_calculate_nonce_hash(dc->nonce_type, dc->nonce, dc->nonce_hash);
30457
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
92
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
93 if (purple_debug_is_verbose())
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
94 purple_debug_info("msn", "DC %p generated nonce %s\n", dc, dc->nonce_hash);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
95 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
96
30442
ca7dec8303cb This DC stuff is a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30441
diff changeset
97 static MsnDirectConnPacket *
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
98 msn_dc_new_packet(guint32 length)
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
99 {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
100 MsnDirectConnPacket *p;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
101
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
102 p = g_new0(MsnDirectConnPacket, 1);
30465
63684aa5d6ab The length of a DC packet does not include itself.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30464
diff changeset
103 p->length = length;
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
104 p->data = g_malloc(length);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
106 return p;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
109 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
110 msn_dc_destroy_packet(MsnDirectConnPacket *p)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
111 {
30443
ecd237d3f578 Minor cleanups.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30442
diff changeset
112 g_free(p->data);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
113
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
114 if (p->msg)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
115 msn_message_unref(p->msg);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
117 g_free(p);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
118 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
120 MsnDirectConn *
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
121 msn_dc_new(MsnSlpCall *slpcall)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
122 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
123 MsnDirectConn *dc;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
124
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
125 g_return_val_if_fail(slpcall != NULL, NULL);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
126
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
127 dc = g_new0(MsnDirectConn, 1);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128
30444
db0f95b6a2cf Fix typo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30443
diff changeset
129 if (purple_debug_is_verbose())
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
130 purple_debug_info("msn", "msn_dc_new %p\n", dc);
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
131
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
132 dc->slplink = slpcall->slplink;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
133 dc->slpcall = slpcall;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
134
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
135 if (dc->slplink->dc != NULL)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
136 purple_debug_warning("msn", "msn_dc_new: slplink already has an allocated DC!\n");
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
137
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
138 dc->slplink->dc = dc;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
139
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
140 dc->msg_body = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
141 dc->prev_ack = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
142 dc->listen_data = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
143 dc->connect_data = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
144 dc->listenfd = -1;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
145 dc->listenfd_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
146 dc->connect_timeout_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
147 dc->fd = -1;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
148 dc->recv_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
149 dc->send_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
150 dc->state = DC_STATE_CLOSED;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
151 dc->in_buffer = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
152 dc->out_queue = g_queue_new();
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
153 dc->msg_pos = -1;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
154 dc->send_connection_info_msg_cb = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
155 dc->ext_ip = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
156 dc->timeout_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
157 dc->progress = FALSE;
30500
3dac28d77320 C comments only.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30499
diff changeset
158 /*dc->num_calls = 1;*/
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
159
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
160 /* TODO: Probably should set this based on buddy caps */
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
161 dc->nonce_type = DC_NONCE_PLAIN;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
162 msn_dc_generate_nonce(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
163
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
164 return dc;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
165 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
166
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
167 void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
168 msn_dc_destroy(MsnDirectConn *dc)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
169 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
170 MsnSlpLink *slplink;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
171
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
172 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
173 purple_debug_info("msn", "msn_dc_destroy %p\n", dc);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
174
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
175 g_return_if_fail(dc != NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
176
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
177 if (dc->slpcall != NULL)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
178 dc->slpcall->wait_for_socket = FALSE;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
179
30508
e432507151d1 NULL-ify some reverse links so that there's no double-free on exit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30500
diff changeset
180 slplink = dc->slplink;
e432507151d1 NULL-ify some reverse links so that there's no double-free on exit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30500
diff changeset
181 if (slplink) {
e432507151d1 NULL-ify some reverse links so that there's no double-free on exit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30500
diff changeset
182 slplink->dc = NULL;
e432507151d1 NULL-ify some reverse links so that there's no double-free on exit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30500
diff changeset
183 if (slplink->swboard == NULL)
e432507151d1 NULL-ify some reverse links so that there's no double-free on exit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30500
diff changeset
184 msn_slplink_destroy(slplink);
e432507151d1 NULL-ify some reverse links so that there's no double-free on exit.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30500
diff changeset
185 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
186
30451
6d1894d0170e NULL-ing this stuff after free is nice in theory, but totally pointless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30444
diff changeset
187 g_free(dc->msg_body);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
188
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
189 if (dc->prev_ack) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
190 msn_slpmsg_destroy(dc->prev_ack);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
191 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
192
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
193 if (dc->listen_data != NULL) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
194 purple_network_listen_cancel(dc->listen_data);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
195 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
196
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
197 if (dc->connect_data != NULL) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
198 purple_proxy_connect_cancel(dc->connect_data);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
199 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
200
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
201 if (dc->listenfd != -1) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
202 purple_network_remove_port_mapping(dc->listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
203 close(dc->listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
204 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
205
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
206 if (dc->listenfd_handle != 0) {
30484
60ea80b5af53 This is not a timeout, but an input handler.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30483
diff changeset
207 purple_input_remove(dc->listenfd_handle);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
208 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
209
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
210 if (dc->connect_timeout_handle != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
211 purple_timeout_remove(dc->connect_timeout_handle);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
212 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
213
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
214 if (dc->fd != -1) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
215 close(dc->fd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
216 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
217
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
218 if (dc->send_handle != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
219 purple_input_remove(dc->send_handle);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
220 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
221
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
222 if (dc->recv_handle != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
223 purple_input_remove(dc->recv_handle);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
224 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
225
30451
6d1894d0170e NULL-ing this stuff after free is nice in theory, but totally pointless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30444
diff changeset
226 g_free(dc->in_buffer);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
227
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
228 if (dc->out_queue != NULL) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
229 while (!g_queue_is_empty(dc->out_queue))
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
230 msn_dc_destroy_packet( g_queue_pop_head(dc->out_queue) );
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
231
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
232 g_queue_free(dc->out_queue);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
233 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
234
30451
6d1894d0170e NULL-ing this stuff after free is nice in theory, but totally pointless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30444
diff changeset
235 g_free(dc->ext_ip);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
236
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
237 if (dc->timeout_handle != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
238 purple_timeout_remove(dc->timeout_handle);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
239 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
240
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
241 g_free(dc);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
242 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
243
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
244 /*
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
245 void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
246 msn_dc_ref(MsnDirectConn *dc)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
247 {
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
248 g_return_if_fail(dc != NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
249
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
250 dc->num_calls++;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
251 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
252
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
253 void
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
254 msn_dc_unref(MsnDirectConn *dc)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
255 {
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
256 g_return_if_fail(dc != NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
257
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
258
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
259 if (dc->num_calls > 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
260 dc->num_calls--;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
261 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
262 }
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
263 */
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
264
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
265 void
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
266 msn_dc_send_invite(MsnDirectConn *dc)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
267 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
268 MsnSlpCall *slpcall;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
269 MsnSlpMessage *msg;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
270 gchar *header;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
271
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
272 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
273 purple_debug_info("msn", "msn_dc_send_invite %p\n", dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
274
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
275 g_return_if_fail(dc != NULL);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
276
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
277 slpcall = dc->slpcall;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
278 g_return_if_fail(slpcall != NULL);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
279
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
280 header = g_strdup_printf(
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
281 "INVITE MSNMSGR:%s MSNSLP/1.0",
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
282 slpcall->slplink->remote_user
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
283 );
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
284
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
285 msg = msn_slpmsg_sip_new(
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
286 slpcall,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
287 0,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
288 header,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
289 slpcall->branch,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
290 "application/x-msnmsgr-transrespbody",
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
291 dc->msg_body
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
292 );
30453
a613180bfeab Set some information for debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30452
diff changeset
293 msg->info = "DC INVITE";
a613180bfeab Set some information for debugging.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30452
diff changeset
294 msg->text_body = TRUE;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
295 g_free(header);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
296 g_free(dc->msg_body);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
297 dc->msg_body = NULL;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
298
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
299 msn_slplink_queue_slpmsg(slpcall->slplink, msg);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
300 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
301
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
302 void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
303 msn_dc_send_ok(MsnDirectConn *dc)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
304 {
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
305 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
306 purple_debug_info("msn", "msn_dc_send_ok %p\n", dc);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
307
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
308 g_return_if_fail(dc != NULL);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
309
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
310 msn_slp_send_ok(dc->slpcall, dc->slpcall->branch,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
311 "application/x-msnmsgr-transrespbody", dc->msg_body);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
312 g_free(dc->msg_body);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
313 dc->msg_body = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
314
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
315 msn_slplink_send_slpmsg(dc->slpcall->slplink, dc->prev_ack);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
316 msn_slpmsg_destroy(dc->prev_ack);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
317 dc->prev_ack = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
318 msn_slplink_send_queued_slpmsgs(dc->slpcall->slplink);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
319 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
320
30467
6936ffd13cb9 Make msn_dc_fallback_to_p2p non-static, and remove some old code.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30465
diff changeset
321 void
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
322 msn_dc_fallback_to_sb(MsnDirectConn *dc)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
323 {
30487
ccae796bdbad Ref the slplink before destroying the DC, or we might lose our slpcall.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30486
diff changeset
324 MsnSlpLink *slplink;
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
325 MsnSlpCall *slpcall;
30490
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
326 GQueue *queue = NULL;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
327
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
328 purple_debug_info("msn", "msn_dc_fallback_to_sb %p\n", dc);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
329
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
330 g_return_if_fail(dc != NULL);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
331
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
332 slpcall = dc->slpcall;
30487
ccae796bdbad Ref the slplink before destroying the DC, or we might lose our slpcall.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30486
diff changeset
333 slplink = msn_slplink_ref(dc->slplink);
30490
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
334 if (slpcall && !g_queue_is_empty(dc->out_queue)) {
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
335 queue = dc->out_queue;
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
336 dc->out_queue = NULL;
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
337 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
338
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
339 msn_dc_destroy(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
340
30490
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
341 if (slpcall) {
30486
28f774432954 Use msn_dc_fallback_to_p2p where possible.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30484
diff changeset
342 msn_slpcall_session_init(slpcall);
30490
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
343 if (queue) {
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
344 while (!g_queue_is_empty(queue)) {
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
345 MsnDirectConnPacket *p = g_queue_pop_head(queue);
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
346 msn_slplink_send_msg(slplink, p->msg);
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
347 msn_dc_destroy_packet(p);
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
348 }
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
349 g_queue_free(queue);
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
350 }
0b88a1b54475 If there's stuff stuck in the DC queue, then try to send it over the SB if
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30487
diff changeset
351 }
30487
ccae796bdbad Ref the slplink before destroying the DC, or we might lose our slpcall.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30486
diff changeset
352 msn_slplink_unref(slplink);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
353 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
354
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
355 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
356 msn_dc_parse_binary_header(MsnDirectConn *dc)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
357 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
358 MsnSlpHeader *h;
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
359 MsnDcContext *context;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
360
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
361 g_return_if_fail(dc != NULL);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
362
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
363 h = &dc->header;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
364 /* Skip packet size */
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
365 context = (MsnDcContext *)(dc->in_buffer + 4);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
366
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
367 h->session_id = GUINT32_FROM_LE(context->session_id);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
368 h->id = GUINT32_FROM_LE(context->seq_id);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
369 h->offset = GUINT64_FROM_LE(context->offset);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
370 h->total_size = GUINT64_FROM_LE(context->total_size);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
371 h->length = GUINT32_FROM_LE(context->length);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
372 h->flags = GUINT32_FROM_LE(context->flags);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
373 h->ack_id = GUINT32_FROM_LE(context->ack_id);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
374 h->ack_sub_id = GUINT32_FROM_LE(context->ack_uid);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
375 h->ack_size = GUINT64_FROM_LE(context->ack_size);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
376 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
377
30438
e0c368986e1f OK, so maybe this one does need to be static.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30437
diff changeset
378 static const gchar *
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
379 msn_dc_serialize_binary_header(MsnDirectConn *dc) {
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
380 MsnSlpHeader *h;
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
381 static MsnDcContext bin_header;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
382
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
383 g_return_val_if_fail(dc != NULL, NULL);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
384
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
385 h = &dc->header;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
386
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
387 bin_header.session_id = GUINT32_TO_LE(h->session_id);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
388 bin_header.seq_id = GUINT32_TO_LE(h->id);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
389 bin_header.offset = GUINT64_TO_LE(h->offset);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
390 bin_header.total_size = GUINT64_TO_LE(h->total_size);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
391 bin_header.length = GUINT32_TO_LE(h->length);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
392 bin_header.flags = GUINT32_TO_LE(h->flags);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
393 bin_header.ack_id = GUINT32_TO_LE(h->ack_id);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
394 bin_header.ack_uid = GUINT32_TO_LE(h->ack_sub_id);
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
395 bin_header.ack_size = GUINT64_TO_LE(h->ack_size);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
396
30440
264c76d29ab0 I don't like accessing memory by magic-constant.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30439
diff changeset
397 return (const gchar *)&bin_header;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
398 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
399
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
400 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
401 msn_dc_send_cb(gpointer data, gint fd, PurpleInputCondition cond)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
402 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
403 MsnDirectConn *dc = data;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
404 MsnDirectConnPacket *p;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
405 int bytes_to_send;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
406 int bytes_sent;
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 15823
diff changeset
407
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
408 g_return_if_fail(dc != NULL);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
409 g_return_if_fail(fd != -1);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
410
30451
6d1894d0170e NULL-ing this stuff after free is nice in theory, but totally pointless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30444
diff changeset
411 if (g_queue_is_empty(dc->out_queue)) {
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
412 if (dc->send_handle != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
413 purple_input_remove(dc->send_handle);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
414 dc->send_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
415 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
416 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
417 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
418
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
419 p = g_queue_peek_head(dc->out_queue);
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
420
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
421 if (dc->msg_pos < 0) {
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
422 /* First we send the length of the packet */
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
423 guint32 len = GUINT32_TO_LE(p->length);
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
424 bytes_sent = send(fd, &len, 4, 0);
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
425 if (bytes_sent < 0) {
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
426 if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
427 return;
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
428
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
429 purple_debug_warning("msn", "msn_dc_send_cb: send error\n");
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
430 msn_dc_destroy(dc);
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
431 return;
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
432 }
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
433 dc->msg_pos = 0;
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
434 }
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
435
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
436 bytes_to_send = p->length - dc->msg_pos;
30470
99f81d97cbe6 I'm pretty sure we need to actually use dc->msg_pos for something, instead
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30469
diff changeset
437 bytes_sent = send(fd, p->data + dc->msg_pos, bytes_to_send, 0);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
438 if (bytes_sent < 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
439 if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
440 return;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
441
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
442 purple_debug_warning("msn", "msn_dc_send_cb: send error\n");
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
443 msn_dc_destroy(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
444 return;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
445 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
446
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
447 dc->progress = TRUE;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
448
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
449 dc->msg_pos += bytes_sent;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
450 if (dc->msg_pos == p->length) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
451 if (p->sent_cb != NULL)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
452 p->sent_cb(p);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
453
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
454 g_queue_pop_head(dc->out_queue);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
455 msn_dc_destroy_packet(p);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
456
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
457 dc->msg_pos = -1;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
458 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
459 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
460
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
461 static void
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
462 msn_dc_enqueue_packet(MsnDirectConn *dc, MsnDirectConnPacket *p)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
463 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
464 gboolean was_empty;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
465
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
466 was_empty = g_queue_is_empty(dc->out_queue);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
467 g_queue_push_tail(dc->out_queue, p);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
468
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
469 if (was_empty && dc->send_handle == 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
470 dc->send_handle = purple_input_add(dc->fd, PURPLE_INPUT_WRITE, msn_dc_send_cb, dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
471 msn_dc_send_cb(dc, dc->fd, PURPLE_INPUT_WRITE);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
472 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
473 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
474
20578
7c30d5aa5e01 Fix incorrect purple_proxy_connect() callback and comment out an unused function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 20514
diff changeset
475 static void
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
476 msn_dc_send_foo(MsnDirectConn *dc)
20578
7c30d5aa5e01 Fix incorrect purple_proxy_connect() callback and comment out an unused function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 20514
diff changeset
477 {
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
478 MsnDirectConnPacket *p;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
479
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
480 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
481 purple_debug_info("msn", "msn_dc_send_foo %p\n", dc);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
482
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
483 p = msn_dc_new_packet(4);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
484
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
485 memcpy(p->data, "foo\0", 4);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
486
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
487 msn_dc_enqueue_packet(dc, p);
20578
7c30d5aa5e01 Fix incorrect purple_proxy_connect() callback and comment out an unused function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 20514
diff changeset
488 }
7c30d5aa5e01 Fix incorrect purple_proxy_connect() callback and comment out an unused function.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 20514
diff changeset
489
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
490 static void
30468
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
491 msn_dc_send_handshake_with_nonce(MsnDirectConn *dc, MsnDirectConnPacket *p)
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
492 {
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
493 const gchar *h;
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
494
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
495 h = msn_dc_serialize_binary_header(dc);
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
496 memcpy(p->data, h, DC_PACKET_HEADER_SIZE);
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
497
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
498 memcpy(p->data + offsetof(MsnDcContext, ack_id), dc->nonce, 16);
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
499
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
500 msn_dc_enqueue_packet(dc, p);
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
501 }
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
502
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
503 static void
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
504 msn_dc_send_handshake(MsnDirectConn *dc)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
505 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
506 MsnDirectConnPacket *p;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
507
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
508 p = msn_dc_new_packet(DC_PACKET_HEADER_SIZE);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
509
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
510 dc->header.session_id = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
511 dc->header.id = dc->slpcall->slplink->slp_seq_id++;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
512 dc->header.offset = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
513 dc->header.total_size = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
514 dc->header.length = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
515 dc->header.flags = 0x100;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
516
30468
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
517 msn_dc_send_handshake_with_nonce(dc, p);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
518 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
519
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
520 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
521 msn_dc_send_handshake_reply(MsnDirectConn *dc)
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
522 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
523 MsnDirectConnPacket *p;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
524
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
525 p = msn_dc_new_packet(DC_PACKET_HEADER_SIZE);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
526
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
527 dc->header.id = dc->slpcall->slplink->slp_seq_id++;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
528 dc->header.length = 0;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
529
30468
b491612862dc Try and reduce some code duplication.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30467
diff changeset
530 msn_dc_send_handshake_with_nonce(dc, p);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
531 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
532
30457
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
533 static gboolean
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
534 msn_dc_verify_handshake(MsnDirectConn *dc, guint32 packet_length)
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
535 {
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
536 guchar nonce[16];
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
537 gchar nonce_hash[37];
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
538
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
539 if (packet_length != DC_PACKET_HEADER_SIZE)
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
540 return FALSE;
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
541
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
542 memcpy(nonce, dc->in_buffer + 4 + offsetof(MsnDcContext, ack_id), 16);
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
543
30469
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
544 if (dc->nonce_type == DC_NONCE_PLAIN) {
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
545 if (memcmp(dc->nonce, nonce, 16) == 0) {
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
546 purple_debug_info("msn",
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
547 "Nonce from buddy request and nonce from DC attempt match, "
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
548 "allowing direct connection\n");
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
549 return TRUE;
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
550 } else {
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
551 purple_debug_warning("msn",
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
552 "Nonce from buddy request and nonce from DC attempt "
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
553 "don't match, ignoring direct connection\n");
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
554 return FALSE;
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
555 }
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
556
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
557 } else if (dc->nonce_type == DC_NONCE_SHA1) {
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
558 msn_dc_calculate_nonce_hash(dc->nonce_type, nonce, nonce_hash);
30457
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
559
30469
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
560 if (g_str_equal(dc->remote_nonce, nonce_hash)) {
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
561 purple_debug_info("msn",
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
562 "Received nonce %s from buddy request "
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
563 "and calculated nonce %s from DC attempt. "
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
564 "Nonces match, allowing direct connection\n",
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
565 dc->remote_nonce, nonce_hash);
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
566 return TRUE;
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
567 } else {
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
568 purple_debug_warning("msn",
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
569 "Received nonce %s from buddy request "
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
570 "and calculated nonce %s from DC attempt. "
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
571 "Nonces don't match, ignoring direct connection\n",
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
572 dc->remote_nonce, nonce_hash);
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
573 return FALSE;
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
574 }
b0a7b31dcc5d I think this finally works with both aMSN and the official client, for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30468
diff changeset
575 } else
30463
97942038af05 Obviously, if this comparison fails, I should be returning FALSE.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30462
diff changeset
576 return FALSE;
30457
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
577 }
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
578
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
579 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
580 msn_dc_send_packet_cb(MsnDirectConnPacket *p)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
581 {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
582 if (p->msg != NULL && p->msg->ack_cb != NULL)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
583 p->msg->ack_cb(p->msg, p->msg->ack_data);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
584 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
585
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
586 void
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
587 msn_dc_enqueue_msg(MsnDirectConn *dc, MsnMessage *msg)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
588 {
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
589 MsnDirectConnPacket *p;
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
590 guint32 length;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
591
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
592 length = msg->body_len + DC_PACKET_HEADER_SIZE;
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
593 p = msn_dc_new_packet(length);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
594
30464
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
595 memcpy(p->data, &msg->msnslp_header, DC_PACKET_HEADER_SIZE);
87854e2529a0 It seems like every DC packet requires a length, so why make every little
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30463
diff changeset
596 memcpy(p->data + DC_PACKET_HEADER_SIZE, msg->body, msg->body_len);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
597
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
598 p->sent_cb = msn_dc_send_packet_cb;
30443
ecd237d3f578 Minor cleanups.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30442
diff changeset
599 p->msg = msn_message_ref(msg);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
600
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
601 msn_dc_enqueue_packet(dc, p);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
602 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
603
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
604 static int
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
605 msn_dc_process_packet(MsnDirectConn *dc, guint32 packet_length)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
606 {
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
607 g_return_val_if_fail(dc != NULL, DC_PROCESS_ERROR);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
608
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
609 switch (dc->state) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
610 case DC_STATE_CLOSED:
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
611 break;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
612
30443
ecd237d3f578 Minor cleanups.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30442
diff changeset
613 case DC_STATE_FOO:
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
614 /* FOO message is always 4 bytes long */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
615 if (packet_length != 4 || memcmp(dc->in_buffer, "\4\0\0\0foo", 8) != 0)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
616 return DC_PROCESS_FALLBACK;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
617
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
618 dc->state = DC_STATE_HANDSHAKE;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
619 break;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
620
30443
ecd237d3f578 Minor cleanups.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30442
diff changeset
621 case DC_STATE_HANDSHAKE:
30457
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
622 if (!msn_dc_verify_handshake(dc, packet_length))
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
623 return DC_PROCESS_FALLBACK;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
624
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
625 msn_dc_send_handshake_reply(dc);
30435
bcb5e6c2e5a3 Re-indent directconn.h, and fix a typo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30434
diff changeset
626 dc->state = DC_STATE_ESTABLISHED;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
627
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
628 msn_slpcall_session_init(dc->slpcall);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
629 dc->slpcall = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
630 break;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
631
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
632 case DC_STATE_HANDSHAKE_REPLY:
30457
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
633 if (!msn_dc_verify_handshake(dc, packet_length))
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
634 return DC_PROCESS_FALLBACK;
4e532eedcab4 Save remote nonce, and verify we get the same data when initiating the
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30453
diff changeset
635
30435
bcb5e6c2e5a3 Re-indent directconn.h, and fix a typo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30434
diff changeset
636 dc->state = DC_STATE_ESTABLISHED;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
637
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
638 msn_slpcall_session_init(dc->slpcall);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
639 dc->slpcall = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
640 break;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
641
30435
bcb5e6c2e5a3 Re-indent directconn.h, and fix a typo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30434
diff changeset
642 case DC_STATE_ESTABLISHED:
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
643 msn_slplink_process_msg(
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
644 dc->slplink,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
645 &dc->header,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
646 dc->in_buffer + 4 + DC_PACKET_HEADER_SIZE,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
647 dc->header.length
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
648 );
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
649
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
650 /*
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
651 if (dc->num_calls == 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
652 msn_dc_destroy(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
653
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
654 return DC_PROCESS_CLOSE;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
655 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
656 */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
657 break;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
658 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
659
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
660 return DC_PROCESS_OK;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
661 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
662
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
663 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
664 msn_dc_recv_cb(gpointer data, gint fd, PurpleInputCondition cond)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
665 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
666 MsnDirectConn *dc;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
667 int free_buf_space;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
668 int bytes_received;
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
669 guint32 packet_length;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
670
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
671 g_return_if_fail(data != NULL);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
672 g_return_if_fail(fd != -1);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
673
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
674 dc = data;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
675 free_buf_space = dc->in_size - dc->in_pos;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
676
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
677 bytes_received = recv(fd, dc->in_buffer + dc->in_pos, free_buf_space, 0);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
678 if (bytes_received < 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
679 if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
680 return;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
681
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
682 purple_debug_warning("msn", "msn_dc_recv_cb: recv error\n");
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
683
30435
bcb5e6c2e5a3 Re-indent directconn.h, and fix a typo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30434
diff changeset
684 if(dc->state != DC_STATE_ESTABLISHED)
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
685 msn_dc_fallback_to_sb(dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
686 else
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
687 msn_dc_destroy(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
688 return;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
689
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
690 } else if (bytes_received == 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
691 /* EOF. Remote side closed connection. */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
692 purple_debug_info("msn", "msn_dc_recv_cb: recv EOF\n");
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
693
30435
bcb5e6c2e5a3 Re-indent directconn.h, and fix a typo.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30434
diff changeset
694 if(dc->state != DC_STATE_ESTABLISHED)
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
695 msn_dc_fallback_to_sb(dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
696 else
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
697 msn_dc_destroy(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
698 return;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
699 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
700
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
701 dc->progress = TRUE;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
702
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
703 dc->in_pos += bytes_received;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
704
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
705 /* Wait for packet length */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
706 while (dc->in_pos >= 4) {
30473
56871d6c06fc I've seen packet sizes larger than our current maximum. Hopefully 8KiB is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30472
diff changeset
707 packet_length = GUINT32_FROM_LE(*((guint32*)dc->in_buffer));
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
708
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
709 if (packet_length > DC_MAX_PACKET_SIZE) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
710 /* Oversized packet */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
711 purple_debug_warning("msn", "msn_dc_recv_cb: oversized packet received\n");
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
712 return;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
713 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
714
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
715 /* Wait for the whole packet to arrive */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
716 if (dc->in_pos < 4 + packet_length)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
717 return;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
718
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
719 if (dc->state != DC_STATE_FOO) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
720 msn_dc_parse_binary_header(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
721 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
722
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
723 switch (msn_dc_process_packet(dc, packet_length)) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
724 case DC_PROCESS_CLOSE:
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
725 return;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
726
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
727 case DC_PROCESS_FALLBACK:
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
728 purple_debug_warning("msn", "msn_dc_recv_cb: packet processing error, fall back to SB\n");
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
729 msn_dc_fallback_to_sb(dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
730 return;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
731
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
732 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
733
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
734 if (dc->in_pos > packet_length + 4) {
30474
531fe008410e Valgrind pointed out that dest and src may overlap, so we need to use
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30473
diff changeset
735 g_memmove(dc->in_buffer, dc->in_buffer + 4 + packet_length, dc->in_pos - packet_length - 4);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
736 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
737
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
738 dc->in_pos -= packet_length + 4;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
739 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
740 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
741
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
742 static gboolean
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
743 msn_dc_timeout(gpointer data)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
744 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
745 MsnDirectConn *dc = data;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
746
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
747 g_return_val_if_fail(dc != NULL, FALSE);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
748
30482
783d736704b8 If removing a timeout and return FALSE in its handler isn't good, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30479
diff changeset
749 if (dc->progress) {
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
750 dc->progress = FALSE;
30482
783d736704b8 If removing a timeout and return FALSE in its handler isn't good, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30479
diff changeset
751 return TRUE;
783d736704b8 If removing a timeout and return FALSE in its handler isn't good, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30479
diff changeset
752 } else {
783d736704b8 If removing a timeout and return FALSE in its handler isn't good, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30479
diff changeset
753 dc->timeout_handle = 0;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
754 msn_dc_destroy(dc);
30482
783d736704b8 If removing a timeout and return FALSE in its handler isn't good, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30479
diff changeset
755 return FALSE;
783d736704b8 If removing a timeout and return FALSE in its handler isn't good, then
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30479
diff changeset
756 }
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
757 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
758
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
759 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
760 msn_dc_init(MsnDirectConn *dc)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
761 {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
762 g_return_if_fail(dc != NULL);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
763
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
764 dc->in_size = DC_MAX_PACKET_SIZE + 4;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
765 dc->in_pos = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
766 dc->in_buffer = g_malloc(dc->in_size);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
767
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
768 dc->recv_handle = purple_input_add(dc->fd, PURPLE_INPUT_READ, msn_dc_recv_cb, dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
769 dc->send_handle = purple_input_add(dc->fd, PURPLE_INPUT_WRITE, msn_dc_send_cb, dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
770
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
771 dc->timeout_handle = purple_timeout_add_seconds(DC_TIMEOUT, msn_dc_timeout, dc);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
772 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
773
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
774 void
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
775 msn_dc_connected_to_peer_cb(gpointer data, gint fd, const gchar *error_msg)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
776 {
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
777 MsnDirectConn *dc = data;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
778
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
779 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
780 purple_debug_info("msn", "msn_dc_connected_to_peer_cb %p\n", dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
781
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
782 g_return_if_fail(dc != NULL);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
783
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
784 dc->connect_data = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
785 purple_timeout_remove(dc->connect_timeout_handle);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
786 dc->connect_timeout_handle = 0;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
787
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
788 dc->fd = fd;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
789 if (dc->fd != -1) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
790 msn_dc_init(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
791 msn_dc_send_foo(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
792 msn_dc_send_handshake(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
793 dc->state = DC_STATE_HANDSHAKE_REPLY;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
794 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
795 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
796
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
797 /*
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
798 * This callback will be called when we're the server
30499
1aa1e1e1876d Make it more explicit that incoming and outgoing timeouts are different.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30490
diff changeset
799 * and nobody has connected us in DC_INCOMING_TIMEOUT seconds
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
800 */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
801 static gboolean
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
802 msn_dc_incoming_connection_timeout_cb(gpointer data) {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
803 MsnDirectConn *dc = data;
30476
f0de96a35877 This should probably work a bit better. At least, we want to get rid of any
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30474
diff changeset
804 MsnSlpCall *slpcall;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
805
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
806 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
807 purple_debug_info("msn", "msn_dc_incoming_connection_timeout_cb %p\n", dc);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
808
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
809 g_return_val_if_fail(dc != NULL, FALSE);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
810
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
811 slpcall = dc->slpcall;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
812
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
813 if (dc->listen_data != NULL) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
814 purple_network_listen_cancel(dc->listen_data);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
815 dc->listen_data = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
816 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
817
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
818 if (dc->listenfd_handle != 0) {
30484
60ea80b5af53 This is not a timeout, but an input handler.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30483
diff changeset
819 purple_input_remove(dc->listenfd_handle);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
820 dc->listenfd_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
821 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
822
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
823 if (dc->listenfd != -1) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
824 purple_network_remove_port_mapping(dc->listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
825 close(dc->listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
826 dc->listenfd = -1;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
827 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
828
30476
f0de96a35877 This should probably work a bit better. At least, we want to get rid of any
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30474
diff changeset
829 dc->connect_timeout_handle = 0;
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
830 msn_dc_fallback_to_sb(dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
831
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
832 return FALSE;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
833 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
834
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
835 /*
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
836 * This callback will be called when we're unable to connect to
30499
1aa1e1e1876d Make it more explicit that incoming and outgoing timeouts are different.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30490
diff changeset
837 * the remote host in DC_OUTGOING_TIMEOUT seconds.
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
838 */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
839 gboolean
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
840 msn_dc_outgoing_connection_timeout_cb(gpointer data)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
841 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
842 MsnDirectConn *dc = data;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
843
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
844 purple_debug_info("msn", "msn_dc_outgoing_connection_timeout_cb %p\n", dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
845
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
846 g_return_val_if_fail(dc != NULL, FALSE);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
847
30479
a6642358155b We can't both remove a timeout and return FALSE in its callback.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30476
diff changeset
848 dc->connect_timeout_handle = 0;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
849
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
850 if (dc->connect_data != NULL) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
851 purple_proxy_connect_cancel(dc->connect_data);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
852 dc->connect_data = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
853 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
854
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
855 if (dc->ext_ip && dc->ext_port) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
856 /* Try external IP/port if available. */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
857 dc->connect_data = purple_proxy_connect(
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
858 NULL,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
859 dc->slpcall->slplink->session->account,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
860 dc->ext_ip,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
861 dc->ext_port,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
862 msn_dc_connected_to_peer_cb,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
863 dc
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
864 );
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
865
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
866 g_free(dc->ext_ip);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
867 dc->ext_ip = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
868
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
869 if (dc->connect_data) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
870 dc->connect_timeout_handle = purple_timeout_add_seconds(
30499
1aa1e1e1876d Make it more explicit that incoming and outgoing timeouts are different.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30490
diff changeset
871 DC_OUTGOING_TIMEOUT,
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
872 msn_dc_outgoing_connection_timeout_cb,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
873 dc
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
874 );
30483
0662e5baada0 Fallback to P2P if connecting to external IP didn't work immediately.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30482
diff changeset
875 } else {
0662e5baada0 Fallback to P2P if connecting to external IP didn't work immediately.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30482
diff changeset
876 /*
0662e5baada0 Fallback to P2P if connecting to external IP didn't work immediately.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30482
diff changeset
877 * Connection failed
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
878 * Fall back to SB transfer
30483
0662e5baada0 Fallback to P2P if connecting to external IP didn't work immediately.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30482
diff changeset
879 */
0662e5baada0 Fallback to P2P if connecting to external IP didn't work immediately.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30482
diff changeset
880 msn_dc_outgoing_connection_timeout_cb(dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
881 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
882
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
883 } else {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
884 /*
30479
a6642358155b We can't both remove a timeout and return FALSE in its callback.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30476
diff changeset
885 * Both internal and external connection attempts failed.
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
886 * Fall back to SB transfer.
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
887 */
30525
7f564cf26ea3 I think it's more accurate to say that a DC is a P2P transfer, so if that
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30508
diff changeset
888 msn_dc_fallback_to_sb(dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
889 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
890
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
891 return FALSE;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
892 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
893
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
894 /*
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
895 * This callback will be called when we're the server
30499
1aa1e1e1876d Make it more explicit that incoming and outgoing timeouts are different.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30490
diff changeset
896 * and somebody has connected to us in DC_INCOMING_TIMEOUT seconds.
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
897 */
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
898 static void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
899 msn_dc_incoming_connection_cb(gpointer data, gint listenfd, PurpleInputCondition cond)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
900 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
901 MsnDirectConn *dc = data;
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
902
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
903 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
904 purple_debug_info("msn", "msn_dc_incoming_connection_cb %p\n", dc);
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
905
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
906 g_return_if_fail(dc != NULL);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
907
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
908 if (dc->connect_timeout_handle != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
909 purple_timeout_remove(dc->connect_timeout_handle);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
910 dc->connect_timeout_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
911 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
912
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
913 if (dc->listenfd_handle != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
914 purple_input_remove(dc->listenfd_handle);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
915 dc->listenfd_handle = 0;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
916 }
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
917
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
918 dc->fd = accept(listenfd, NULL, 0);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
919
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
920 purple_network_remove_port_mapping(dc->listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
921 close(dc->listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
922 dc->listenfd = -1;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
923
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
924 if (dc->fd != -1) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
925 msn_dc_init(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
926 dc->state = DC_STATE_FOO;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
927 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
928 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
929
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
930 void
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
931 msn_dc_listen_socket_created_cb(int listenfd, gpointer data)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
932 {
30436
0ea33256f462 Tabs-to-spaces.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30435
diff changeset
933 MsnDirectConn *dc = data;
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
934
30441
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
935 if (purple_debug_is_verbose())
24579d001831 This DC stuff seems a bit verbose.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30440
diff changeset
936 purple_debug_info("msn", "msn_dc_listen_socket_created_cb %p\n", dc);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
937
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
938 g_return_if_fail(dc != NULL);
30434
b1cda3f8fdc9 De-spacify.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30433
diff changeset
939
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
940 dc->listen_data = NULL;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
941
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
942 if (listenfd != -1) {
30451
6d1894d0170e NULL-ing this stuff after free is nice in theory, but totally pointless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30444
diff changeset
943 const char *ext_ip;
6d1894d0170e NULL-ing this stuff after free is nice in theory, but totally pointless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30444
diff changeset
944 const char *int_ip;
6d1894d0170e NULL-ing this stuff after free is nice in theory, but totally pointless
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30444
diff changeset
945 int port;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
946
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
947 ext_ip = purple_network_get_my_ip(listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
948 int_ip = purple_network_get_local_system_ip(listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
949 port = purple_network_get_port_from_fd(listenfd);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
950
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
951 dc->listenfd = listenfd;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
952 dc->listenfd_handle = purple_input_add(
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
953 listenfd,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
954 PURPLE_INPUT_READ,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
955 msn_dc_incoming_connection_cb,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
956 dc
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
957 );
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
958 dc->connect_timeout_handle = purple_timeout_add_seconds(
30499
1aa1e1e1876d Make it more explicit that incoming and outgoing timeouts are different.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30490
diff changeset
959 DC_INCOMING_TIMEOUT,
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
960 msn_dc_incoming_connection_timeout_cb,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
961 dc
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
962 );
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
963
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
964 if (strcmp(int_ip, ext_ip) != 0) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
965 dc->msg_body = g_strdup_printf(
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
966 "Bridge: TCPv1\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
967 "Listening: true\r\n"
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
968 "%sNonce: {%s}\r\n"
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
969 "IPv4External-Addrs: %s\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
970 "IPv4External-Port: %d\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
971 "IPv4Internal-Addrs: %s\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
972 "IPv4Internal-Port: %d\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
973 "\r\n",
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
974
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
975 dc->nonce_type != DC_NONCE_PLAIN ? "Hashed-" : "",
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
976 dc->nonce_hash,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
977 ext_ip,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
978 port,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
979 int_ip,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
980 port
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
981 );
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
982
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
983 } else {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
984 dc->msg_body = g_strdup_printf(
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
985 "Bridge: TCPv1\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
986 "Listening: true\r\n"
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
987 "%sNonce: {%s}\r\n"
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
988 "IPv4External-Addrs: %s\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
989 "IPv4External-Port: %d\r\n"
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
990 "\r\n",
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
991
30459
a97d60c15e25 Support old-style Nonce, which should let us use direct connections to
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30457
diff changeset
992 dc->nonce_type != DC_NONCE_PLAIN ? "Hashed-" : "",
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
993 dc->nonce_hash,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
994 ext_ip,
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
995 port
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
996 );
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
997 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
998
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
999 if (dc->slpcall->wait_for_socket) {
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
1000 if (dc->send_connection_info_msg_cb != NULL)
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
1001 dc->send_connection_info_msg_cb(dc);
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
1002
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
1003 dc->slpcall->wait_for_socket = FALSE;
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
1004 }
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
1005 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1006 }
30433
119bd7b072eb Initial support for direct connections. Preliminary patch from ticket #247
kukkerman@gmail.com
parents: 28238
diff changeset
1007