/
LIB3/
LIB3/D/ADMIN/
LIB3/D/ADMIN/OBJ/
LIB3/D/ADMIN/ROOM/W/
LIB3/D/HOME/
LIB3/D/HOME/CITY/ARENA/
LIB3/D/HOME/CITY/ITEMS/
LIB3/D/HOME/CITY/POSTOFFI/
LIB3/DOC/
LIB3/GLOBAL/SPECIAL/
LIB3/GLOBAL/VIRTUAL/
LIB3/NET/
LIB3/NET/CONFIG/
LIB3/NET/DAEMON/CHARS/
LIB3/NET/GOPHER/
LIB3/NET/INHERIT/
LIB3/NET/OBJ/
LIB3/NET/SAVE/
LIB3/NET/VIRTUAL/
LIB3/OBJ/B_DAY/
LIB3/OBJ/HANDLERS/TERM_TYP/
LIB3/PLAYERS/B/
LIB3/PLAYERS/N/
LIB3/ROOM/
LIB3/SAVE/
LIB3/SAVE/BOARDS/
LIB3/SAVE/ENVIRON/
LIB3/SAVE/POST/
LIB3/STD/COMMANDS/SHADOWS/
LIB3/STD/CREATOR/
LIB3/STD/DOM/
LIB3/STD/EFFECTS/
LIB3/STD/EFFECTS/HEALING/
LIB3/STD/EFFECTS/OTHER/
LIB3/STD/EFFECTS/POISONS/
LIB3/STD/ENVIRON/
LIB3/STD/GUILDS/
LIB3/STD/LIQUIDS/
LIB3/STD/ROOM/
LIB3/STD/TRIGGER/SHADOW/
LIB3/W/
LIB3/W/BANNOR/
LIB3/W/NEWSTYLE/
#include "udp.h"
/*
 * Incoming mudlist query.  They want to know which muds we know.
 * We will only tell them about the CD ones we know and not the
 * mudos ones...
 */

string *build_mudlist( mapping muds )
{
    string *names, *ret;
    int     i, pos;

    names = keys( muds );
    ret = ({ "" });
    for( i = 0; i < sizeof( names ); i++ )
    {
	if( !mapp( muds[ names[ i ] ] ) )
	    continue;
	ret[ pos ] += "||" + i + ":" +
	    "|NAME:" + names[ i ] +
	    "|HOST:" + muds[ names[ i ] ][ "HOST" ] +
	    "|HOSTADDRESS:" + muds[ names[ i ] ][ "HOSTADDRESS" ] +
	    "|PORT:" + muds[ names[ i ] ][ "PORT" ] +
	    "|PORTUDP:" + muds[ names[ i ] ][ "PORTUDP" ];
	if( strlen( ret[ pos ] ) > 256 )
	{
	    ret += ({ "" });
	    pos++;
	}
    }
    return ret;
}				/* build_mudlist() */

void    send_mudlist_q( string host, string port )
{
    NAMESERVER_CD->send_udp( host, port, "@@@" + UDP_MUDLIST_Q +
			     "||NAME:" + MUD_NAME +
			     "||PORTUDP:" + NAMESERVER_CD->query_my_port() +
			     "@@@\n" );
}				/* send_mudlist_q() */

void    incoming_request( mapping info )
{
    int     i;
    string *bits;

    if( info[ "PORTUDP" ] )
    {
	bits = build_mudlist( (mapping)NAMESERVER_CD->query_known_muds() );
	for( i = 0; i < sizeof( bits ); i++ )
	    NAMESERVER_CD->send_udp( info[ "HOSTADDRESS" ], info[ "PORTUDP" ],
				     "@@@" + UDP_MUDLIST_A +
				     bits[ i ] +
				     "@@@\n" );
    }
}				/* incoming_request() */

void    create()
{
    seteuid( getuid() );
}				/* create() */