src/protocols/rendezvous/direct.c

Mon, 08 Aug 2005 02:28:23 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Mon, 08 Aug 2005 02:28:23 +0000
changeset 11203
b0710c7f7c32
parent 10596
5fe1670fec47
permissions
-rw-r--r--

[gaim-migrate @ 13331]
Remove a // comment in the rendezvous prpl that will eventually be removed
in favor of a Bonjour prpl

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

mercurial