#include "udp.h" #include "board.h" void send_message( mapping info ); /* * Intermud buliten boards.... */ int call_in_progress; mapping getting_board; void create() { getting_board = ([ ]); seteuid( getuid() ); } /* create() */ void incoming_message( mapping info ) { mapping minfo; int i; string key; if( !info[ "NAME" ] || !info[ "PORTUDP" ] ) return; minfo = NAMESERVER_CD->query_mud_info( info[ "NAME" ] ); if( minfo[ "HOSTADDRESS" ] != info[ "HOSTADDRESS" ] ) { /* Forged. */ return; } key = info[ "WIZNAME" ] + "@" + info[ "NAME" ]; if( !getting_board[ key ] ) { getting_board[ key ] = info; getting_board[ key ][ "TIME" ] = time(); if( !call_in_progress ) call_out( "time_out", 5 * 60 ); call_in_progress = 1; } else getting_board[ key ][ "NOTE" ] += info[ "NOTE" ]; if( info[ "ENDHEADER" ] ) { if( info[ "ENDHEADER" ] == getting_board[ key ][ "HEADER" ] ) send_message( getting_board[ key ] ); map_delete( getting_board, key ); } } /* incoming_request() */ void time_out() { int i; string *the_keys; the_keys = keys( getting_board ); for( i = 0; i < sizeof( the_keys ); i++ ) if( getting_board[ the_keys[ i ] ][ "TIME" ] + 5 * 60 < time() ) map_delete( getting_board, the_keys[ i ] ); if( sizeof( getting_board ) ) call_out( "time_out", 5 * 60 ); else call_in_progress = 0; } /* time_out() */ /* * This will add the message onto the correct board. */ void send_message( mapping info ) { if( !info[ "BOARD" ] ) info[ "BOARD" ] = "intermud"; BOARD_HAND->add_message( info[ "BOARD" ], info[ "WIZNAME" ] + "@" + info[ "NAME" ], info[ "HEADER" ], info[ "NOTE" ] ); } /* send_message() */