annotate src/protocols/rendezvous/direct.c @ 11016:6417b2f5de4e

[gaim-migrate @ 12885] Wherever possible, allow users to act on objects and data directly, rather than through dialogs or explicit commands. For example, it is more intuitive to drag a circle object around in a diagram rather than selecting a "Move" command from a menu while the circle is selected. Simlarly, in an email application, allow the user to attach files by dragging them from the file manager and dropping them onto the message composition window if they wish. -- GNOME HIG This allows direct manipulation of buddy aliases and group names, by moving the features from dialogs to GtkTreeView's inline editing. I think this is a great change, but it seems like the type of thing that might stir up controversy. If so, take it to the mailing list for discussion. If not, I'll go ahead and perfect this sometime later. -s. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Tue, 21 Jun 2005 04:40:34 +0000
parents 913ec44675c3
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 }