Mercurial > pidgin.yaz
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 |
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 | 4 * purple |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5 * |
15823 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 |