/
lib/banish/
lib/d/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/doc/examples/
lib/doc/examples/armour/
lib/doc/examples/contain/
lib/doc/examples/food/
lib/doc/examples/magic/
lib/doc/examples/monster/
lib/doc/examples/room/
lib/doc/examples/weapons/
lib/function/
lib/include/
lib/include/fn_specs/
lib/include/skills/
lib/info/
lib/inherit/base/
lib/log/
lib/manuals/312/
lib/news/
lib/obj/party/
lib/objects/components/
lib/open/
lib/open/library/
lib/open/party/
lib/players/
lib/players/zilanthius/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/obj/
lib/room/city/shop/
lib/room/death/
lib/room/registry/
lib/secure/
lib/secure/UDP_CMD_DIR/
lib/skills/
lib/skills/fighter/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/players/
#include <udp.h>

#ifdef ZEBEDEE
#include <defs.h>
#elif !defined(DATE)
#define DATE	ctime(time())[4..15]
#endif

void udp_reply(mapping data) {
    if (data[RECIPIENT]) {
	object ob;
	string err;

	/* If recipient is a player name, pass the message to them. */
	if (ob = find_player(data[RECIPIENT])) {
	    tell_object(ob, "\n" + data[DATA]);
	    return;
	}
	// Otherwise send it to udp_reply() in the recipient.
	// Note: We must send a copy as it may be changed by the recipient.
	//       We must never alter the mapping passed to us by the inetd.
	if (err = catch(data[RECIPIENT]->udp_reply(copy_mapping(data))))
	    log_file(LOG_FILE, DATE + ": Error in file: " +
	    data[RECIPIENT] + "\n" + err + "\n");
	return;
    }
    switch(data[REQUEST]) {
	case "ping":
	    /* Ignore system ping replies. */
	    return;
	default:
	    /* Log replies to the system. (ie. No RECIPIENT) */
	    if (data[DATA])
		log_file(LOG_FILE, DATE + ": Reply from " + data[NAME] +
		"\n" + data[DATA] + "\n");
	    return;
    }
}