annotate src/protocols/rendezvous/direct.c @ 10596:913ec44675c3

[gaim-migrate @ 12011] Get some rendezvous stuff out of my tree. No, you still can't get or send IMs. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Mon, 14 Feb 2005 03:08:43 +0000
parents 8bc7ba019e96
children 430b2a8cccb5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
1 /*
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
2 * gaim - Rendezvous Protocol Plugin
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
3 *
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
4 * Gaim is the legal property of its developers, whose names are too numerous
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
6 * source distribution.
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
7 *
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
11 * (at your option) any later version.
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
12 *
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
16 * GNU General Public License for more details.
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
17 *
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
21 */
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
22 #include "internal.h"
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
23
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
24 #include "connection.h"
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
25 #include "network.h"
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
26
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
27 #include "direct.h"
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
28 #include "rendezvous.h"
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
29
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
30 static gboolean
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
31 rendezvous_find_buddy_by_ipv4(gpointer key, gpointer value, gpointer user_data)
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
32 {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
33 RendezvousBuddy *rb = value;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
34
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
35 if (rb->ipv4 == NULL)
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
36 return FALSE;
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
37
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
38 int *ipv4 = user_data;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
39 printf("looking for ip=%hu.%hu.%hu.%hu\n", ipv4[0], ipv4[1], ipv4[2], ipv4[3]);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
40 printf("looking at ip=%hu.%hu.%hu.%hu, %s\n", rb->ipv4[0], rb->ipv4[1], rb->ipv4[2], rb->ipv4[3], rb->firstandlast);
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
41 return !memcmp(rb->ipv4, user_data, 4);
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
42 }
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
43
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
44 static gboolean
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
45 rendezvous_find_buddy_by_ipv6(gpointer key, gpointer value, gpointer user_data)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
46 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
47 RendezvousBuddy *rb = value;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
48
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
49 if (rb->ipv6 == NULL)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
50 return FALSE;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
51
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
52 int *ipv6 = user_data;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
53 printf("looking for ip=%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx\n", ipv6[0], ipv6[1], ipv6[2], ipv6[3], ipv6[4], ipv6[5], ipv6[6], ipv6[7], ipv6[8], ipv6[9], ipv6[10], ipv6[11], ipv6[12], ipv6[13], ipv6[14], ipv6[15]);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
54 printf("looking at ip=%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx:%hx%hx, %s\n", rb->ipv6[0], rb->ipv6[1], rb->ipv6[2], rb->ipv6[3], rb->ipv6[4], rb->ipv6[5], rb->ipv6[6], rb->ipv6[7], rb->ipv6[8], rb->ipv6[9], rb->ipv6[10], rb->ipv6[11], rb->ipv6[12], rb->ipv6[13], rb->ipv6[14], rb->ipv6[15], rb->firstandlast);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
55 return !memcmp(rb->ipv6, user_data, 16);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
56 }
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
57
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
58 void
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
59 rendezvous_direct_acceptconnection(gpointer data, gint source, GaimInputCondition condition)
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
60 {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
61 GaimConnection *gc = (GaimConnection *)data;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
62 RendezvousData *rd = gc->proto_data;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
63 int fd;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
64 struct sockaddr_in6 addr;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
65 socklen_t addrlen = sizeof(addr);
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
66 RendezvousBuddy *rb = NULL;
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
67
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
68 fd = accept(rd->listener, (struct sockaddr *)&addr, &addrlen);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
69 if (fd == -1) {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
70 gaim_debug_warning("rendezvous", "accept: %s\n", strerror(errno));
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
71 return;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
72 }
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
73
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
74 if (((struct sockaddr *)&addr)->sa_family == AF_INET)
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
75 rb = g_hash_table_find(rd->buddies, rendezvous_find_buddy_by_ipv4, &(((struct sockaddr_in *)&addr)->sin_addr));
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
76 else if (((struct sockaddr *)&addr)->sa_family == AF_INET6)
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
77 rb = g_hash_table_find(rd->buddies, rendezvous_find_buddy_by_ipv6, &(addr.sin6_addr.s6_addr));
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
78
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
79 if (rb == NULL) {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
80 /* We don't want to talk to people that don't advertise themselves */
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
81 printf("\ndid not find rb\n\n");
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
82 close(fd);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
83 return;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
84 }
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
85 printf("\nip belongs to=%s\n\n", rb->aim);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
86
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
87 rb->fd = fd;
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
88
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
89 /* TODO: Add a watcher on the connection. */
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
90 }
10596
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
91
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
92 static void
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
93 rendezvous_direct_connect(RendezvousBuddy *rb)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
94 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
95 struct sockaddr_in addr;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
96
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
97 /* If we already have a connection then do nothing */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
98 if (rb->fd != -1)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
99 return;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
100
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
101 if ((rb->ipv4 == NULL) && (rb->ipv6 == NULL))
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
102 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
103 gaim_debug_warning("rendezvous", "Could not connect: Unknown IP address.\n");
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
104 /* TODO: Show an error message to the user. */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
105 return;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
106 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
107
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
108 if ((rb->fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
109 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
110 gaim_debug_warning("rendezvous", "Could not connect: %s.\n", strerror(errno));
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
111 /* TODO: Show an error message to the user. */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
112 return;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
113 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
114
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
115 addr.sin_family = AF_INET;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
116 addr.sin_port = rb->p2pjport;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
117 memcpy(&addr.sin_addr, rb->ipv4, 4);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
118 memset(&addr.sin_zero, 0, 8);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
119
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
120 if (connect(rb->fd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) == -1)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
121 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
122 gaim_debug_warning("rendezvous", "Could not connect: %s.\n", strerror(errno));
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
123 /* TODO: Show an error message to the user. */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
124 return;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
125 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
126
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
127 /* TODO: Connect a watcher */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
128 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
129
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
130 static void
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
131 rendezvous_direct_write_message_to_socket(int fd, const char *message)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
132 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
133
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
134 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
135
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
136 /*
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
137 * TODO: Establish a direct connection, then send IM. Will need to
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
138 * queue the message somewhere, while the connection is established.
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
139 */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
140 void
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
141 rendezvous_direct_send_message(GaimConnection *gc, const char *who, const char *message)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
142 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
143 RendezvousData *rd = gc->proto_data;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
144 RendezvousBuddy *rb;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
145
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
146 rb = g_hash_table_lookup(rd->buddies, who);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
147 if (rb == NULL)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
148 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
149 /* TODO: Should print an error to the user, here */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
150 gaim_debug_error("rendezvous", "Could not send message to %s: Could not find user information.\n", who);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
151 return;
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
152 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
153
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
154 if (rb->fd == -1)
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
155 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
156 rendezvous_direct_connect(rb);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
157 /* TODO: Queue message */
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
158 //gaim_debug_warning("rendezvous", "Could not send message to %s: Unable to establish connection.\n", who);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
159 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
160 else
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
161 {
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
162 rendezvous_direct_write_message_to_socket(rb->fd, message);
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
163 }
913ec44675c3 [gaim-migrate @ 12011]
Mark Doliner <mark@kingant.net>
parents: 10549
diff changeset
164 }