diff --git a/src/modules/spider/dumudp.c b/src/modules/spider/dumudp.c index 2ad8de0e64f5c9e99612a3d754f8cddfcca8db86..fde65a8e8056cfe57fdfca840893d9768463dc9a 100644 --- a/src/modules/spider/dumudp.c +++ b/src/modules/spider/dumudp.c @@ -1,7 +1,7 @@ #include <config.h> #include "global.h" -RCSID("$Id: dumudp.c,v 1.20 1997/09/16 00:35:39 hubbe Exp $"); +RCSID("$Id: dumudp.c,v 1.21 1997/09/29 21:09:41 marcus Exp $"); #include "interpret.h" #include "svalue.h" #include "stralloc.h" @@ -333,6 +333,33 @@ static void udp_set_blocking(INT32 args) set_nonblocking(FD,0); } +static void udp_query_address(INT32 args) +{ + struct sockaddr_in addr; + int i,len; + char buffer[496],*q; + + if(THIS->fd <0) + error("socket->query_address(): Port not bound yet.\n"); + + len=sizeof(addr); + i=getsockname(THIS->fd,(struct sockaddr *)&addr,&len); + pop_n_elems(args); + if(i < 0 || len < (int)sizeof(addr)) + { + push_int(0); + return; + } + + q=inet_ntoa(addr.sin_addr); + strncpy(buffer,q,sizeof(buffer)-20); + buffer[sizeof(buffer)-20]=0; + sprintf(buffer+strlen(buffer)," %d",(int)(ntohs(addr.sin_port))); + + push_string(make_shared_string(buffer)); +} + + void init_udp(void) { start_new_program(); @@ -346,6 +373,7 @@ void init_udp(void) add_function( "set_read_callback", udp_set_read_callback, "function(function(void:void):void)", 0 ); add_function( "set_blocking", udp_set_blocking,"function(void:void)", 0 ); + add_function("query_address",udp_query_address,"function(:string)",0); set_init_callback(zero_udp); set_exit_callback(exit_udp); end_class("dumUDP",0);