annotate libpurple/protocols/bonjour/jabber.c @ 25871:65cfc59858cf

propagate from branch 'im.pidgin.pidgin' (head d5bb29138cbe033bbfd8ec689203d73818765327) to branch 'im.pidgin.pidgin.next.minor' (head 35ee8e40db640867e5b9239030cdc326e7f0a005)
author Gary Kramlich <grim@reaperworld.com>
date Sat, 13 Dec 2008 05:45:27 +0000
parents e35115192593 35d0ce5f319a
children be87547aa431
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /*
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
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
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
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
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
47 #include "network.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
48 #include "eventloop.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
49 #include "connection.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
50 #include "blist.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
51 #include "xmlnode.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 #include "debug.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53 #include "notify.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
54 #include "util.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56 #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
57 #include "parser.h"
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58 #include "bonjour.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
59 #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
60 #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
61
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
62 #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
63 # 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
64 #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
65 # 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
66 #endif
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
67
17554
a1d05bc43d95 Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17553
diff changeset
68 #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
69 /* 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
70 #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
71 "<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
72
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
73 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
74 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
75 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
76 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
77 };
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
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
79 static void
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
80 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
81
17555
b13850d13391 Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17554
diff changeset
82 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
83 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
84
b13850d13391 Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17554
diff changeset
85 BonjourJabberConversation *bconv = g_new0(BonjourJabberConversation, 1);
b13850d13391 Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17554
diff changeset
86 bconv->socket = -1;
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
87 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
88 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
89 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
90 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
91 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
92 bconv->ip = g_strdup(ip);
17555
b13850d13391 Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17554
diff changeset
93
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
94 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
95
17555
b13850d13391 Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17554
diff changeset
96 return bconv;
b13850d13391 Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17554
diff changeset
97 }
b13850d13391 Consolidate BonjourJabberConversation creation and deletion.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17554
diff changeset
98
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
99 static const char *
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
100 _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
101 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
102 if (size > 24) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
103 return "7";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
104 } else if (size >= 21) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105 return "6";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
106 } else if (size >= 17) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 return "5";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108 } else if (size >= 14) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
109 return "4";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
110 } else if (size >= 12) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
111 return "3";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 } else if (size >= 10) {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
113 return "2";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
115
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116 return "1";
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 }
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
118
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
119 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
120 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
121 {
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
122 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
123
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 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
125
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 /* 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
127 * 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
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 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
130 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
131 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
132 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
133 *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
134 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
135 }
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
136 }
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
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 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
139 }
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
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
141 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
142 _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
143 {
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
144 xmlnode *body_node, *html_node, *events_node;
24344
fe7504f465a2 More Bonjour struct hiding fixes.
Richard Laager <rlaager@wiktel.com>
parents: 24170
diff changeset
145 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
146 gchar *body = NULL;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
147 gboolean composing_event = FALSE;
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 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
150 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
151
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
152 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
153 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
154 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
155 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
156
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
157 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
158 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
159 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
160 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
161 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
162 /* 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
163 /* 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
164 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
165 }
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 }
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
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 if (html_node != NULL) {
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
169 xmlnode *html_body_node;
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
170
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
171 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
172 if (html_body_node != NULL) {
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
173 xmlnode *html_body_font_node;
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
174
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
175 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
176 /* 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
177 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
178 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
179 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
180 *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
181
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
182 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
183 /* 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
184 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
185 if (font_size != NULL)
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
186 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
187 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
188 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
189 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
190
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
191 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
192
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
193 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
194 /* 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
195 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
196
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 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
198 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
199
23999
48da97d84886 Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23708
diff changeset
200 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
201 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
202 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
203 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
204 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
205 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
206 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
207 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
208 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
209
48da97d84886 Don't arbitrarily default font settings when none are specified for incoming
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23708
diff changeset
210 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
211
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
212 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
213 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
214 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
215 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
216 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
217
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
218 /* 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
219 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
220 body = xmlnode_get_data(body_node);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
221
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
222 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
223 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
224 return;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
225 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
226
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
227 /* Send the message to the UI */
24344
fe7504f465a2 More Bonjour struct hiding fixes.
Richard Laager <rlaager@wiktel.com>
parents: 24170
diff changeset
228 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
229
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
230 g_free(body);
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
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
233 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
234 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
235 GSList *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
236 BonjourJabber *jdata;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
237 };
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
239 static 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
240 _match_buddies_by_address(gpointer key, gpointer value, gpointer data)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
241 {
17554
a1d05bc43d95 Send 'to' and 'from' attributes in the stream start message.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17553
diff changeset
242 PurpleBuddy *pb = value;
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
243 PurpleAccount *account = NULL;
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
244 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
245 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
246
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
247 account = purple_buddy_get_account(pb);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
248 bb = purple_buddy_get_protocol_data(pb);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
249
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
250 /*
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
251 * If the current PurpleBuddy's data is not null and the PurpleBuddy's account
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
252 * is the same as the account requesting the check 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
253 * 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
254 */
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
255 if (mbba->jdata->account == account && bb != NULL)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
256 {
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
257 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
258 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
259
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
260 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
261 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
262 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
263 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
264 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
265 }
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
266 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
267 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
268 }
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
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
271 static void
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
272 _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
273 {
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
274 PurpleBuddy *pb = data;
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
275 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
276 BonjourJabberConversation *bconv = bb->conversation;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
277 int ret, writelen;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
278
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
279 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
280
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
281 if (writelen == 0) {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
282 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
283 bconv->tx_handler = 0;
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
284 return;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
285 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
286
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
287 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
288
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
289 if (ret < 0 && errno == EAGAIN)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
290 return;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
291 else if (ret <= 0) {
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
292 PurpleConversation *conv = NULL;
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
293 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
294 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
295
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
296 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
297 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
298
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
299 account = purple_buddy_get_account(pb);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
300
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
301 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
302 if (conv != NULL)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
303 purple_conversation_write(conv, NULL,
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
304 _("Unable to send message."),
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
305 PURPLE_MESSAGE_SYSTEM, time(NULL));
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
306
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
307 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
308 bb->conversation = NULL;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
309 return;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
310 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
311
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
312 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
313 }
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 static gint
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
316 _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
317 {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
318 gint ret;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
319 int len = strlen(message);
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
320 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
321 BonjourJabberConversation *bconv = bb->conversation;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
322
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
323 /* 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
324 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
325 || 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
326 || 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
327 || !bconv->recv_stream_start
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
328 || 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
329 ret = -1;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
330 errno = EAGAIN;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
331 } else {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
332 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
333 }
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 if (ret == -1 && errno == EAGAIN)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
336 ret = 0;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
337 else if (ret <= 0) {
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
338 PurpleConversation *conv = NULL;
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
339 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
340 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
341
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
342 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
343 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
344
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
345 account = purple_buddy_get_account(pb);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
346
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
347 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
348 if (conv != NULL)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
349 purple_conversation_write(conv, NULL,
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
350 _("Unable to send message."),
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
351 PURPLE_MESSAGE_SYSTEM, time(NULL));
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
352
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
353 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
354 bb->conversation = NULL;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
355 return -1;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
356 }
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 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
359 /* 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
360 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
361 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
362 _send_data_write_cb, pb);
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
363 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
364 }
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 return ret;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
367 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
368
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
369 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
370
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 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
372 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
373
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
374 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
375 _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
376 else if(!strcmp(packet->name, "iq"))
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
377 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
378 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
379 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
380 }
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
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
382 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
383
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 /* 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
385 BonjourBuddy *bb = 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
386
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
387 purple_debug_info("bonjour", "Recieved conversation close notification from %s.\n", bconv->pb ? bconv->pb->name : "(unknown)");
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
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
389 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
390 bb = bconv->pb->proto_data;
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 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
392 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
393 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
394 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
395 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
396 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
397 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
398 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
399 }
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 }
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 #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
402 /* 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
403 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
404 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
405 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
406 }
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
407
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
408 static void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
409 _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
410 {
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
411 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
412 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
413 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
414
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
415 /* 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
416 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
417 /* 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
418 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
419 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
420
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 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
422
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
423 bonjour_jabber_close_conversation(bconv);
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
424 if (bconv->pb != NULL) {
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
425 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
426
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
427 if(bb != NULL)
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
428 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
429 }
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
430
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
431 /* 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
432 * 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
433 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
434 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
435 } 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
436 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
437 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
438 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
439 return;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
440 } 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
441 message_length = len;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
442 message[message_length] = '\0';
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
443
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
444 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
445 message[message_length - 1] = '\0';
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
446 message_length--;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
447 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
448 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
449
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
450 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
451
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
452 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
453 }
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
454
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
455 struct _stream_start_data {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
456 char *msg;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
457 };
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
458
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
459
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
460 static void
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
461 _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
462 {
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
463 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
464 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
465 int len, ret;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
466
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
467 len = strlen(ss->msg);
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 /* Start Stream */
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
470 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
471
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
472 if (ret == -1 && errno == EAGAIN)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
473 return;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
474 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
475 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
476 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
477 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
478 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
479
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
480 if(bconv->pb) {
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
481 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
482 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
483 }
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
484
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
485 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
486 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
487
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
488 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
489 if (conv != NULL)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
490 purple_conversation_write(conv, NULL,
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
491 _("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
492 PURPLE_MESSAGE_SYSTEM, time(NULL));
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
493
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
494 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
495 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
496 bb->conversation = NULL;
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
497
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
498 return;
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
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
501 /* 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
502 if (ret < len) {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
503 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
504 g_free(ss->msg);
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
505 ss->msg = tmp;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
506 return;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
507 }
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
508
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
509 g_free(ss->msg);
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
510 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
511 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
512
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 /* 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
514 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
515 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
516 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
517
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
518 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
519 }
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
520
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
521 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
522 {
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
523 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
524 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
525 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
526
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
528 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
529
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
530 /* 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
531 * 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
532 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
533 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
534
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
536 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
537
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
538 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
539
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
540 /* 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
541 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
542
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 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
544 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
545 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
546 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
547
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
548 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
549 (*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
550
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
551 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
552 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
553 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
554 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
555 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
556 _("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
557 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
558 }
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
559
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
560 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
561 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
562
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 return FALSE;
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
564 }
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
565
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
566 /* 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
567 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
568 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
569 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
570 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
571 /* 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
572 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
573 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
574 } 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
575 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
576
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
577 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
578
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
579 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
580 }
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
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
582 /* This gets called when we've successfully sent our <stream:stream />
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
583 * AND when we've recieved a <stream:stream /> */
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
585
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 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
587 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
588 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
589
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 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
591 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
592
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
594 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
595
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
596 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
597 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
598 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
599 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
600 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
601 _("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
602 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
603 }
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
604
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
605 /* 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
606 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
607 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
608
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
609 /* 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
610 * 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
611 */
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
612 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
613 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
614 }
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
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
616 /* 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
617 /* 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
618 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
619 && 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
620 /* 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
621 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
622 _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
623 /* 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
624 _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
625 }
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
626
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
627 }
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
628
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
629 static void
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
630 _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
631 {
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
632 BonjourJabber *jdata = data;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
633 struct sockaddr_in their_addr; /* connector's address information */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
634 socklen_t sin_size = sizeof(struct sockaddr);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
635 int client_socket;
20347
04fe5601fedb applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 19681
diff changeset
636 int flags;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
637 char *address_text = 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
638 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
639 BonjourJabberConversation *bconv;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
640
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
641 /* 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
642 if (condition != PURPLE_INPUT_READ)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
643 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
644
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
645 if ((client_socket = accept(server_socket, (struct sockaddr *)&their_addr, &sin_size)) == -1)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
646 return;
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
647
20347
04fe5601fedb applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 19681
diff changeset
648 flags = fcntl(client_socket, F_GETFL);
04fe5601fedb applied changes from 2762c6075c0dc52a96098c5478c5bf68cfd890a3
Luke Schierer <lschiere@pidgin.im>
parents: 19681
diff changeset
649 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
650 #ifndef _WIN32
0dd3df365017 These fds don't need to be inherited by child processes.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23567
diff changeset
651 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
652 #endif
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
653
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
654 /* Look for the buddy that has opened the conversation and fill information */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
655 address_text = inet_ntoa(their_addr.sin_addr);
19654
941965d6fd88 Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19574
diff changeset
656 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
657 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
658 mbba->address = address_text;
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
659 mbba->jdata = jdata;
25807
e35115192593 Finished struct hiding in bonjour and qq
Gary Kramlich <grim@reaperworld.com>
parents: 25797
diff changeset
660 g_hash_table_foreach(purple_blist_get_buddies(), _match_buddies_by_address, mbba);
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
661
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
662 if (mbba->matched_buddies == NULL) {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
663 purple_debug_info("bonjour", "We don't like invisible buddies, this is not a superheros 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
664 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
665 g_free(mbba);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
666 close(client_socket);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
667 return;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
668 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
669
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
670 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
671 g_free(mbba);
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
672
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
673 /* 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
674 * 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
675 */
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
676 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
677
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 /* 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
679 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
680 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
681
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
682 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
683
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
684 gint
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
685 bonjour_jabber_start(BonjourJabber *jdata)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
686 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
687 struct sockaddr_in my_addr;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
688 int i;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
689 gboolean bind_successful;
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 /* Open a listening socket for incoming conversations */
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 if ((jdata->socket = socket(PF_INET, SOCK_STREAM, 0)) < 0)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
693 {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21017
diff changeset
694 purple_debug_error("bonjour", "Cannot open socket: %s\n", 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
695 purple_connection_error_reason (jdata->account->gc,
21358
ba41f2a60253 Rename:
Will Thompson <will.thompson@collabora.co.uk>
parents: 20070
diff changeset
696 PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
ba41f2a60253 Rename:
Will Thompson <will.thompson@collabora.co.uk>
parents: 20070
diff changeset
697 _("Cannot open socket"));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
698 return -1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
699 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
700
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
701 memset(&my_addr, 0, sizeof(struct sockaddr_in));
21696
fded60f269bc Don't advertise our presence in avahi on IPv6 or listen for sevices since we don't support receiving connections from or connecting to IPv6 buddies. If someone needs to do that, they can submit a patch. Fixes #4188.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21667
diff changeset
702 my_addr.sin_family = AF_INET;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
703
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
704 /* Attempt to find a free port */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
705 bind_successful = FALSE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
706 for (i = 0; i < 10; i++)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
707 {
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
708 my_addr.sin_port = htons(jdata->port);
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
709 if (bind(jdata->socket, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)) == 0)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
710 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
711 bind_successful = TRUE;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
712 break;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
713 }
23567
a9db0aec7e59 Fix running several Bonjour instances on the same machine.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23018
diff changeset
714
a9db0aec7e59 Fix running several Bonjour instances on the same machine.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 23018
diff changeset
715 purple_debug_info("bonjour", "Unable to bind to port %u.(%s)\n", jdata->port, 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
716 jdata->port++;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
717 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
718
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
719 /* On no! We tried 10 ports and could not bind to ANY of them */
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
720 if (!bind_successful)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
721 {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21017
diff changeset
722 purple_debug_error("bonjour", "Cannot bind socket: %s\n", 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
723 purple_connection_error_reason (jdata->account->gc,
21358
ba41f2a60253 Rename:
Will Thompson <will.thompson@collabora.co.uk>
parents: 20070
diff changeset
724 PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
ba41f2a60253 Rename:
Will Thompson <will.thompson@collabora.co.uk>
parents: 20070
diff changeset
725 _("Could not bind socket to port"));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
726 return -1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
727 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
728
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
729 /* Attempt to listen on the bound 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
730 if (listen(jdata->socket, 10) != 0)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
731 {
21121
35b4f1dc4c8d replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 21017
diff changeset
732 purple_debug_error("bonjour", "Cannot listen on socket: %s\n", 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
733 purple_connection_error_reason (jdata->account->gc,
21358
ba41f2a60253 Rename:
Will Thompson <will.thompson@collabora.co.uk>
parents: 20070
diff changeset
734 PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
ba41f2a60253 Rename:
Will Thompson <will.thompson@collabora.co.uk>
parents: 20070
diff changeset
735 _("Could not listen on socket"));
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
736 return -1;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
737 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
738
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
739 #if 0
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
740 /* 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
741 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
742
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
743 if (jdata->socket == -1)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
744 {
15822
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15811
diff changeset
745 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
746 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
747 #endif
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
748
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
749 /* Open a watcher in the socket we have just opened */
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
750 jdata->watcher_id = purple_input_add(jdata->socket, PURPLE_INPUT_READ, _server_socket_handler, jdata);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
751
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
752 return jdata->port;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
753 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
754
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
755 static void
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
756 _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
757 {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
758 PurpleBuddy *pb = data;
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
759 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
760
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
761 bb->conversation->connect_data = NULL;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
762
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
763 if (source < 0) {
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
764 PurpleConversation *conv = NULL;
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
765 PurpleAccount *account = NULL;
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
766
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
767 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
768 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
769
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
770 account = purple_buddy_get_account(pb);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
771
25130
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24170
diff changeset
772 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
773 if (conv != NULL)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
774 purple_conversation_write(conv, NULL,
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
775 _("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
776 PURPLE_MESSAGE_SYSTEM, time(NULL));
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
777
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
778 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
779 bb->conversation = NULL;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
780 return;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
781 }
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
782
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
783 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
784 const char *err = g_strerror(errno);
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
785 PurpleConversation *conv = NULL;
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
786 PurpleAccount *account = NULL;
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
787
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
788 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
789 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
790
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
791 account = purple_buddy_get_account(pb);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
792
25130
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24170
diff changeset
793 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
794 if (conv != NULL)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
795 purple_conversation_write(conv, NULL,
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
796 _("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
797 PURPLE_MESSAGE_SYSTEM, time(NULL));
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
798
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
799 close(source);
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
800 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
801 bb->conversation = NULL;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
802 return;
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
803 }
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
804
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
805 /* 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
806 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
807 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
808 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
809 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
810
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
811 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
812 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
813 PurpleBuddy *pb = NULL;
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
814 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
815
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
817 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
818
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
819 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
820 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
821 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
822 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
823
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
824 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
825 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
826
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
827 /* 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
828 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
829 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
830 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
831 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
832
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
833 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
834 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
835
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
836 /* 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
837 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
838
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
839 /* 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
840 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
841 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
842
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
843 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
844 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
845
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
846 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
847 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
848 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
849 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
850 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
851
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
852 /* 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
853 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
854 /* 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
855 * 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
856 */
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
857 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
858 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
859 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
860
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
861
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
862 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
863 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
864 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
865 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
866
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
867 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
868 mbba->address = 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
869 mbba->jdata = jdata;
25807
e35115192593 Finished struct hiding in bonjour and qq
Gary Kramlich <grim@reaperworld.com>
parents: 25797
diff changeset
870 g_hash_table_foreach(purple_blist_get_buddies(), _match_buddies_by_address, mbba);
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
871
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 /* 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
873 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
874 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
875 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
876 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
877 PurpleBuddy *pb = mbba->matched_buddies->data;
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
878 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
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 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
881 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
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 /* 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
884 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
885
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 /* 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
887 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
888 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
889
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
891 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
892 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 } 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
894 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
895
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 /* 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
897 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
898 /* 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
899 * 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
900 */
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
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
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting 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 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
905 g_free(mbba);
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
906 }
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
907
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
908 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
909 _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
910 {
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
911 PurpleBuddy *pb = NULL;
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
912 BonjourBuddy *bb = NULL;
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
913
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
914 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
915 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
916
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
917 pb = purple_find_buddy(jdata->account, to);
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
918 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
919 /* 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
920 return NULL;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
921
17500
bca2780f7669 Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17495
diff changeset
922 /* 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
923 if (bb->conversation == NULL)
bca2780f7669 Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17495
diff changeset
924 {
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
925 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
926 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
927 /* 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
928 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
929
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
930 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
931
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
932 /* 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
933 * 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
934 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
935 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
936 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
937 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
938 }
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
939 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
940
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
941 connect_data = purple_proxy_connect(NULL, 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
942 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
943
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
944 if (connect_data == NULL) {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
945 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
946 return NULL;
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
947 }
17500
bca2780f7669 Improve error handling while connecting to a bonjour buddy.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17495
diff changeset
948
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
949 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
950 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
951 /* 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
952 * 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
953 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
954 }
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
955 return pb;
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
956 }
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
957
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
958 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
959 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
960 {
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
961 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
962 gchar *message, *xhtml;
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
963 PurpleBuddy *pb;
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
964 BonjourBuddy *bb;
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
965 int ret;
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
966
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
967 pb = _find_or_start_conversation(jdata, to);
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
968 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
969 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
970 /* 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
971 return -10000;
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
972 }
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
973
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
974 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
975
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
976 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
977 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
978 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
979 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
980
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
981 /* 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
982 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
983 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
984 g_free(message);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
985
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
986 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
987 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
988
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
989 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
990 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
991 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
992 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
993 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
994 xmlnode_insert_child(node, node2);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
995
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
996 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
997 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
998 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
999
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
1000 message = xmlnode_to_str(message_node, NULL);
15811
71b017348c39 plug some memory leaks
Stu Tomlinson <stu@nosnilmot.com>
parents: 15373
diff changeset
1001 xmlnode_free(message_node);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1002
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1003 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
1004
15811
71b017348c39 plug some memory leaks
Stu Tomlinson <stu@nosnilmot.com>
parents: 15373
diff changeset
1005 g_free(message);
71b017348c39 plug some memory leaks
Stu Tomlinson <stu@nosnilmot.com>
parents: 15373
diff changeset
1006
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1007 return ret;
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1008 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1009
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
1010 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
1011 _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
1012 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
1013 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
1014 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
1015 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1016
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1017 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
1018 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
1019 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
1020
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1021 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
1022
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1023 /* 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
1024 if(bconv->pb != NULL) {
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
1025 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
1026 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
1027 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
1028 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1029
22111
603d5325af4c Prevent a crash caused by freed memory being accessed.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21829
diff changeset
1030 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
1031 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1032
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1033 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
1034 bonjour_jabber_close_conversation(BonjourJabberConversation *bconv)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1035 {
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
1036 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
1037 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
1038
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1039 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
1040 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
1041 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
1042 }
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
1043
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
1044 /* 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
1045 /* 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
1046 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
1047 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
1048 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
1049 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
1050 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
1051 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
1052 /* 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
1053 /* 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
1054 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
1055 && (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
1056 || 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
1057 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
1058 }
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1059 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
1060 }
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
1061 }
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
1062
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1063 /* 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
1064 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
1065 /* 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
1066 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
1067 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
1068 /* 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
1069 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
1070 }
19399
649ac48fce1d Reset unsigned int input handlers to 0 instead of -1.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 19233
diff changeset
1071 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
1072 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
1073 if (bconv->tx_handler > 0)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1074 purple_input_remove(bconv->tx_handler);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1075
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1076 /* 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
1077 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
1078 if (bconv->connect_data != NULL)
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1079 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
1080 if (bconv->stream_data != NULL) {
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1081 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
1082 g_free(ss->msg);
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1083 g_free(ss);
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1084 }
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
1085
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
1086 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
1087 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
1088
22111
603d5325af4c Prevent a crash caused by freed memory being accessed.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21829
diff changeset
1089 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
1090 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
1091
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
1092 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
1093 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
1094 g_free(bconv);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1095 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1096 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1097
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1098 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
1099 bonjour_jabber_stop(BonjourJabber *jdata)
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1100 {
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
1101 /* 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
1102 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
1103 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
1104 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
1105 purple_input_remove(jdata->watcher_id);
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1106
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
1107 /* 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
1108 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
1109 GSList *buddies, *l;
17542
496d007a8912 Some more Bonjour cleanup and leak fixing.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17541
diff changeset
1110
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
1111 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
1112 for (l = buddies; l; l = l->next) {
25791
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
1113 BonjourBuddy *bb = purple_buddy_get_protocol_data((PurpleBuddy*) l->data);
23018
ef0bcbe33689 applied changes from 3d595739f53a259d5dae408a05f64d2836f02ac9
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22907
diff changeset
1114 if (bb != NULL) {
ef0bcbe33689 applied changes from 3d595739f53a259d5dae408a05f64d2836f02ac9
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22907
diff changeset
1115 bonjour_jabber_close_conversation(bb->conversation);
ef0bcbe33689 applied changes from 3d595739f53a259d5dae408a05f64d2836f02ac9
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22907
diff changeset
1116 bb->conversation = NULL;
ef0bcbe33689 applied changes from 3d595739f53a259d5dae408a05f64d2836f02ac9
Daniel Atallah <daniel.atallah@gmail.com>
parents: 22907
diff changeset
1117 }
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
1118 }
17558
6e4e2d234c3a Update Bonjour to do nonblocking I/O correctly.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 17556
diff changeset
1119
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1120 g_slist_free(buddies);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1121 }
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
1122
cc0809ec0c85 This is the second part of the fix to support having multiple presence records in Bonjour (and also supporting multiple presences using the same IP). Incoming conversations are no longer immediately attached to a buddy - we use an algorithm to match a conversation to a buddy based on the IP and, if possible the "from" attribute of the stream or the first tag in the stream. Thanks to Sjoerd Simons from Telepahy Salut for noticing and suggesting the algorithm. Fixes #4187. It'd be good if a few people test this.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21820
diff changeset
1123 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
1124 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
1125 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
1126 }
15373
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1127 }
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
1128
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
1129 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
1130 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
1131 {
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
1132 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
1133 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
1134
21465
e489c81e1f6f Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21464
diff changeset
1135 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
1136 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
1137 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
1138
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
1139 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
1140
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
1141 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
1142 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
1143 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
1144 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
1145 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
1146 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
1147 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
1148 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
1149 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
1150 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
1151 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
1152 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
1153 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
1154 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
1155 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
1156 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
1157 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
1158 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
1159 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
1160 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
1161 }
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
1162
21465
e489c81e1f6f Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21464
diff changeset
1163 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
1164 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
1165 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
1166 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
1167 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
1168
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
1169 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
1170 }
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
1171
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
1172 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
1173 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
1174 {
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
1175 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
1176 GSList *l = NULL;
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1177 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
1178
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1179 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
1180 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
1181
25130
16734635febf Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 24170
diff changeset
1182 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
1183
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
1184 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
1185 const gchar *name = purple_buddy_get_name(pb);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
1186 const gchar *username = purple_account_get_username(acc);
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
1187
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
1188 if(!purple_utf8_strcasecmp(name, (char *)l->data)) {
252e26edb7a9 Finished moving to api for bonjour
Gary Kramlich <grim@reaperworld.com>
parents: 24344
diff changeset
1189 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
1190 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
1191 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
1192 }
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
1193 }
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
1194 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
1195 }
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
1196
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
1197 static void
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1198 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
1199 {
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1200 xmlnode *child;
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
1201
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
1202 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
1203 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
1204
21464
577d90f8794e I messed this up at some point.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21463
diff changeset
1205 if ((child = xmlnode_get_child(packet, "si")) || (child = xmlnode_get_child(packet, "error")))
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1206 xep_si_parse(purple_account_get_connection(pb->account),
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1207 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
1208 else
24675
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1209 xep_bytestreams_parse(purple_account_get_connection(pb->account),
35d0ce5f319a Further cleanup to fix CID 373.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 24674
diff changeset
1210 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
1211 }
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
1212
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
1213 int
21465
e489c81e1f6f Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21464
diff changeset
1214 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
1215 {
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 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
1217 PurpleBuddy *pb = NULL;
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1218
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 /* 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
1220 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
1221 /* Send the message */
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1222 if (pb != NULL) {
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1223 /* Convert xml node into stream */
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1224 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
1225 ret = _send_data(pb, msg);
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1226 g_free(msg);
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1227 }
21465
e489c81e1f6f Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21464
diff changeset
1228
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1229 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
1230 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
1231 g_free(iq);
21441
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1232
da75dd6c41fb Leak fix, cleanup and code reuse.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21440
diff changeset
1233 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
1234 }
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
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
1236 /* This returns a ';' delimited string containing all non-localhost IPs */
21465
e489c81e1f6f Cleanup and fix the socks5 proxy connect address to be correct.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21464
diff changeset
1237 const char *
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
1238 purple_network_get_my_ip_ext2(int 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
1239 {
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 char buffer[1024];
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 static char ip_ext[17 * 10];
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 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
1243 char *tip;
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
1244 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
1245 struct 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
1246 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
1247 guint32 lhost = htonl(127 * 256 * 256 * 256 + 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
1248 long unsigned int add;
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 int source = fd;
21463
2b6553584385 Don't allow the buffer to be overrun when you have lots of local IPs.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21441
diff changeset
1250 int len, count = 0;
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
1251
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 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
1253 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
1254
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
1255 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
1256 ifc.ifc_req = (struct ifreq *)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
1257 ioctl(source, SIOCGIFCONF, &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
1258
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 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
1260 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
1261
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
1262 memset(ip_ext, 0, sizeof(ip_ext));
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
1263 memcpy(ip_ext, "0.0.0.0", 7);
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
1264 tmp = 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
1265 tip = ip_ext;
21463
2b6553584385 Don't allow the buffer to be overrun when you have lots of local IPs.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21441
diff changeset
1266 while (tmp < buffer + ifc.ifc_len && count < 10)
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
1267 {
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 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
1269 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
1270
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 if (ifr->ifr_addr.sa_family == AF_INET)
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 sinptr = (struct sockaddr_in *)&ifr->ifr_addr;
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
1274 if (sinptr->sin_addr.s_addr != lhost)
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 {
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
1276 add = ntohl(sinptr->sin_addr.s_addr);
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
1277 len = g_snprintf(tip, 17, "%lu.%lu.%lu.%lu;",
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
1278 ((add >> 24) & 255),
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 ((add >> 16) & 255),
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 ((add >> 8) & 255),
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 add & 255);
21552
9736ee1ca29e Get rid of two compile warnings:
Mark Doliner <mark@kingant.net>
parents: 21527
diff changeset
1282 tip = &tip[len];
21463
2b6553584385 Don't allow the buffer to be overrun when you have lots of local IPs.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 21441
diff changeset
1283 count++;
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
1284 continue;
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
1285 }
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
1286 }
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
1287 }
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
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
1289 return ip_ext;
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 }