#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() */