annotate src/protocols/rendezvous/direct.c @ 10581:59a2807e10bb

[gaim-migrate @ 11981] I'm not sure when using --class broke (though it was probably when we added -c) but this fixes it for me and is arguable more correct anyway since according to the gtk docs gtk_init (and gtk_init_check) "will initialize everything needed to operate the toolkit and parses some standard command line options. argc and argv are adjusted accordingly so your own code will never see those standard arguments." committer: Tailor Script <tailor@pidgin.im>
author Etan Reisner <pidgin@unreliablesource.net>
date Tue, 08 Feb 2005 04:59:35 +0000
parents 8bc7ba019e96
children 913ec44675c3
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 #if 0
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
31 gchar *
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
32 gaim_network_convert_ipv4_to_string(void *ip)
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
33 {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
34 gchar *ret;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
35 unsigned char *ipv4 = (unsigned char *)ip;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
36
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
37 ret = g_strdup_printf("::ffff:%02hhx%02hhx:%02hhx%02hhx", ipv4[0], ipv4[1], ipv4[2], ipv4[3]);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
38
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
39 return ret;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
40 }
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
41
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
42 gchar *
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
43 gaim_network_convert_ipv6_to_string(void *ip)
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
44 {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
45 gchar *ret;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
46
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
47 //ret = g_strdup_printf("%02hhx%02hhx:%02hhx%02hhx:%02hhx%02hhx:%02hhx%02hhx:%02hhx%02hhx:%02hhx%02hhx:%02hhx%02hhx:%02hhx%02hhx", ip[0], ip[1], ip[2], ip[3], ip[4], ip[5], ip[6], ip[7], ip[8], ip[9], ip[10], ip[11], ip[12], ip[13], ip[14], ip[15]);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
48 ret = g_malloc0(INET6_ADDRSTRLEN + 1);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
49 inet_ntop(AF_INET6, ip, ret, sizeof(ret));
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
50
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
51 return ret;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
52 }
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
53
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
54 static gboolean
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
55 rendezvous_find_buddy_by_ip(gpointer key, gpointer value, gpointer user_data)
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
56 {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
57 RendezvousBuddy *rb = value;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
58
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
59 if (rb->ipv4 == NULL)
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
60 return FALSE;
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
61
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
62 printf("looking at ip=%hu.%hu.%hu.%hu\n", rb->ipv4[0], rb->ipv4[1], rb->ipv4[2], rb->ipv4[3]);
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
63 return !memcmp(rb->ipv4, user_data, 4);
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
64 }
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
65 #endif
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
66
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
67 void
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
68 rendezvous_direct_acceptconnection(gpointer data, gint source, GaimInputCondition condition)
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
69 {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
70 GaimConnection *gc = (GaimConnection *)data;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
71 RendezvousData *rd = gc->proto_data;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
72 int fd;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
73 struct sockaddr_in6 addr;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
74 socklen_t addrlen = sizeof(addr);
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
75 #if 0
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
76 gchar *ip;
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
77 #endif
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
78 RendezvousBuddy *rb;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
79
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
80 fd = accept(rd->listener, (struct sockaddr *)&addr, &addrlen);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
81 if (fd == -1) {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
82 gaim_debug_warning("rendezvous", "accept: %s\n", strerror(errno));
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 }
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
85
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
86 #if 0
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
87 printf("\nsa_family=%d\n\n", ((struct sockaddr *)&addr)->sa_family);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
88 if (((struct sockaddr *)&addr)->sa_family == AF_INET)
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
89 ip = gaim_network_convert_ipv4_to_string((unsigned char *)&ip);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
90 else if (((struct sockaddr *)&addr)->sa_family == AF_INET6)
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
91 ip = gaim_network_convert_ipv6_to_string((unsigned char *)&(addr.sin6_addr));
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
92 printf("\nip=%s\n", ip);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
93
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
94 rb = g_hash_table_find(rd->buddies, rendezvous_find_buddy_by_ip, ip);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
95 g_free(ip);
10549
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
96 #endif
8bc7ba019e96 [gaim-migrate @ 11919]
Mark Doliner <mark@kingant.net>
parents: 10321
diff changeset
97
10321
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
98 if (rb == NULL) {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
99 /* 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
100 printf("\ndid not find rb\n\n");
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
101 close(fd);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
102 return;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
103 }
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
104 printf("\nip belongs to=%s\n\n", rb->aim);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
105
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
106 rb->fd = fd;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
107 }