annotate src/protocols/rendezvous/direct.c @ 10372:618a330c0260

[gaim-migrate @ 11595] (17:31:55) SimGuy: LSchiere2: because the person that redid it didn't think to move the CPWs since they only have one field (17:32:05) SimGuy: the others are all multiple pieces of data (17:32:07) LSchiere2: its confusing and inconsistent now (17:48:00) SimGuy: LSchiere2: http://kevin.simguy.net:8888/patches/gaim-cpw-structify.diff (17:48:03) SimGuy: that should apply to both (17:48:16) SimGuy: the patch to util.c just fixes a spelling error in a comment I fixed like 6 weeks ago (17:48:59) SimGuy: er, both being HEAD and oldstatus committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Tue, 14 Dec 2004 22:50:54 +0000
parents 782c1b564906
children 8bc7ba019e96
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
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
30 /*
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 */
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
54
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
55 static gboolean rendezvous_find_buddy_by_ip(gpointer key, gpointer value, gpointer user_data)
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
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
59 printf("looking at ip=%s\n", rb->ip);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
60 if ((rb->ip != NULL) && !strcasecmp(rb->ip, user_data))
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
61 return TRUE;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
62
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
63 return FALSE;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
64 }
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
65
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
66 void rendezvous_direct_acceptconnection(gpointer data, gint source, GaimInputCondition condition)
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 GaimConnection *gc = (GaimConnection *)data;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
69 RendezvousData *rd = gc->proto_data;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
70 int fd;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
71 struct sockaddr_in6 addr;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
72 socklen_t addrlen = sizeof(addr);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
73 gchar *ip;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
74 RendezvousBuddy *rb;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
75
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
76 fd = accept(rd->listener, (struct sockaddr *)&addr, &addrlen);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
77 if (fd == -1) {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
78 gaim_debug_warning("rendezvous", "accept: %s\n", strerror(errno));
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
79 return;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
80 }
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
81 /*
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
82 printf("\nsa_family=%d\n\n", ((struct sockaddr *)&addr)->sa_family);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
83 if (((struct sockaddr *)&addr)->sa_family == AF_INET)
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
84 ip = gaim_network_convert_ipv4_to_string((unsigned char *)&ip);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
85 else if (((struct sockaddr *)&addr)->sa_family == AF_INET6)
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
86 ip = gaim_network_convert_ipv6_to_string((unsigned char *)&(addr.sin6_addr));
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
87 printf("\nip=%s\n", ip);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
88
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
89 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
90 g_free(ip);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
91 */
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
92 if (rb == NULL) {
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
93 /* 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
94 printf("\ndid not find rb\n\n");
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
95 close(fd);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
96 return;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
97 }
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
98 printf("\nip belongs to=%s\n\n", rb->aim);
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
99
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
100 rb->fd = fd;
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
101
782c1b564906 [gaim-migrate @ 11528]
Mark Doliner <mark@kingant.net>
parents:
diff changeset
102 }