#include <newudp.h>
#ifdef CDLIB
#include <std.h>
#endif
/* Mud / Admin email address. */
#define EMAIL    "ddt@ucc.gu.uwa.edu.au"
void udp_query(mapping data) {
    mapping ret;
    switch(data[DATA]) {
    case "commands":
        ret = INETD->query("hosts");
        if (ret[lower_case(data[NAME])])
        ret = ([
        DATA: implode(ret[lower_case(data[NAME])][LOCAL_COMMANDS], ":")
        ]);
        else
        ret = ([ DATA: implode(INETD->query("commands"), ":") ]);
        break;
    case "email":
        ret = ([ DATA: EMAIL ]);
        break;
    case "hosts":
    {
        mapping hosts;
        string *list;
        string tmp;
        int i;
        tmp = "";
        for(i = sizeof(list = keys(hosts = INETD->query("hosts")));
        i--; ) {
        tmp +=
        hosts[list[i]][HOST_NAME] + ":" +
        hosts[list[i]][HOST_IP] + ":" +
        hosts[list[i]][HOST_UDP_PORT] + ":" +
        implode(hosts[list[i]][LOCAL_COMMANDS], ",") + ":" +
        implode(hosts[list[i]][HOST_COMMANDS], ",") + ":" +
        hosts[list[i]][HOST_STATUS];
        if (i)
            tmp += "\n";
        }
        ret = ([ DATA: tmp ]);
        break;
    }
    case "inetd":
        ret = ([ DATA: INETD_VERSION ]);
        break;
    case "list":
        /* List of things that can be queried. */
        ret = ([ DATA: "commands:email:hosts:inetd:mud_port:time:version" ]);
        break;
    case "mud_port":
#ifdef CDLIB
        ret = ([ DATA: SECURITY->do_debug("mud_port") ]);
#else
        ret = ([ DATA: __PORT__ ]);
#endif
        break;
    case "time":
        ret = ([ DATA: ctime(time()) ]);
        break;
    case "version":
#ifdef CDLIB
        ret = ([ DATA: SECURITY->do_debug("version")+":"+MUDLIB_VERSION]);
#else
        ret = ([ DATA: __VERSION__+": flame lib v 1.0" ]);
#endif
        break;
    default:
        /* Just ignore it for the time being. */
        return;
    }
    INETD->send_udp(data[NAME], ret + ([
    REQUEST: REPLY,
    RECIPIENT: data[SENDER],
    ID: data[ID],
    QUERY: data[DATA]
    ]) );
}