Mercurial > pidgin
annotate libpurple/protocols/bonjour/jabber.c @ 29960:815bd8b41638
I before E, except after C
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Mon, 17 May 2010 01:01:13 +0000 |
parents | 55913ed2a229 |
children | 7c871249318b |
rev | line source |
---|---|
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1 /* |
15822 | 2 * purple - Bonjour Protocol Plugin |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 * |
15822 | 4 * Purple is the legal property of its developers, whose names are too numerous |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5 * 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
|
6 * source distribution. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
7 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
8 * 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
|
9 * 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
|
10 * 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
|
11 * (at your option) any later version. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 * 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
|
14 * 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
|
15 * 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
|
16 * GNU General Public License for more details. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
18 * 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
|
19 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19654
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 */ |
21438
4fe9acb6b514
Some platforms require additional includes before net/if.h, and this
Ethan Blanton <elb@pidgin.im>
parents:
21437
diff
changeset
|
22 |
4fe9acb6b514
Some platforms require additional includes before net/if.h, and this
Ethan Blanton <elb@pidgin.im>
parents:
21437
diff
changeset
|
23 #include "internal.h" |
4fe9acb6b514
Some platforms require additional includes before net/if.h, and this
Ethan Blanton <elb@pidgin.im>
parents:
21437
diff
changeset
|
24 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
25 #ifndef _WIN32 |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
26 #include <net/if.h> |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
27 #include <sys/ioctl.h> |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
28 #include <sys/socket.h> |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 #include <netinet/in.h> |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
30 #include <arpa/inet.h> |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
31 #else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
32 #include "libc_interface.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
34 #include <sys/types.h> |
21802
d01d9107f263
Fix #4079 for real.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21797
diff
changeset
|
35 |
d01d9107f263
Fix #4079 for real.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21797
diff
changeset
|
36 /* Solaris */ |
d01d9107f263
Fix #4079 for real.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21797
diff
changeset
|
37 #if defined (__SVR4) && defined (__sun) |
d01d9107f263
Fix #4079 for real.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21797
diff
changeset
|
38 #include <sys/sockio.h> |
d01d9107f263
Fix #4079 for real.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21797
diff
changeset
|
39 #endif |
d01d9107f263
Fix #4079 for real.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21797
diff
changeset
|
40 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
41 #include <glib.h> |
22907
1c87e81c44fa
Bonjour build fixes for MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22680
diff
changeset
|
42 #ifdef HAVE_UNISTD_H |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
43 #include <unistd.h> |
22907
1c87e81c44fa
Bonjour build fixes for MSVC.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22680
diff
changeset
|
44 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
45 #include <fcntl.h> |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
46 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
47 #ifdef HAVE_GETIFADDRS |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
48 #include <ifaddrs.h> |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
49 #endif |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
50 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
51 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
52 #include "network.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
53 #include "eventloop.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
54 #include "connection.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
55 #include "blist.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
56 #include "xmlnode.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
57 #include "debug.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
58 #include "notify.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
59 #include "util.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
60 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
61 #include "jabber.h" |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
62 #include "parser.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
63 #include "bonjour.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
64 #include "buddy.h" |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
65 #include "bonjour_ft.h" |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
66 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
67 #ifdef _SIZEOF_ADDR_IFREQ |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
68 # define HX_SIZE_OF_IFREQ(a) _SIZEOF_ADDR_IFREQ(a) |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
69 #else |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
70 # define HX_SIZE_OF_IFREQ(a) sizeof(a) |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
71 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
72 |
17554
a1d05bc43d95
Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17553
diff
changeset
|
73 #define STREAM_END "</stream:stream>" |
a1d05bc43d95
Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17553
diff
changeset
|
74 /* TODO: specify version='1.0' and send stream features */ |
a1d05bc43d95
Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17553
diff
changeset
|
75 #define DOCTYPE "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" \ |
a1d05bc43d95
Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17553
diff
changeset
|
76 "<stream:stream xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" from=\"%s\" to=\"%s\">" |
a1d05bc43d95
Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17553
diff
changeset
|
77 |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
78 enum sent_stream_start_types { |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
79 NOT_SENT = 0, |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
80 PARTIALLY_SENT = 1, |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
81 FULLY_SENT = 2 |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
82 }; |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
83 |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
84 static void |
24675
35d0ce5f319a
Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24674
diff
changeset
|
85 xep_iq_parse(xmlnode *packet, PurpleBuddy *pb); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
86 |
17555
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
87 static BonjourJabberConversation * |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
88 bonjour_jabber_conv_new(PurpleBuddy *pb, PurpleAccount *account, const char *ip) { |
17555
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
89 |
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
90 BonjourJabberConversation *bconv = g_new0(BonjourJabberConversation, 1); |
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
91 bconv->socket = -1; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
92 bconv->tx_buf = purple_circ_buffer_new(512); |
19399
649ac48fce1d
Reset unsigned int input handlers to 0 instead of -1.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19233
diff
changeset
|
93 bconv->tx_handler = 0; |
649ac48fce1d
Reset unsigned int input handlers to 0 instead of -1.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19233
diff
changeset
|
94 bconv->rx_handler = 0; |
21522
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
95 bconv->pb = pb; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
96 bconv->account = account; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
97 bconv->ip = g_strdup(ip); |
17555
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
98 |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
99 bonjour_parser_setup(bconv); |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
100 |
17555
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
101 return bconv; |
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
102 } |
b13850d13391
Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17554
diff
changeset
|
103 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
104 static const char * |
15822 | 105 _font_size_ichat_to_purple(int size) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
106 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
107 if (size > 24) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
108 return "7"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
109 } else if (size >= 21) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
110 return "6"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
111 } else if (size >= 17) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
112 return "5"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
113 } else if (size >= 14) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
114 return "4"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
115 } else if (size >= 12) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
116 return "3"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
117 } else if (size >= 10) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
118 return "2"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
119 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
120 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
121 return "1"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
122 } |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
123 |
22680
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
124 static gchar * |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
125 get_xmlnode_contents(xmlnode *node) |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
126 { |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
127 gchar *contents; |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
128 |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
129 contents = xmlnode_to_str(node, NULL); |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
130 |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
131 /* we just want the stuff inside <font></font> |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
132 * There isn't stuff exposed in xmlnode.c to do this more cleanly. */ |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
133 |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
134 if (contents) { |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
135 char *bodystart = strchr(contents, '>'); |
24674
7b10acb20526
Fix CID 399 - I'm reasonably sure this couldn't ever actually cause a NULL deref.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24673
diff
changeset
|
136 char *bodyend = bodystart ? strrchr(bodystart, '<') : NULL; |
22680
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
137 if (bodystart && bodyend && (bodystart + 1) != bodyend) { |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
138 *bodyend = '\0'; |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
139 memmove(contents, bodystart + 1, (bodyend - bodystart)); |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
140 } |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
141 } |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
142 |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
143 return contents; |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
144 } |
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
145 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
146 static void |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
147 _jabber_parse_and_write_message_to_ui(xmlnode *message_node, PurpleBuddy *pb) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
148 { |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
149 xmlnode *body_node, *html_node, *events_node; |
24344
fe7504f465a2
More Bonjour struct hiding fixes.
Richard Laager <rlaager@wiktel.com>
parents:
24170
diff
changeset
|
150 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(pb)); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
151 gchar *body = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
152 gboolean composing_event = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
153 |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
154 body_node = xmlnode_get_child(message_node, "body"); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
155 html_node = xmlnode_get_child(message_node, "html"); |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
156 |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
157 if (body_node == NULL && html_node == NULL) { |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
158 purple_debug_error("bonjour", "No body or html node found, discarding message.\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
159 return; |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
160 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
161 |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
162 events_node = xmlnode_get_child_with_namespace(message_node, "x", "jabber:x:event"); |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
163 if (events_node != NULL) { |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
164 if (xmlnode_get_child(events_node, "composing") != NULL) |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
165 composing_event = TRUE; |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
166 if (xmlnode_get_child(events_node, "id") != NULL) { |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
167 /* The user is just typing */ |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
168 /* TODO: Deal with typing notification */ |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
169 return; |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
170 } |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
171 } |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
172 |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
173 if (html_node != NULL) { |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
174 xmlnode *html_body_node; |
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
175 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
176 html_body_node = xmlnode_get_child(html_node, "body"); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
177 if (html_body_node != NULL) { |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
178 xmlnode *html_body_font_node; |
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
179 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
180 html_body_font_node = xmlnode_get_child(html_body_node, "font"); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
181 /* Types of messages sent by iChat */ |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
182 if (html_body_font_node != NULL) { |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
183 gchar *html_body; |
23999
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
184 const char *font_face, *font_size, *font_color, |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
185 *ichat_balloon_color, *ichat_text_color; |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
186 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
187 font_face = xmlnode_get_attrib(html_body_font_node, "face"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
188 /* The absolute iChat font sizes should be converted to 1..7 range */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
189 font_size = xmlnode_get_attrib(html_body_font_node, "ABSZ"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
190 if (font_size != NULL) |
15822 | 191 font_size = _font_size_ichat_to_purple(atoi(font_size)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
192 font_color = xmlnode_get_attrib(html_body_font_node, "color"); |
23999
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
193 ichat_balloon_color = xmlnode_get_attrib(html_body_node, "ichatballooncolor"); |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
194 ichat_text_color = xmlnode_get_attrib(html_body_node, "ichattextcolor"); |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
195 |
22680
dfb1cf26e0c8
Fix an issue with formatting in Bonjour messages. It looks like it has been
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22486
diff
changeset
|
196 html_body = get_xmlnode_contents(html_body_font_node); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
197 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
198 if (html_body == NULL) |
23999
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
199 /* This is the kind of formatted messages that Purple creates */ |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
200 html_body = xmlnode_to_str(html_body_font_node, NULL); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
201 |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
202 if (html_body != NULL) { |
23999
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
203 GString *str = g_string_new("<font"); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
204 |
23999
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
205 if (font_face) |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
206 g_string_append_printf(str, " face='%s'", font_face); |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
207 if (font_size) |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
208 g_string_append_printf(str, " size='%s'", font_size); |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
209 if (ichat_text_color) |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
210 g_string_append_printf(str, " color='%s'", ichat_text_color); |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
211 if (ichat_balloon_color) |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
212 g_string_append_printf(str, " back='%s'", ichat_balloon_color); |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
213 g_string_append_printf(str, ">%s</font>", html_body); |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
214 |
48da97d84886
Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23708
diff
changeset
|
215 body = g_string_free(str, FALSE); |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
216 |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
217 g_free(html_body); |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
218 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
219 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
220 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
221 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
222 |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
223 /* Compose the message */ |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
224 if (body == NULL && body_node != NULL) |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
225 body = xmlnode_get_data(body_node); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
226 |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
227 if (body == NULL) { |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
228 purple_debug_error("bonjour", "No html body or regular body found.\n"); |
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
229 return; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
230 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
231 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
232 /* Send the message to the UI */ |
24344
fe7504f465a2
More Bonjour struct hiding fixes.
Richard Laager <rlaager@wiktel.com>
parents:
24170
diff
changeset
|
233 serv_got_im(gc, purple_buddy_get_name(pb), body, 0, time(NULL)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
234 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
235 g_free(body); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
236 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
237 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
238 struct _match_buddies_by_address_t { |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
239 const char *address; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
240 GSList *matched_buddies; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
241 }; |
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 static void |
26538
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
244 _match_buddies_by_address(gpointer value, gpointer data) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
245 { |
17554
a1d05bc43d95
Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17553
diff
changeset
|
246 PurpleBuddy *pb = value; |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
247 BonjourBuddy *bb = NULL; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
248 struct _match_buddies_by_address_t *mbba = data; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
249 |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
250 bb = purple_buddy_get_protocol_data(pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
251 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
252 /* |
26766
9331016df8ac
Use more efficient purple_find_buddies in bonjour.
Paul Aurich <paul@darkrain42.org>
parents:
26538
diff
changeset
|
253 * If the current PurpleBuddy's data is not null, then continue to determine |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
254 * whether one of the buddies IPs matches the target IP. |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
255 */ |
26766
9331016df8ac
Use more efficient purple_find_buddies in bonjour.
Paul Aurich <paul@darkrain42.org>
parents:
26538
diff
changeset
|
256 if (bb != NULL) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
257 { |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
258 const char *ip; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
259 GSList *tmp = bb->ips; |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
260 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
261 while(tmp) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
262 ip = tmp->data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
263 if (ip != NULL && g_ascii_strcasecmp(ip, mbba->address) == 0) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
264 mbba->matched_buddies = g_slist_prepend(mbba->matched_buddies, pb); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
265 break; |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
266 } |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
267 tmp = tmp->next; |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
268 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
269 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
270 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
271 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
272 static void |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
273 _send_data_write_cb(gpointer data, gint source, PurpleInputCondition cond) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
274 { |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
275 PurpleBuddy *pb = data; |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
276 BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
277 BonjourJabberConversation *bconv = bb->conversation; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
278 int ret, writelen; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
279 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
280 writelen = purple_circ_buffer_get_max_read(bconv->tx_buf); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
281 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
282 if (writelen == 0) { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
283 purple_input_remove(bconv->tx_handler); |
19399
649ac48fce1d
Reset unsigned int input handlers to 0 instead of -1.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19233
diff
changeset
|
284 bconv->tx_handler = 0; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
285 return; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
286 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
287 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
288 ret = send(bconv->socket, bconv->tx_buf->outptr, writelen, 0); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
289 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
290 if (ret < 0 && errno == EAGAIN) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
291 return; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
292 else if (ret <= 0) { |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
293 PurpleConversation *conv = NULL; |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
294 PurpleAccount *account = NULL; |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21017
diff
changeset
|
295 const char *error = g_strerror(errno); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
296 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
297 purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
298 purple_buddy_get_name(pb), error ? error : "(null)"); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
299 |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
300 account = purple_buddy_get_account(pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
301 |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
302 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
303 if (conv != NULL) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
304 purple_conversation_write(conv, NULL, |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
305 _("Unable to send message."), |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
306 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
307 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
308 bonjour_jabber_close_conversation(bb->conversation); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
309 bb->conversation = NULL; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
310 return; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
311 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
312 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
313 purple_circ_buffer_mark_read(bconv->tx_buf, ret); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
314 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
315 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
316 static gint |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
317 _send_data(PurpleBuddy *pb, char *message) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
318 { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
319 gint ret; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
320 int len = strlen(message); |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
321 BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
322 BonjourJabberConversation *bconv = bb->conversation; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
323 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
324 /* If we're not ready to actually send, append it to the buffer */ |
19399
649ac48fce1d
Reset unsigned int input handlers to 0 instead of -1.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19233
diff
changeset
|
325 if (bconv->tx_handler != 0 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
326 || bconv->connect_data != NULL |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
327 || bconv->sent_stream_start != FULLY_SENT |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
328 || !bconv->recv_stream_start |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
329 || purple_circ_buffer_get_max_read(bconv->tx_buf) > 0) { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
330 ret = -1; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
331 errno = EAGAIN; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
332 } else { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
333 ret = send(bconv->socket, message, len, 0); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
334 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
335 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
336 if (ret == -1 && errno == EAGAIN) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
337 ret = 0; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
338 else if (ret <= 0) { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
339 PurpleConversation *conv; |
25877
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
340 PurpleAccount *account; |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21017
diff
changeset
|
341 const char *error = g_strerror(errno); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
342 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
343 purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
344 purple_buddy_get_name(pb), error ? error : "(null)"); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
345 |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
346 account = purple_buddy_get_account(pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
347 |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
348 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
349 if (conv != NULL) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
350 purple_conversation_write(conv, NULL, |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
351 _("Unable to send message."), |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
352 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
353 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
354 bonjour_jabber_close_conversation(bb->conversation); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
355 bb->conversation = NULL; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
356 return -1; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
357 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
358 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
359 if (ret < len) { |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
360 /* Don't interfere with the stream starting */ |
21820
509871e4f61c
Cleanup to prevent unnecessary alloc/free. Also a small fix to remove the possiblity that a message will be sent before the stream is started.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21806
diff
changeset
|
361 if (bconv->sent_stream_start == FULLY_SENT && bconv->recv_stream_start && bconv->tx_handler == 0) |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
362 bconv->tx_handler = purple_input_add(bconv->socket, PURPLE_INPUT_WRITE, |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
363 _send_data_write_cb, pb); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
364 purple_circ_buffer_append(bconv->tx_buf, message + ret, len - ret); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
365 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
366 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
367 return ret; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
368 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
369 |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
370 void bonjour_jabber_process_packet(PurpleBuddy *pb, xmlnode *packet) { |
21527
5b9da9db7e81
Various bugfixes including using purple_account_remove_buddy() in addition to purple_blist_remove_buddy() to make sure that the buddy gets cleaned up fully when logging out or we go offline.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21522
diff
changeset
|
371 |
5b9da9db7e81
Various bugfixes including using purple_account_remove_buddy() in addition to purple_blist_remove_buddy() to make sure that the buddy gets cleaned up fully when logging out or we go offline.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21522
diff
changeset
|
372 g_return_if_fail(packet != NULL); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
373 g_return_if_fail(pb != NULL); |
21527
5b9da9db7e81
Various bugfixes including using purple_account_remove_buddy() in addition to purple_blist_remove_buddy() to make sure that the buddy gets cleaned up fully when logging out or we go offline.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21522
diff
changeset
|
374 |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
375 if (!strcmp(packet->name, "message")) |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
376 _jabber_parse_and_write_message_to_ui(packet, pb); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
377 else if(!strcmp(packet->name, "iq")) |
24675
35d0ce5f319a
Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24674
diff
changeset
|
378 xep_iq_parse(packet, pb); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
379 else |
21527
5b9da9db7e81
Various bugfixes including using purple_account_remove_buddy() in addition to purple_blist_remove_buddy() to make sure that the buddy gets cleaned up fully when logging out or we go offline.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21522
diff
changeset
|
380 purple_debug_warning("bonjour", "Unknown packet: %s\n", packet->name ? packet->name : "(null)"); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
381 } |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
382 |
24673
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
383 static void bonjour_jabber_stream_ended(BonjourJabberConversation *bconv) { |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
384 |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
385 /* Inform the user that the conversation has been closed */ |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
386 BonjourBuddy *bb = NULL; |
25906
716b14deee97
a few struct hiding clean ups
Gary Kramlich <grim@reaperworld.com>
parents:
25880
diff
changeset
|
387 const gchar *name = bconv->pb ? purple_buddy_get_name(bconv->pb) : "(unknown)"; |
24673
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
388 |
29960
815bd8b41638
I before E, except after C
Stu Tomlinson <stu@nosnilmot.com>
parents:
29931
diff
changeset
|
389 purple_debug_info("bonjour", "Received conversation close notification from %s.\n", name); |
24673
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
390 |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
391 if(bconv->pb != NULL) |
25880
be87547aa431
merge of '0bf6462dd433df38943094bbed0393698d91a037'
Sadrul Habib Chowdhury <imadil@gmail.com>
diff
changeset
|
392 bb = purple_buddy_get_protocol_data(bconv->pb); |
24673
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
393 #if 0 |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
394 if(bconv->pb != NULL) { |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
395 PurpleConversation *conv; |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
396 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bconv->pb->name, bconv->pb->account); |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
397 if (conv != NULL) { |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
398 char *tmp = g_strdup_printf(_("%s has closed the conversation."), bconv->pb->name); |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
399 purple_conversation_write(conv, NULL, tmp, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
400 g_free(tmp); |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
401 } |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
402 } |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
403 #endif |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
404 /* Close the socket, clear the watcher and free memory */ |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
405 bonjour_jabber_close_conversation(bconv); |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
406 if(bb) |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
407 bb->conversation = NULL; |
5706043db5b5
Clean up some stuff that the behavior has changed on to fix CID 398.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24344
diff
changeset
|
408 } |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
409 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
410 static void |
15822 | 411 _client_socket_handler(gpointer data, gint socket, PurpleInputCondition condition) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
412 { |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
413 BonjourJabberConversation *bconv = data; |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
414 gint len, message_length; |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
415 static char message[4096]; |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
416 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
417 /* Read the data from the socket */ |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
418 if ((len = recv(socket, message, sizeof(message) - 1, 0)) == -1) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
419 /* There have been an error reading from the socket */ |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
420 if (errno != EAGAIN) { |
21527
5b9da9db7e81
Various bugfixes including using purple_account_remove_buddy() in addition to purple_blist_remove_buddy() to make sure that the buddy gets cleaned up fully when logging out or we go offline.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21522
diff
changeset
|
421 const char *err = g_strerror(errno); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
422 |
21527
5b9da9db7e81
Various bugfixes including using purple_account_remove_buddy() in addition to purple_blist_remove_buddy() to make sure that the buddy gets cleaned up fully when logging out or we go offline.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21522
diff
changeset
|
423 purple_debug_warning("bonjour", "receive error: %s\n", err ? err : "(null)"); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
424 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
425 bonjour_jabber_close_conversation(bconv); |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
426 if (bconv->pb != NULL) { |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
427 BonjourBuddy *bb = purple_buddy_get_protocol_data(bconv->pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
428 |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
429 if(bb != NULL) |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
430 bb->conversation = NULL; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
431 } |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
432 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
433 /* I guess we really don't need to notify the user. |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
434 * If they try to send another message it'll reconnect */ |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
435 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
436 return; |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
437 } else if (len == 0) { /* The other end has closed the socket */ |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
438 const gchar *name = purple_buddy_get_name(bconv->pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
439 purple_debug_warning("bonjour", "Connection closed (without stream end) by %s.\n", (name) ? name : "(unknown)"); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
440 bonjour_jabber_stream_ended(bconv); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
441 return; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
442 } else { |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
443 message_length = len; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
444 message[message_length] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
445 |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
446 while (message_length > 0 && g_ascii_iscntrl(message[message_length - 1])) { |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
447 message[message_length - 1] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
448 message_length--; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
449 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
450 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
451 |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
452 purple_debug_info("bonjour", "Receive: -%s- %d bytes\n", message, len); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
453 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
454 bonjour_parser_process(bconv, message, message_length); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
455 } |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
456 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
457 struct _stream_start_data { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
458 char *msg; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
459 }; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
460 |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
461 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
462 static void |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
463 _start_stream(gpointer data, gint source, PurpleInputCondition condition) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
464 { |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
465 BonjourJabberConversation *bconv = data; |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
466 struct _stream_start_data *ss = bconv->stream_data; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
467 int len, ret; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
468 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
469 len = strlen(ss->msg); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
470 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
471 /* Start Stream */ |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
472 ret = send(source, ss->msg, len, 0); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
473 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
474 if (ret == -1 && errno == EAGAIN) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
475 return; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
476 else if (ret <= 0) { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21017
diff
changeset
|
477 const char *err = g_strerror(errno); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
478 PurpleConversation *conv; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
479 const char *bname = bconv->buddy_name; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
480 BonjourBuddy *bb = NULL; |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
481 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
482 if(bconv->pb) { |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
483 bb = purple_buddy_get_protocol_data(bconv->pb); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
484 bname = purple_buddy_get_name(bconv->pb); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
485 } |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
486 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
487 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s error: %s\n", |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
488 bname ? bname : "(unknown)", bconv->ip, err ? err : "(null)"); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
489 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
490 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bname, bconv->account); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
491 if (conv != NULL) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
492 purple_conversation_write(conv, NULL, |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
493 _("Unable to send the message, the conversation couldn't be started."), |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
494 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
495 |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
496 bonjour_jabber_close_conversation(bconv); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
497 if(bb != NULL) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
498 bb->conversation = NULL; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
499 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
500 return; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
501 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
502 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
503 /* This is EXTREMELY unlikely to happen */ |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
504 if (ret < len) { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
505 char *tmp = g_strdup(ss->msg + ret); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
506 g_free(ss->msg); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
507 ss->msg = tmp; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
508 return; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
509 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
510 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
511 g_free(ss->msg); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
512 g_free(ss); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
513 bconv->stream_data = NULL; |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
514 |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
515 /* Stream started; process the send buffer if there is one */ |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
516 purple_input_remove(bconv->tx_handler); |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
517 bconv->tx_handler = 0; |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
518 bconv->sent_stream_start = FULLY_SENT; |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
519 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
520 bonjour_jabber_stream_started(bconv); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
521 } |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
522 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
523 static gboolean bonjour_jabber_send_stream_init(BonjourJabberConversation *bconv, int client_socket) |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
524 { |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
525 int ret, len; |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
526 char *stream_start; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
527 const char *bname = bconv->buddy_name; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
528 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
529 if (bconv->pb != NULL) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
530 bname = purple_buddy_get_name(bconv->pb); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
531 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
532 /* If we have no idea who "to" is, use an empty string. |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
533 * If we don't know now, it is because the other side isn't playing nice, so they can't complain. */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
534 if (bname == NULL) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
535 bname = ""; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
536 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
537 stream_start = g_strdup_printf(DOCTYPE, purple_account_get_username(bconv->account), bname); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
538 len = strlen(stream_start); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
539 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
540 bconv->sent_stream_start = PARTIALLY_SENT; |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
541 |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
542 /* Start the stream */ |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
543 ret = send(client_socket, stream_start, len, 0); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
544 |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
545 if (ret == -1 && errno == EAGAIN) |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
546 ret = 0; |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
547 else if (ret <= 0) { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21017
diff
changeset
|
548 const char *err = g_strerror(errno); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
549 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
550 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s error: %s\n", |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
551 (*bname) ? bname : "(unknown)", bconv->ip, err ? err : "(null)"); |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
552 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
553 if (bconv->pb) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
554 PurpleConversation *conv; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
555 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bname, bconv->account); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
556 if (conv != NULL) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
557 purple_conversation_write(conv, NULL, |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
558 _("Unable to send the message, the conversation couldn't be started."), |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
559 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
560 } |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
561 |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
562 close(client_socket); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
563 g_free(stream_start); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
564 |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
565 return FALSE; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
566 } |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
567 |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
568 /* This is unlikely to happen */ |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
569 if (ret < len) { |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
570 struct _stream_start_data *ss = g_new(struct _stream_start_data, 1); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
571 ss->msg = g_strdup(stream_start + ret); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
572 bconv->stream_data = ss; |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
573 /* Finish sending the stream start */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
574 bconv->tx_handler = purple_input_add(client_socket, |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
575 PURPLE_INPUT_WRITE, _start_stream, bconv); |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
576 } else |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
577 bconv->sent_stream_start = FULLY_SENT; |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
578 |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
579 g_free(stream_start); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
580 |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
581 return TRUE; |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
582 } |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
583 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
584 /* This gets called when we've successfully sent our <stream:stream /> |
29960
815bd8b41638
I before E, except after C
Stu Tomlinson <stu@nosnilmot.com>
parents:
29931
diff
changeset
|
585 * AND when we've received a <stream:stream /> */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
586 void bonjour_jabber_stream_started(BonjourJabberConversation *bconv) { |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
587 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
588 if (bconv->sent_stream_start == NOT_SENT && !bonjour_jabber_send_stream_init(bconv, bconv->socket)) { |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
589 const char *err = g_strerror(errno); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
590 const char *bname = bconv->buddy_name; |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
591 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
592 if (bconv->pb) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
593 bname = purple_buddy_get_name(bconv->pb); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
594 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
595 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s error: %s\n", |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
596 bname ? bname : "(unknown)", bconv->ip, err ? err : "(null)"); |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
597 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
598 if (bconv->pb) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
599 PurpleConversation *conv; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
600 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bname, bconv->account); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
601 if (conv != NULL) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
602 purple_conversation_write(conv, NULL, |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
603 _("Unable to send the message, the conversation couldn't be started."), |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
604 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
605 } |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
606 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
607 /* We don't want to recieve anything else */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
608 close(bconv->socket); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
609 bconv->socket = -1; |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
610 |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
611 /* This must be asynchronous because it destroys the parser and we |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
612 * may be in the middle of parsing. |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
613 */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
614 async_bonjour_jabber_close_conversation(bconv); |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
615 return; |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
616 } |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
617 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
618 /* If the stream has been completely started and we know who we're talking to, we can start doing stuff. */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
619 /* I don't think the circ_buffer can actually contain anything without a buddy being associated, but lets be explicit. */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
620 if (bconv->sent_stream_start == FULLY_SENT && bconv->recv_stream_start |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
621 && bconv->pb && purple_circ_buffer_get_max_read(bconv->tx_buf) > 0) { |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
622 /* Watch for when we can write the buffered messages */ |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
623 bconv->tx_handler = purple_input_add(bconv->socket, PURPLE_INPUT_WRITE, |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
624 _send_data_write_cb, bconv->pb); |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
625 /* We can probably write the data right now. */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
626 _send_data_write_cb(bconv->pb, bconv->socket, PURPLE_INPUT_WRITE); |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
627 } |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
628 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
629 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
630 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
631 #ifndef INET6_ADDRSTRLEN |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
632 #define INET6_ADDRSTRLEN 46 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
633 #endif |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
634 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
635 static void |
15822 | 636 _server_socket_handler(gpointer data, int server_socket, PurpleInputCondition condition) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
637 { |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
638 BonjourJabber *jdata = data; |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
639 struct sockaddr_storage their_addr; /* connector's address information */ |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
640 socklen_t sin_size = sizeof(struct sockaddr_storage); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
641 int client_socket; |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
19681
diff
changeset
|
642 int flags; |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
643 #ifdef HAVE_INET_NTOP |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
644 char addrstr[INET6_ADDRSTRLEN]; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
645 #endif |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
646 const char *address_text; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
647 struct _match_buddies_by_address_t *mbba; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
648 BonjourJabberConversation *bconv; |
26538
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
649 GSList *buddies; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
650 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
651 /* Check that it is a read condition */ |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
652 if (condition != PURPLE_INPUT_READ) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
653 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
654 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
655 memset(&their_addr, 0, sin_size); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
656 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
657 if ((client_socket = accept(server_socket, (struct sockaddr*)&their_addr, &sin_size)) == -1) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
658 return; |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
659 |
20347
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
19681
diff
changeset
|
660 flags = fcntl(client_socket, F_GETFL); |
04fe5601fedb
applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents:
19681
diff
changeset
|
661 fcntl(client_socket, F_SETFL, flags | O_NONBLOCK); |
23708
0dd3df365017
These fds don't need to be inherited by child processes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23567
diff
changeset
|
662 #ifndef _WIN32 |
0dd3df365017
These fds don't need to be inherited by child processes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23567
diff
changeset
|
663 fcntl(client_socket, F_SETFD, FD_CLOEXEC); |
0dd3df365017
These fds don't need to be inherited by child processes.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23567
diff
changeset
|
664 #endif |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
665 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
666 /* Look for the buddy that has opened the conversation and fill information */ |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
667 #ifdef HAVE_INET_NTOP |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
668 if (their_addr.ss_family == AF_INET6) |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
669 address_text = inet_ntop(their_addr.ss_family, &((struct sockaddr_in6 *)&their_addr)->sin6_addr, |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
670 addrstr, sizeof(addrstr)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
671 else |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
672 address_text = inet_ntop(their_addr.ss_family, &((struct sockaddr_in *)&their_addr)->sin_addr, |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
673 addrstr, sizeof(addrstr)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
674 #else |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
675 address_text = inet_ntoa(((struct sockaddr_in *)&their_addr)->sin_addr); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
676 #endif |
19654
941965d6fd88
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19574
diff
changeset
|
677 purple_debug_info("bonjour", "Received incoming connection from %s.\n", address_text); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
678 mbba = g_new0(struct _match_buddies_by_address_t, 1); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
679 mbba->address = address_text; |
26538
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
680 |
26766
9331016df8ac
Use more efficient purple_find_buddies in bonjour.
Paul Aurich <paul@darkrain42.org>
parents:
26538
diff
changeset
|
681 buddies = purple_find_buddies(jdata->account, NULL); |
26538
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
682 g_slist_foreach(buddies, _match_buddies_by_address, mbba); |
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
683 g_slist_free(buddies); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
684 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
685 if (mbba->matched_buddies == NULL) { |
29716 | 686 purple_debug_info("bonjour", "We don't like invisible buddies, this is not a superheroes comic\n"); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
687 g_free(mbba); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
688 close(client_socket); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
689 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
690 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
691 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
692 g_slist_free(mbba->matched_buddies); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
693 g_free(mbba); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
694 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
695 /* We've established that this *could* be from one of our buddies. |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
696 * Wait for the stream open to see if that matches too before assigning it. |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
697 */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
698 bconv = bonjour_jabber_conv_new(NULL, jdata->account, address_text); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
699 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
700 /* We wait for the stream start before doing anything else */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
701 bconv->socket = client_socket; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
702 bconv->rx_handler = purple_input_add(client_socket, PURPLE_INPUT_READ, _client_socket_handler, bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
703 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
704 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
705 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
706 static int |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
707 start_serversocket_listening(int port, int socket, struct sockaddr *addr, size_t addr_size, gboolean ip6, gboolean allow_port_fallback) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
708 { |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
709 int ret_port = port; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
710 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
711 purple_debug_info("bonjour", "Attempting to bind IPv%d socket to port %d.\n", ip6 ? 6 : 4, port); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
712 |
25497
f38799160cfa
Better support running many Bonjour clients on the same machine by allowing a
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24675
diff
changeset
|
713 /* Try to use the specified port - if it isn't available, use a random port */ |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
714 if (bind(socket, addr, addr_size) != 0) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
715 |
27371
96cafa3d271c
Make some error messages more uniform.
Mark Doliner <mark@kingant.net>
parents:
27119
diff
changeset
|
716 purple_debug_info("bonjour", "Unable to bind to specified " |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
717 "port %i: %s\n", port, g_strerror(errno)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
718 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
719 if (!allow_port_fallback) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
720 purple_debug_warning("bonjour", "Not attempting random port assignment.\n"); |
25497
f38799160cfa
Better support running many Bonjour clients on the same machine by allowing a
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24675
diff
changeset
|
721 return -1; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
722 } |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
723 #ifdef PF_INET6 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
724 if (ip6) |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
725 ((struct sockaddr_in6 *) addr)->sin6_port = 0; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
726 else |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
727 #endif |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
728 ((struct sockaddr_in *) addr)->sin_port = 0; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
729 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
730 if (bind(socket, addr, addr_size) != 0) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
731 purple_debug_error("bonjour", "Unable to bind IPv%d socket to port: %s\n", ip6 ? 6 : 4, g_strerror(errno)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
732 return -1; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
733 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
734 ret_port = purple_network_get_port_from_fd(socket); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
735 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
736 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
737 purple_debug_info("bonjour", "Bound IPv%d socket to port %d.\n", ip6 ? 6 : 4, ret_port); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
738 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
739 /* Attempt to listen on the bound socket */ |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
740 if (listen(socket, 10) != 0) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
741 purple_debug_error("bonjour", "Unable to listen on IPv%d socket: %s\n", ip6 ? 6 : 4, g_strerror(errno)); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
742 return -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
743 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
744 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
745 #if 0 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
746 /* TODO: Why isn't this being used? */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
747 data->socket = purple_network_listen(jdata->port, SOCK_STREAM); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
748 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
749 if (jdata->socket == -1) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
750 { |
15822 | 751 purple_debug_error("bonjour", "No se ha podido crear el socket\n"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
752 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
753 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
754 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
755 return ret_port; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
756 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
757 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
758 gint |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
759 bonjour_jabber_start(BonjourJabber *jdata) |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
760 { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
761 int ipv6_port = -1, ipv4_port = -1; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
762 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
763 /* Open a listening socket for incoming conversations */ |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
764 #ifdef PF_INET6 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
765 jdata->socket6 = socket(PF_INET6, SOCK_STREAM, 0); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
766 #endif |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
767 jdata->socket = socket(PF_INET, SOCK_STREAM, 0); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
768 if (jdata->socket == -1 && jdata->socket6 == -1) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
769 purple_debug_error("bonjour", "Unable to create socket: %s", |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
770 g_strerror(errno)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
771 return -1; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
772 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
773 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
774 #ifdef PF_INET6 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
775 if (jdata->socket6 != -1) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
776 struct sockaddr_in6 addr6; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
777 memset(&addr6, 0, sizeof(addr6)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
778 addr6.sin6_family = AF_INET6; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
779 addr6.sin6_port = htons(jdata->port); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
780 addr6.sin6_addr = in6addr_any; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
781 ipv6_port = start_serversocket_listening(jdata->port, jdata->socket6, (struct sockaddr *) &addr6, sizeof(addr6), TRUE, TRUE); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
782 /* Open a watcher in the socket we have just opened */ |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
783 if (ipv6_port > 0) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
784 jdata->watcher_id6 = purple_input_add(jdata->socket6, PURPLE_INPUT_READ, _server_socket_handler, jdata); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
785 jdata->port = ipv6_port; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
786 } else { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
787 purple_debug_error("bonjour", "Failed to start listening on IPv6 socket.\n"); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
788 close(jdata->socket6); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
789 jdata->socket6 = -1; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
790 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
791 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
792 #endif |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
793 if (jdata->socket != -1) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
794 struct sockaddr_in addr4; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
795 memset(&addr4, 0, sizeof(addr4)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
796 addr4.sin_family = AF_INET; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
797 addr4.sin_port = htons(jdata->port); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
798 ipv4_port = start_serversocket_listening(jdata->port, jdata->socket, (struct sockaddr *) &addr4, sizeof(addr4), FALSE, ipv6_port != -1); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
799 /* Open a watcher in the socket we have just opened */ |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
800 if (ipv4_port > 0) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
801 jdata->watcher_id = purple_input_add(jdata->socket, PURPLE_INPUT_READ, _server_socket_handler, jdata); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
802 jdata->port = ipv4_port; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
803 } else { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
804 purple_debug_error("bonjour", "Failed to start listening on IPv4 socket.\n"); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
805 close(jdata->socket); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
806 jdata->socket = -1; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
807 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
808 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
809 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
810 if (!(ipv6_port > 0 || ipv4_port > 0)) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
811 purple_debug_error("bonjour", "Unable to listen on socket: %s", |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
812 g_strerror(errno)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
813 return -1; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
814 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
815 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
816 return jdata->port; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
817 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
818 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
819 static void |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
820 _connected_to_buddy(gpointer data, gint source, const gchar *error) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
821 { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
822 PurpleBuddy *pb = data; |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
823 BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
824 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
825 bb->conversation->connect_data = NULL; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
826 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
827 if (source < 0) { |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
828 PurpleConversation *conv = NULL; |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
829 PurpleAccount *account = NULL; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
830 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
831 purple_debug_error("bonjour", "Error connecting to buddy %s at %s:%d error: %s\n", |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
832 purple_buddy_get_name(pb), bb->conversation->ip, bb->port_p2pj, error ? error : "(null)"); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
833 |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
834 account = purple_buddy_get_account(pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
835 |
25130
16734635febf
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24170
diff
changeset
|
836 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
837 if (conv != NULL) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
838 purple_conversation_write(conv, NULL, |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
839 _("Unable to send the message, the conversation couldn't be started."), |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
840 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
841 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
842 bonjour_jabber_close_conversation(bb->conversation); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
843 bb->conversation = NULL; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
844 return; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
845 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
846 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
847 if (!bonjour_jabber_send_stream_init(bb->conversation, source)) { |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21017
diff
changeset
|
848 const char *err = g_strerror(errno); |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
849 PurpleConversation *conv = NULL; |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
850 PurpleAccount *account = NULL; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
851 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
852 purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
853 purple_buddy_get_name(pb), bb->conversation->ip, bb->port_p2pj, err ? err : "(null)"); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
854 |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
855 account = purple_buddy_get_account(pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
856 |
25130
16734635febf
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24170
diff
changeset
|
857 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, bb->name, account); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
858 if (conv != NULL) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
859 purple_conversation_write(conv, NULL, |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
860 _("Unable to send the message, the conversation couldn't be started."), |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
861 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
862 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
863 close(source); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
864 bonjour_jabber_close_conversation(bb->conversation); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
865 bb->conversation = NULL; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
866 return; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
867 } |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
868 |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
869 /* Start listening for the stream acknowledgement */ |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
870 bb->conversation->socket = source; |
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
871 bb->conversation->rx_handler = purple_input_add(source, |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
872 PURPLE_INPUT_READ, _client_socket_handler, bb->conversation); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
873 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
874 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
875 void |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
876 bonjour_jabber_conv_match_by_name(BonjourJabberConversation *bconv) { |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
877 PurpleBuddy *pb = NULL; |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
878 BonjourBuddy *bb = NULL; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
879 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
880 g_return_if_fail(bconv->ip != NULL); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
881 g_return_if_fail(bconv->pb == NULL); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
882 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
883 pb = purple_find_buddy(bconv->account, bconv->buddy_name); |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
884 if (pb && (bb = purple_buddy_get_protocol_data(pb))) { |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
885 const char *ip; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
886 GSList *tmp = bb->ips; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
887 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
888 purple_debug_info("bonjour", "Found buddy %s for incoming conversation \"from\" attrib.\n", |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
889 purple_buddy_get_name(pb)); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
890 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
891 /* Check that one of the buddy's IPs matches */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
892 while(tmp) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
893 ip = tmp->data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
894 if (ip != NULL && g_ascii_strcasecmp(ip, bconv->ip) == 0) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
895 BonjourJabber *jdata = ((BonjourData*) bconv->account->gc->proto_data)->jabber_data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
896 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
897 purple_debug_info("bonjour", "Matched buddy %s to incoming conversation \"from\" attrib and IP (%s)\n", |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
898 purple_buddy_get_name(pb), bconv->ip); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
899 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
900 /* Attach conv. to buddy and remove from pending list */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
901 jdata->pending_conversations = g_slist_remove(jdata->pending_conversations, bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
902 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
903 /* Check if the buddy already has a conversation and, if so, replace it */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
904 if(bb->conversation != NULL && bb->conversation != bconv) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
905 bonjour_jabber_close_conversation(bb->conversation); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
906 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
907 bconv->pb = pb; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
908 bb->conversation = bconv; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
909 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
910 break; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
911 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
912 tmp = tmp->next; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
913 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
914 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
915 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
916 /* We've failed to match a buddy - give up */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
917 if (bconv->pb == NULL) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
918 /* This must be asynchronous because it destroys the parser and we |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
919 * may be in the middle of parsing. |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
920 */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
921 async_bonjour_jabber_close_conversation(bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
922 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
923 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
924 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
925 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
926 void |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
927 bonjour_jabber_conv_match_by_ip(BonjourJabberConversation *bconv) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
928 BonjourJabber *jdata = ((BonjourData*) bconv->account->gc->proto_data)->jabber_data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
929 struct _match_buddies_by_address_t *mbba; |
26538
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
930 GSList *buddies; |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
931 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
932 mbba = g_new0(struct _match_buddies_by_address_t, 1); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
933 mbba->address = bconv->ip; |
26538
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
934 |
26766
9331016df8ac
Use more efficient purple_find_buddies in bonjour.
Paul Aurich <paul@darkrain42.org>
parents:
26538
diff
changeset
|
935 buddies = purple_find_buddies(jdata->account, NULL); |
26538
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
936 g_slist_foreach(buddies, _match_buddies_by_address, mbba); |
2b7604ede0e4
Change purple_blist_get_buddies to return a list instead of the hash table.
Paul Aurich <paul@darkrain42.org>
parents:
25947
diff
changeset
|
937 g_slist_free(buddies); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
938 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
939 /* If there is exactly one match, use it */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
940 if(mbba->matched_buddies != NULL) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
941 if(mbba->matched_buddies->next != NULL) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
942 purple_debug_error("bonjour", "More than one buddy matched for ip %s.\n", bconv->ip); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
943 else { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
944 PurpleBuddy *pb = mbba->matched_buddies->data; |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
945 BonjourBuddy *bb = purple_buddy_get_protocol_data(pb); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
946 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
947 purple_debug_info("bonjour", "Matched buddy %s to incoming conversation using IP (%s)\n", |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
948 purple_buddy_get_name(pb), bconv->ip); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
949 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
950 /* Attach conv. to buddy and remove from pending list */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
951 jdata->pending_conversations = g_slist_remove(jdata->pending_conversations, bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
952 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
953 /* Check if the buddy already has a conversation and, if so, replace it */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
954 if (bb->conversation != NULL && bb->conversation != bconv) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
955 bonjour_jabber_close_conversation(bb->conversation); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
956 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
957 bconv->pb = pb; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
958 bb->conversation = bconv; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
959 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
960 } else |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
961 purple_debug_error("bonjour", "No buddies matched for ip %s.\n", bconv->ip); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
962 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
963 /* We've failed to match a buddy - give up */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
964 if (bconv->pb == NULL) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
965 /* This must be asynchronous because it destroys the parser and we |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
966 * may be in the middle of parsing. |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
967 */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
968 async_bonjour_jabber_close_conversation(bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
969 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
970 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
971 g_slist_free(mbba->matched_buddies); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
972 g_free(mbba); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
973 } |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
974 |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
975 static PurpleBuddy * |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
976 _find_or_start_conversation(BonjourJabber *jdata, const gchar *to) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
977 { |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
978 PurpleBuddy *pb = NULL; |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
979 BonjourBuddy *bb = NULL; |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
980 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
981 g_return_val_if_fail(jdata != NULL, NULL); |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
982 g_return_val_if_fail(to != NULL, NULL); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
983 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
984 pb = purple_find_buddy(jdata->account, to); |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
985 if (pb == NULL || (bb = purple_buddy_get_protocol_data(pb)) == NULL) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
986 /* You can not send a message to an offline buddy */ |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
987 return NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
988 |
17500
bca2780f7669
Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17495
diff
changeset
|
989 /* Check if there is a previously open conversation */ |
bca2780f7669
Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17495
diff
changeset
|
990 if (bb->conversation == NULL) |
bca2780f7669
Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17495
diff
changeset
|
991 { |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
992 PurpleProxyConnectData *connect_data; |
17599
bce4211c4980
More robust hack to force Bonjour to use no proxy when directly connecting to buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17558
diff
changeset
|
993 PurpleProxyInfo *proxy_info; |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
994 /* For better or worse, use the first IP*/ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
995 const char *ip = bb->ips->data; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
996 |
21466
7a05b6f84545
Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21465
diff
changeset
|
997 purple_debug_info("bonjour", "Starting conversation with %s\n", to); |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
998 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
999 /* Make sure that the account always has a proxy of "none". |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1000 * This is kind of dirty, but proxy_connect_none() isn't exposed. */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1001 proxy_info = purple_account_get_proxy_info(jdata->account); |
17599
bce4211c4980
More robust hack to force Bonjour to use no proxy when directly connecting to buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17558
diff
changeset
|
1002 if (proxy_info == NULL) { |
bce4211c4980
More robust hack to force Bonjour to use no proxy when directly connecting to buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17558
diff
changeset
|
1003 proxy_info = purple_proxy_info_new(); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1004 purple_account_set_proxy_info(jdata->account, proxy_info); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1005 } |
17599
bce4211c4980
More robust hack to force Bonjour to use no proxy when directly connecting to buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17558
diff
changeset
|
1006 purple_proxy_info_set_type(proxy_info, PURPLE_PROXY_NONE); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1007 |
27119
d078048fb03a
Pass the gc as the handle in a bunch of calls to purple_proxy_connect
Mark Doliner <mark@kingant.net>
parents:
26766
diff
changeset
|
1008 connect_data = purple_proxy_connect( |
d078048fb03a
Pass the gc as the handle in a bunch of calls to purple_proxy_connect
Mark Doliner <mark@kingant.net>
parents:
26766
diff
changeset
|
1009 purple_account_get_connection(jdata->account), |
d078048fb03a
Pass the gc as the handle in a bunch of calls to purple_proxy_connect
Mark Doliner <mark@kingant.net>
parents:
26766
diff
changeset
|
1010 jdata->account, |
21806
41959f031322
Update Bonjour prpl to support multiple presence records for the same buddy. Eliminate the Howl backend to avoid having to maintain yet another set of code. References #4187 (more to come to fix the rest of the ticket).
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21802
diff
changeset
|
1011 ip, bb->port_p2pj, _connected_to_buddy, pb); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1012 |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1013 if (connect_data == NULL) { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1014 purple_debug_error("bonjour", "Unable to connect to buddy (%s).\n", to); |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1015 return NULL; |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1016 } |
17500
bca2780f7669
Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17495
diff
changeset
|
1017 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1018 bb->conversation = bonjour_jabber_conv_new(pb, jdata->account, ip); |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1019 bb->conversation->connect_data = connect_data; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1020 /* We don't want _send_data() to register the tx_handler; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1021 * that neeeds to wait until we're actually connected. */ |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1022 bb->conversation->tx_handler = 0; |
17500
bca2780f7669
Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17495
diff
changeset
|
1023 } |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1024 return pb; |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1025 } |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1026 |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1027 int |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1028 bonjour_jabber_send_message(BonjourJabber *jdata, const gchar *to, const gchar *body) |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1029 { |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1030 xmlnode *message_node, *node, *node2; |
24170
bb8aa63494e7
Looks like we need to convert the message into XHTML first. Fixes #7160.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23999
diff
changeset
|
1031 gchar *message, *xhtml; |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1032 PurpleBuddy *pb; |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1033 BonjourBuddy *bb; |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1034 int ret; |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1035 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1036 pb = _find_or_start_conversation(jdata, to); |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1037 if (pb == NULL || (bb = purple_buddy_get_protocol_data(pb)) == NULL) { |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1038 purple_debug_info("bonjour", "Can't send a message to an offline buddy (%s).\n", to); |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1039 /* You can not send a message to an offline buddy */ |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1040 return -10000; |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1041 } |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1042 |
24170
bb8aa63494e7
Looks like we need to convert the message into XHTML first. Fixes #7160.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23999
diff
changeset
|
1043 purple_markup_html_to_xhtml(body, &xhtml, &message); |
bb8aa63494e7
Looks like we need to convert the message into XHTML first. Fixes #7160.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23999
diff
changeset
|
1044 |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1045 message_node = xmlnode_new("message"); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1046 xmlnode_set_attrib(message_node, "to", bb->name); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1047 xmlnode_set_attrib(message_node, "from", purple_account_get_username(jdata->account)); |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1048 xmlnode_set_attrib(message_node, "type", "chat"); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1049 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1050 /* Enclose the message from the UI within a "font" node */ |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1051 node = xmlnode_new_child(message_node, "body"); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1052 xmlnode_insert_data(node, message, strlen(message)); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1053 g_free(message); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1054 |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1055 node = xmlnode_new_child(message_node, "html"); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1056 xmlnode_set_namespace(node, "http://www.w3.org/1999/xhtml"); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1057 |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1058 node = xmlnode_new_child(node, "body"); |
24170
bb8aa63494e7
Looks like we need to convert the message into XHTML first. Fixes #7160.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23999
diff
changeset
|
1059 message = g_strdup_printf("<font>%s</font>", xhtml); |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1060 node2 = xmlnode_from_str(message, strlen(message)); |
24170
bb8aa63494e7
Looks like we need to convert the message into XHTML first. Fixes #7160.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23999
diff
changeset
|
1061 g_free(xhtml); |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1062 g_free(message); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1063 xmlnode_insert_child(node, node2); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1064 |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1065 node = xmlnode_new_child(message_node, "x"); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1066 xmlnode_set_namespace(node, "jabber:x:event"); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1067 xmlnode_insert_child(node, xmlnode_new("composing")); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1068 |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1069 message = xmlnode_to_str(message_node, NULL); |
15811 | 1070 xmlnode_free(message_node); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1071 |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1072 ret = _send_data(pb, message) >= 0; |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1073 |
15811 | 1074 g_free(message); |
1075 | |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1076 return ret; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1077 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1078 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1079 static gboolean |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1080 _async_bonjour_jabber_close_conversation_cb(gpointer data) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1081 BonjourJabberConversation *bconv = data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1082 bonjour_jabber_close_conversation(bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1083 return FALSE; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1084 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1085 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1086 void |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1087 async_bonjour_jabber_close_conversation(BonjourJabberConversation *bconv) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1088 BonjourJabber *jdata = ((BonjourData*) bconv->account->gc->proto_data)->jabber_data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1089 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1090 jdata->pending_conversations = g_slist_remove(jdata->pending_conversations, bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1091 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1092 /* Disconnect this conv. from the buddy here so it can't be disposed of twice.*/ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1093 if(bconv->pb != NULL) { |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1094 BonjourBuddy *bb = purple_buddy_get_protocol_data(bconv->pb); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1095 if (bb->conversation == bconv) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1096 bb->conversation = NULL; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1097 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1098 |
22111
603d5325af4c
Prevent a crash caused by freed memory being accessed.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21829
diff
changeset
|
1099 bconv->close_timeout = purple_timeout_add(0, _async_bonjour_jabber_close_conversation_cb, bconv); |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1100 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1101 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1102 void |
17556
612dc5149964
Close conversation connections when logging out of the Bonjour account. This also fixes leakage.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17555
diff
changeset
|
1103 bonjour_jabber_close_conversation(BonjourJabberConversation *bconv) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1104 { |
21522
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1105 if (bconv != NULL) { |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1106 BonjourData *bd = NULL; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1107 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1108 if(PURPLE_CONNECTION_IS_VALID(bconv->account->gc)) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1109 bd = bconv->account->gc->proto_data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1110 bd->jabber_data->pending_conversations = g_slist_remove(bd->jabber_data->pending_conversations, bconv); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1111 } |
21522
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1112 |
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1113 /* Cancel any file transfers that are waiting to begin */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1114 /* There wont be any transfers if it hasn't been attached to a buddy */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1115 if (bconv->pb != NULL && bd != NULL) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1116 GSList *xfers, *tmp_next; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1117 xfers = bd->xfer_lists; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1118 while(xfers != NULL) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1119 PurpleXfer *xfer = xfers->data; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1120 tmp_next = xfers->next; |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1121 /* We only need to cancel this if it hasn't actually started transferring. */ |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1122 /* This will change if we ever support IBB transfers. */ |
25130
16734635febf
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24170
diff
changeset
|
1123 if (strcmp(xfer->who, purple_buddy_get_name(bconv->pb)) == 0 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1124 && (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_NOT_STARTED |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1125 || purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_UNKNOWN)) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1126 purple_xfer_cancel_remote(xfer); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1127 } |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1128 xfers = tmp_next; |
21522
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1129 } |
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1130 } |
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1131 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1132 /* Close the socket and remove the watcher */ |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1133 if (bconv->socket >= 0) { |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1134 /* Send the end of the stream to the other end of the conversation */ |
21734
d4c01ceb50a1
Fix #4189 to make the bonjour prpl more standards compliant by sending the stream response in the correct order. Thanks to Sjoerd Simons from Telepathy Salut for noticing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21696
diff
changeset
|
1135 if (bconv->sent_stream_start == FULLY_SENT) |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1136 send(bconv->socket, STREAM_END, strlen(STREAM_END), 0); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1137 /* TODO: We're really supposed to wait for "</stream:stream>" before closing the socket */ |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1138 close(bconv->socket); |
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1139 } |
19399
649ac48fce1d
Reset unsigned int input handlers to 0 instead of -1.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19233
diff
changeset
|
1140 if (bconv->rx_handler != 0) |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1141 purple_input_remove(bconv->rx_handler); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1142 if (bconv->tx_handler > 0) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1143 purple_input_remove(bconv->tx_handler); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1144 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1145 /* Free all the data related to the conversation */ |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1146 purple_circ_buffer_destroy(bconv->tx_buf); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1147 if (bconv->connect_data != NULL) |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1148 purple_proxy_connect_cancel(bconv->connect_data); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1149 if (bconv->stream_data != NULL) { |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1150 struct _stream_start_data *ss = bconv->stream_data; |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1151 g_free(ss->msg); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1152 g_free(ss); |
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1153 } |
18761
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
1154 |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
1155 if (bconv->context != NULL) |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
1156 bonjour_parser_setup(bconv); |
316be7e715c6
Update the Bonjour prpl to use libxml explicitly instead of the xml_node stuff. This allows us to deal with partial reads. I also fixed issues related to starting conversations with iChat and a couple other things. Fixes #2022,#1652
Daniel Atallah <daniel.atallah@gmail.com>
parents:
18651
diff
changeset
|
1157 |
22111
603d5325af4c
Prevent a crash caused by freed memory being accessed.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21829
diff
changeset
|
1158 if (bconv->close_timeout != 0) |
603d5325af4c
Prevent a crash caused by freed memory being accessed.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21829
diff
changeset
|
1159 purple_timeout_remove(bconv->close_timeout); |
603d5325af4c
Prevent a crash caused by freed memory being accessed.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21829
diff
changeset
|
1160 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1161 g_free(bconv->buddy_name); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1162 g_free(bconv->ip); |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1163 g_free(bconv); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1164 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1165 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1166 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1167 void |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1168 bonjour_jabber_stop(BonjourJabber *jdata) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1169 { |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
1170 /* Close the server socket and remove the watcher */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1171 if (jdata->socket >= 0) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1172 close(jdata->socket); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1173 if (jdata->watcher_id > 0) |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1174 purple_input_remove(jdata->watcher_id); |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1175 if (jdata->socket6 >= 0) |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1176 close(jdata->socket6); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1177 if (jdata->watcher_id6 > 0) |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1178 purple_input_remove(jdata->watcher_id6); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1179 |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
1180 /* Close all the conversation sockets and remove all the watchers after sending end streams */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1181 if (jdata->account->gc != NULL) { |
17553
61005dea822b
Cleanup, fix a leak and prevent the inbound xml from being parsed twice for every message.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17542
diff
changeset
|
1182 GSList *buddies, *l; |
17542
496d007a8912
Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17541
diff
changeset
|
1183 |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1184 buddies = purple_find_buddies(jdata->account, NULL); |
17556
612dc5149964
Close conversation connections when logging out of the Bonjour account. This also fixes leakage.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17555
diff
changeset
|
1185 for (l = buddies; l; l = l->next) { |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1186 BonjourBuddy *bb = purple_buddy_get_protocol_data((PurpleBuddy*) l->data); |
29931
55913ed2a229
bonjour: Fix a crash-on-disconnect I introduced. Closes #11851
Paul Aurich <paul@darkrain42.org>
parents:
29716
diff
changeset
|
1187 if (bb && bb->conversation) { |
29649
99c9595e14a2
Fix two related on-disconnect double frees.
Paul Aurich <paul@darkrain42.org>
parents:
29481
diff
changeset
|
1188 /* Any ongoing connection attempt is cancelled |
99c9595e14a2
Fix two related on-disconnect double frees.
Paul Aurich <paul@darkrain42.org>
parents:
29481
diff
changeset
|
1189 * by _purple_connection_destroy */ |
99c9595e14a2
Fix two related on-disconnect double frees.
Paul Aurich <paul@darkrain42.org>
parents:
29481
diff
changeset
|
1190 bb->conversation->connect_data = NULL; |
23018
ef0bcbe33689
applied changes from 3d595739f53a259d5dae408a05f64d2836f02ac9
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22907
diff
changeset
|
1191 bonjour_jabber_close_conversation(bb->conversation); |
ef0bcbe33689
applied changes from 3d595739f53a259d5dae408a05f64d2836f02ac9
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22907
diff
changeset
|
1192 bb->conversation = NULL; |
ef0bcbe33689
applied changes from 3d595739f53a259d5dae408a05f64d2836f02ac9
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22907
diff
changeset
|
1193 } |
17556
612dc5149964
Close conversation connections when logging out of the Bonjour account. This also fixes leakage.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17555
diff
changeset
|
1194 } |
17558
6e4e2d234c3a
Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
17556
diff
changeset
|
1195 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1196 g_slist_free(buddies); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1197 } |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1198 |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1199 while (jdata->pending_conversations != NULL) { |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1200 bonjour_jabber_close_conversation(jdata->pending_conversations->data); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1201 jdata->pending_conversations = g_slist_delete_link(jdata->pending_conversations, jdata->pending_conversations); |
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1202 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1203 } |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1204 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1205 XepIq * |
21522
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1206 xep_iq_new(void *data, XepIqType type, const char *to, const char *from, const char *id) |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1207 { |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1208 xmlnode *iq_node = NULL; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1209 XepIq *iq = NULL; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1210 |
21465
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1211 g_return_val_if_fail(data != NULL, NULL); |
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1212 g_return_val_if_fail(to != NULL, NULL); |
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1213 g_return_val_if_fail(id != NULL, NULL); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1214 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1215 iq_node = xmlnode_new("iq"); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1216 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1217 xmlnode_set_attrib(iq_node, "to", to); |
21522
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1218 xmlnode_set_attrib(iq_node, "from", from); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1219 xmlnode_set_attrib(iq_node, "id", id); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1220 switch (type) { |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1221 case XEP_IQ_SET: |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1222 xmlnode_set_attrib(iq_node, "type", "set"); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1223 break; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1224 case XEP_IQ_GET: |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1225 xmlnode_set_attrib(iq_node, "type", "get"); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1226 break; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1227 case XEP_IQ_RESULT: |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1228 xmlnode_set_attrib(iq_node, "type", "result"); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1229 break; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1230 case XEP_IQ_ERROR: |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1231 xmlnode_set_attrib(iq_node, "type", "error"); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1232 break; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1233 case XEP_IQ_NONE: |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1234 default: |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1235 xmlnode_set_attrib(iq_node, "type", "none"); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1236 break; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1237 } |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1238 |
21465
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1239 iq = g_new0(XepIq, 1); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1240 iq->node = iq_node; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1241 iq->type = type; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1242 iq->data = ((BonjourData*)data)->jabber_data; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1243 iq->to = (char*)to; |
21522
dc703f13449a
Fix a couple bugs in the Bonjour XEP-0065 implementation, mainly related to error handling, but also send a <streamhost-used /> result. Also fix a XEP-0096 bug where the SI profile wasn't being specified. These bring ft with gajim closer to working, but we aren't there yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21466
diff
changeset
|
1244 |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1245 return iq; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1246 } |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1247 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1248 static gboolean |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1249 check_if_blocked(PurpleBuddy *pb) |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1250 { |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1251 gboolean blocked = FALSE; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1252 GSList *l = NULL; |
24675
35d0ce5f319a
Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24674
diff
changeset
|
1253 PurpleAccount *acc = purple_buddy_get_account(pb); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1254 |
24675
35d0ce5f319a
Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24674
diff
changeset
|
1255 if(acc == NULL) |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1256 return FALSE; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1257 |
25130
16734635febf
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24170
diff
changeset
|
1258 acc = purple_buddy_get_account(pb); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1259 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1260 for(l = acc->deny; l != NULL; l = l->next) { |
25791
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1261 const gchar *name = purple_buddy_get_name(pb); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1262 const gchar *username = purple_account_get_username(acc); |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1263 |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1264 if(!purple_utf8_strcasecmp(name, (char *)l->data)) { |
252e26edb7a9
Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents:
24344
diff
changeset
|
1265 purple_debug_info("bonjour", "%s has been blocked by %s.\n", name, username); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1266 blocked = TRUE; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1267 break; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1268 } |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1269 } |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1270 return blocked; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1271 } |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1272 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1273 static void |
24675
35d0ce5f319a
Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24674
diff
changeset
|
1274 xep_iq_parse(xmlnode *packet, PurpleBuddy *pb) |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1275 { |
24675
35d0ce5f319a
Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24674
diff
changeset
|
1276 xmlnode *child; |
25877
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
1277 PurpleAccount *account; |
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
1278 PurpleConnection *gc; |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1279 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1280 if(check_if_blocked(pb)) |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1281 return; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1282 |
25877
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
1283 account = purple_buddy_get_account(pb); |
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
1284 gc = purple_account_get_connection(account); |
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
1285 |
21464
577d90f8794e
I messed this up at some point.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21463
diff
changeset
|
1286 if ((child = xmlnode_get_child(packet, "si")) || (child = xmlnode_get_child(packet, "error"))) |
25877
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
1287 xep_si_parse(gc, packet, pb); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1288 else |
25877
1260a3fb60f4
propagate from branch 'im.pidgin.pidgin' (head b8d6086aef6b2e65d86e8ce60220ab7f460d5079)
Richard Laager <rlaager@wiktel.com>
diff
changeset
|
1289 xep_bytestreams_parse(gc, packet, pb); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1290 } |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1291 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1292 int |
21465
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1293 xep_iq_send_and_free(XepIq *iq) |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1294 { |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1295 int ret = -1; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1296 PurpleBuddy *pb = NULL; |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1297 |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1298 /* start the talk, reuse the message socket */ |
21829
cc0809ec0c85
This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21820
diff
changeset
|
1299 pb = _find_or_start_conversation((BonjourJabber*) iq->data, iq->to); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1300 /* Send the message */ |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1301 if (pb != NULL) { |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1302 /* Convert xml node into stream */ |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1303 gchar *msg = xmlnode_to_str(iq->node, NULL); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1304 ret = _send_data(pb, msg); |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1305 g_free(msg); |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1306 } |
21465
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1307 |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1308 xmlnode_free(iq->node); |
21465
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1309 iq->node = NULL; |
e489c81e1f6f
Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21464
diff
changeset
|
1310 g_free(iq); |
21441
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1311 |
da75dd6c41fb
Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21440
diff
changeset
|
1312 return (ret >= 0) ? 0 : -1; |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1313 } |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1314 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1315 /* This returns a list containing all non-localhost IPs */ |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1316 GSList * |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1317 bonjour_jabber_get_local_ips(int fd) |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1318 { |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1319 GSList *ips = NULL; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1320 const char *address_text; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1321 int ret; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1322 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1323 #ifdef HAVE_GETIFADDRS /* This is required for IPv6 */ |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1324 { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1325 struct ifaddrs *ifap, *ifa; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1326 struct sockaddr *addr; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1327 char addrstr[INET6_ADDRSTRLEN]; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1328 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1329 ret = getifaddrs(&ifap); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1330 if (ret != 0) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1331 const char *error = g_strerror(errno); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1332 purple_debug_error("bonjour", "getifaddrs() error: %s\n", error ? error : "(null)"); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1333 return NULL; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1334 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1335 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1336 for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1337 if (!(ifa->ifa_flags & IFF_RUNNING) || (ifa->ifa_flags & IFF_LOOPBACK) || ifa->ifa_addr == NULL) |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1338 continue; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1339 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1340 addr = ifa->ifa_addr; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1341 address_text = NULL; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1342 switch (addr->sa_family) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1343 case AF_INET: |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1344 address_text = inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr, |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1345 addrstr, sizeof(addrstr)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1346 break; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1347 #ifdef PF_INET6 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1348 case AF_INET6: |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1349 address_text = inet_ntop(addr->sa_family, &((struct sockaddr_in6 *)addr)->sin6_addr, |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1350 addrstr, sizeof(addrstr)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1351 break; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1352 #endif |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1353 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1354 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1355 if (address_text != NULL) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1356 if (addr->sa_family == AF_INET) |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1357 ips = g_slist_append(ips, g_strdup(address_text)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1358 else |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1359 ips = g_slist_prepend(ips, g_strdup(address_text)); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1360 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1361 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1362 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1363 freeifaddrs(ifap); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1364 |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1365 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1366 #else |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1367 { |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1368 char *tmp; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1369 struct ifconf ifc; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1370 struct ifreq *ifr; |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1371 char buffer[1024]; |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1372 struct sockaddr_in *sinptr; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1373 int source = fd; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1374 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1375 if (fd < 0) |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1376 source = socket(PF_INET, SOCK_STREAM, 0); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1377 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1378 ifc.ifc_len = sizeof(buffer); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1379 ifc.ifc_req = (struct ifreq *)buffer; |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1380 ret = ioctl(source, SIOCGIFCONF, &ifc); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1381 |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1382 if (fd < 0) |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1383 close(source); |
21440
d8106b63b0a4
I thought I was just fixing a leak in this commit, but it turns out I forgot to add the new files in the previous commit.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21437
diff
changeset
|
1384 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1385 if (ret < 0) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1386 const char *error = g_strerror(errno); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1387 purple_debug_error("bonjour", "ioctl(SIOCGIFCONF) error: %s\n", error ? error : "(null)"); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1388 return NULL; |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1389 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1390 |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1391 tmp = buffer; |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1392 while (tmp < buffer + ifc.ifc_len) { |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1393 ifr = (struct ifreq *)tmp; |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1394 tmp += HX_SIZE_OF_IFREQ(*ifr); |
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1395 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1396 if (ifr->ifr_addr.sa_family == AF_INET) { |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1397 sinptr = (struct sockaddr_in *)&ifr->ifr_addr; |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1398 if ((ntohl(sinptr->sin_addr.s_addr) >> 24) != 127) { |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1399 address_text = inet_ntoa(sinptr->sin_addr); |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1400 ips = g_slist_prepend(ips, g_strdup(address_text)); |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1401 } |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1402 } |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1403 } |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1404 } |
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1405 #endif |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1406 |
29481
755219afed9f
Implementation of IPv6 support for Bonjour
Daniel Atallah <daniel.atallah@gmail.com>
parents:
27371
diff
changeset
|
1407 return ips; |
21437
db7fa42845f6
Patch from some Intel folks to implement file transfer in Bonjour using XEP-0096 and 0065. This hopefully will work with Gaijm (haven't yet tested) and, of course, between libpurple instances; it will not work with Adium or iChat.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
21418
diff
changeset
|
1408 } |