Mercurial > pidgin
view src/protocols/rendezvous/direct.c @ 10321:782c1b564906
[gaim-migrate @ 11528]
Some rendezvous changes I've had sitting around for a while.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 05 Dec 2004 21:25:44 +0000 |
parents | |
children | 8bc7ba019e96 |
line wrap: on
line source
/* * gaim - Rendezvous Protocol Plugin * * Gaim is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "internal.h" #include "connection.h" #include "network.h" #include "direct.h" #include "rendezvous.h" /* gchar * gaim_network_convert_ipv4_to_string(void *ip) { gchar *ret; unsigned char *ipv4 = (unsigned char *)ip; ret = g_strdup_printf("::ffff:%02hhx%02hhx:%02hhx%02hhx", ipv4[0], ipv4[1], ipv4[2], ipv4[3]); return ret; } gchar * gaim_network_convert_ipv6_to_string(void *ip) { gchar *ret; //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]); ret = g_malloc0(INET6_ADDRSTRLEN + 1); inet_ntop(AF_INET6, ip, ret, sizeof(ret)); return ret; } */ static gboolean rendezvous_find_buddy_by_ip(gpointer key, gpointer value, gpointer user_data) { RendezvousBuddy *rb = value; printf("looking at ip=%s\n", rb->ip); if ((rb->ip != NULL) && !strcasecmp(rb->ip, user_data)) return TRUE; return FALSE; } void rendezvous_direct_acceptconnection(gpointer data, gint source, GaimInputCondition condition) { GaimConnection *gc = (GaimConnection *)data; RendezvousData *rd = gc->proto_data; int fd; struct sockaddr_in6 addr; socklen_t addrlen = sizeof(addr); gchar *ip; RendezvousBuddy *rb; fd = accept(rd->listener, (struct sockaddr *)&addr, &addrlen); if (fd == -1) { gaim_debug_warning("rendezvous", "accept: %s\n", strerror(errno)); return; } /* printf("\nsa_family=%d\n\n", ((struct sockaddr *)&addr)->sa_family); if (((struct sockaddr *)&addr)->sa_family == AF_INET) ip = gaim_network_convert_ipv4_to_string((unsigned char *)&ip); else if (((struct sockaddr *)&addr)->sa_family == AF_INET6) ip = gaim_network_convert_ipv6_to_string((unsigned char *)&(addr.sin6_addr)); printf("\nip=%s\n", ip); rb = g_hash_table_find(rd->buddies, rendezvous_find_buddy_by_ip, ip); g_free(ip); */ if (rb == NULL) { /* We don't want to talk to people that don't advertise themselves */ printf("\ndid not find rb\n\n"); close(fd); return; } printf("\nip belongs to=%s\n\n", rb->aim); rb->fd = fd; }