# HG changeset patch # User Mark Doliner # Date 1083122200 0 # Node ID 51845538653864d6107074d5bde8e8be7e6a3092 # Parent 25206a0fb4e4cc81f09f8f882c48d8d731f60f36 [gaim-migrate @ 9604] -Fix the compile error in perl that was my fault -Rename a network.c function and change it's signature (is that work applicable in c?) -Make rendezvous crash when trying to sign on committer: Tailor Script diff -r 25206a0fb4e4 -r 518455386538 plugins/perl/common/Account.xs --- a/plugins/perl/common/Account.xs Wed Apr 28 03:10:31 2004 +0000 +++ b/plugins/perl/common/Account.xs Wed Apr 28 03:16:40 2004 +0000 @@ -60,11 +60,6 @@ const char *ui gboolean value -void -gaim_account_set_public_ip(account, ip) - Gaim::Account account - const char *ip - gboolean gaim_account_is_connected(account) Gaim::Account account @@ -110,10 +105,6 @@ Gaim::Account account const char *ui -const char * -gaim_account_get_public_ip(account) - Gaim::Account account - MODULE = Gaim::Account PACKAGE = Gaim::Accounts PREFIX = gaim_accounts_ diff -r 25206a0fb4e4 -r 518455386538 src/network.c --- a/src/network.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/network.c Wed Apr 28 03:16:40 2004 +0000 @@ -30,11 +30,35 @@ #include "network.h" #include "prefs.h" +const unsigned char * +gaim_network_ip_atoi(const char *ip) +{ + static unsigned char ret[4]; + gchar delimiter = '.'; + gchar **split; + int i; + + g_return_val_if_fail(ip != NULL, NULL); + + split = g_strsplit(ip, &delimiter, 4); + for (i = 0; split[i] != NULL; i++) + ret[i] = atoi(split[i]); + g_strfreev(split); + + /* i should always be 4 */ + if (i != 4) + return NULL; + + return ret; +} + void gaim_network_set_public_ip(const char *ip) { g_return_if_fail(ip != NULL); + /* XXX - Ensure the IP address is valid */ + gaim_prefs_set_string("/core/network/public_ip", ip); } @@ -69,6 +93,7 @@ tmp = inet_ntoa(addr.sin_addr); strncpy(ip, tmp, sizeof(ip)); + return ip; } @@ -106,7 +131,7 @@ } const char * -gaim_network_get_ip_for_account(const GaimAccount *account, int fd) +gaim_network_get_my_ip(int fd) { const char *ip = NULL; diff -r 25206a0fb4e4 -r 518455386538 src/network.h --- a/src/network.h Wed Apr 28 03:10:31 2004 +0000 +++ b/src/network.h Wed Apr 28 03:16:40 2004 +0000 @@ -35,6 +35,20 @@ /*@{*/ /** + * Converts a dot-decimal IP address to an array of unsigned + * chars. For example, converts 192.168.0.1 to a 4 byte + * array containing 192, 168, 0 and 1. + * + * @param ip An IP address in dot-decimal notiation. + * @return An array of 4 bytes containing an IP addresses + * equivalent to the given parameter, or NULL if + * the given IP address is invalid. This value + * is statically allocated and should not be + * freed. + */ +const unsigned char *gaim_network_ip_atoi(const char *ip); + +/** * Sets the IP address of the local system in preferences. This * is the IP address that should be used for incoming connections * (file transfer, direct IM, etc.) and should therefore be @@ -48,7 +62,7 @@ * Returns the IP address of the local system set in preferences. * * This returns the value set via gaim_network_set_public_ip(). - * You probably want to use gaim_network_get_ip_for_account() instead. + * You probably want to use gaim_network_get_my_ip() instead. * * @return The local IP address set in preferences. */ @@ -57,7 +71,7 @@ /** * Returns the IP address of the local system. * - * You probably want to use gaim_network_get_ip_for_account() instead. + * You probably want to use gaim_network_get_my_ip() instead. * * @note The returned string is a pointer to a static buffer. If this * function is called twice, it may be important to make a copy @@ -87,7 +101,7 @@ * @param fd The fd to use to help figure out the IP, or -1. * @return The local IP address to be used. */ -const char *gaim_network_get_ip_for_account(const GaimAccount *account, int fd); +const char *gaim_network_get_my_ip(int fd); /** * Attempts to open a listening port ONLY on the specified port number. diff -r 25206a0fb4e4 -r 518455386538 src/protocols/irc/dcc_send.c --- a/src/protocols/irc/dcc_send.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/irc/dcc_send.c Wed Apr 28 03:16:40 2004 +0000 @@ -285,7 +285,7 @@ /* Send the intended recipient the DCC request */ arg[0] = xfer->who; - inet_aton(gaim_network_get_ip_for_account(gaim_xfer_get_account(xfer), irc->fd), &addr); + inet_aton(gaim_network_get_my_ip(irc->fd), &addr); arg[1] = tmp = g_strdup_printf("\001DCC SEND \"%s\" %u %hu %u\001", xfer->filename, ntohl(addr.s_addr), port, xfer->size); diff -r 25206a0fb4e4 -r 518455386538 src/protocols/jabber/si.c --- a/src/protocols/jabber/si.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/jabber/si.c Wed Apr 28 03:16:40 2004 +0000 @@ -281,7 +281,7 @@ return; } - host = gaim_network_get_ip_for_account(jsx->js->gc->account, jsx->js->fd); + host = gaim_network_get_my_ip(jsx->js->fd); buffer[0] = 0x05; buffer[1] = 0x00; @@ -429,7 +429,7 @@ return; } - xmlnode_set_attrib(streamhost, "host", gaim_network_get_ip_for_account(jsx->js->gc->account, jsx->js->fd)); + xmlnode_set_attrib(streamhost, "host", gaim_network_get_my_ip(jsx->js->fd)); xfer->local_port = gaim_network_get_port_from_fd(fd); port = g_strdup_printf("%hu", xfer->local_port); xmlnode_set_attrib(streamhost, "port", port); diff -r 25206a0fb4e4 -r 518455386538 src/protocols/novell/novell.c --- a/src/protocols/novell/novell.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/novell/novell.c Wed Apr 28 03:16:40 2004 +0000 @@ -1148,7 +1148,7 @@ gaim_connection_update_progress(gc, _("Authenticating..."), 2, NOVELL_CONNECT_STEPS); - my_addr = gaim_network_get_ip_for_account(user->client_data, gsc->fd); + my_addr = gaim_network_get_my_ip(gsc->fd); pwd = gaim_account_get_password(user->client_data); ua = _user_agent_string(); diff -r 25206a0fb4e4 -r 518455386538 src/protocols/oscar/im.c --- a/src/protocols/oscar/im.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/oscar/im.c Wed Apr 28 03:16:40 2004 +0000 @@ -779,6 +779,7 @@ /* aim_tlvlist_add_raw(&subtl, 0x000e, 2, "en"); aim_tlvlist_add_raw(&subtl, 0x000d, 8, "us-ascii"); aim_tlvlist_add_raw(&subtl, 0x000c, 24, "Please accept this file."); */ + /* XXX - Change oft_info->clientip to an array of 4 bytes */ if (oft_info->clientip) { fu8_t ip[4]; char *nexttoken; diff -r 25206a0fb4e4 -r 518455386538 src/protocols/oscar/oscar.c --- a/src/protocols/oscar/oscar.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/oscar/oscar.c Wed Apr 28 03:16:40 2004 +0000 @@ -1277,7 +1277,6 @@ static void oscar_ask_sendfile(GaimConnection *gc, const char *destsn) { OscarData *od = (OscarData *)gc->proto_data; - GaimAccount *account = gaim_connection_get_account(gc); GaimXfer *xfer; struct aim_oft_info *oft_info; const char *ip; @@ -1288,7 +1287,7 @@ xfer = gaim_xfer_new(gaim_connection_get_account(gc), GAIM_XFER_SEND, destsn); /* Create the oscar-specific data */ - ip = gaim_network_get_ip_for_account(account, od->conn ? od->conn->fd : -1); + ip = gaim_network_get_my_ip(od->conn ? od->conn->fd : -1); oft_info = aim_oft_createinfo(od->sess, NULL, destsn, ip, 0, 0, 0, NULL); xfer->data = oft_info; diff -r 25206a0fb4e4 -r 518455386538 src/protocols/rendezvous/mdns.c --- a/src/protocols/rendezvous/mdns.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/rendezvous/mdns.c Wed Apr 28 03:16:40 2004 +0000 @@ -772,16 +772,16 @@ } int -mdns_advertise_a(int fd, const char *name, unsigned char *ip) +mdns_advertise_a(int fd, const char *name, const unsigned char *ip) { int ret; ResourceRecord *rr; ResourceRecordRDataA *rdata; int i; - if ((name == NULL) || (strlen(name) > 255)) { - return -EINVAL; - } + g_return_val_if_fail(name != NULL, -EINVAL); + g_return_val_if_fail(strlen(name) <= 255, -EINVAL); + g_return_val_if_fail(ip != NULL, -EINVAL); rdata = g_malloc(4); for (i = 0; i < 4; i++) @@ -878,7 +878,7 @@ } int -mdns_advertise_aaaa(int fd, const char *name, unsigned char *ip) +mdns_advertise_aaaa(int fd, const char *name, const unsigned char *ip) { int ret; ResourceRecord *rr; diff -r 25206a0fb4e4 -r 518455386538 src/protocols/rendezvous/mdns.h --- a/src/protocols/rendezvous/mdns.h Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/rendezvous/mdns.h Wed Apr 28 03:16:40 2004 +0000 @@ -166,11 +166,11 @@ int mdns_query(int fd, const char *domain, unsigned short type); int mdns_send_rr(int fd, ResourceRecord *rr); -int mdns_advertise_a(int fd, const char *name, unsigned char *ip); +int mdns_advertise_a(int fd, const char *name, const unsigned char *ip); int mdns_advertise_null(int fd, const char *name, const char *data, unsigned short rdlength); int mdns_advertise_ptr(int fd, const char *name, const char *domain); int mdns_advertise_txt(int fd, const char *name, const GSList *txt); -int mdns_advertise_aaaa(int fd, const char *name, unsigned char *ip); +int mdns_advertise_aaaa(int fd, const char *name, const unsigned char *ip); int mdns_advertise_srv(int fd, const char *name, unsigned short port, const char *target); /** diff -r 25206a0fb4e4 -r 518455386538 src/protocols/rendezvous/rendezvous.c --- a/src/protocols/rendezvous/rendezvous.c Wed Apr 28 03:10:31 2004 +0000 +++ b/src/protocols/rendezvous/rendezvous.c Wed Apr 28 03:16:40 2004 +0000 @@ -481,34 +481,18 @@ g_free(rdata); } -static int *rendezvous_get_ip_as_int_array(int fd) -{ - static int ret[4]; - const char *ip, *nexttoken; - int i = 0; - - ip = gaim_network_get_local_system_ip(fd); - nexttoken = strtok((char *)ip, "."); - while (nexttoken && i < 4) { - ret[i] = atoi(nexttoken); - nexttoken = strtok(NULL, "."); - } - - return ret; -} - static void rendezvous_send_online(GaimConnection *gc) { RendezvousData *rd = gc->proto_data; GaimAccount *account = gaim_connection_get_account(gc); const gchar *me; gchar *myname, *mycomp; - unsigned char *myip; + const unsigned char *myip; me = gaim_account_get_username(account); myname = g_strdup_printf("%s._presence._tcp.local", me); mycomp = g_strdup_printf("%s.local", strchr(me, '@') + 1); - myip = rendezvous_get_ip_as_int_array(rd->fd); + myip = gaim_network_ip_atoi(gaim_network_get_local_system_ip(rd->fd)); mdns_advertise_a(rd->fd, mycomp, myip); mdns_advertise_ptr(rd->fd, "_presence._tcp.local", myname);