blob: f9bc7cd324686a852d3fd043a8abd81d8fb024f7 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// query.c
4//
5// $Id: query.c 7397 2010-01-26 21:48:11Z Zesstra $
6
7#include <udp.h>
8#include <udp_language.h>
9#include <strings.h>
10
11#ifdef ZEBEDEE
12#include <system.h>
13#elif !defined(INETD)
14#define INETD "/secure/inetd"
15#endif
16
17/* Mud / Admin email address. */
18#define EMAIL "mud@mg.mud.de"
19
20void udp_query(mapping data) {
21 mapping ret;
22
23 switch(data[DATA]) {
24 case "commands":
25 ret = INETD->query("hosts");
26 if (ret[lower_case(data[NAME])])
27 ret = ([
28 DATA: implode(ret[lower_case(data[NAME])][LOCAL_COMMANDS], ":")
29 ]);
30 else
31 ret = ([ DATA: implode(INETD->query("commands"), ":") ]);
32 break;
33 case "email":
34 ret = ([ DATA: EMAIL ]);
35 break;
36 case "hosts":
37 {
38 string tmp = "";
39 foreach(string mudname, mixed fields: INETD->query("hosts")) {
40 tmp += fields[HOST_NAME] + ":" +
41 fields[HOST_IP] + ":" +
42 fields[HOST_UDP_PORT] + ":" +
43 implode(fields[LOCAL_COMMANDS], ",") + ":" +
44 implode(fields[HOST_COMMANDS], ",") + "\n";
45 }
46 ret = ([ DATA: trim(tmp,TRIM_RIGHT, "\n") ]);
47 break;
48 }
49 case "inetd":
50 ret = ([ DATA: INETD_VERSION ]);
51 break;
52 case "list":
53 /* List of thingsthat can be queried. */
54 ret = ([ DATA: "commands:email:hosts:inetd:mud_port:time:version" ]);
55 break;
56 case "mud_port":
57 ret = ([ DATA: query_mud_port() ]);
58 break;
59 case "time":
60 ret = ([ DATA: time() ]);
61 break;
62 case "version":
63 ret = ([ DATA: version() ]);
64 break;
65 default:
66 /* Just ignore it for the time being. */
67 return;
68 }
69 INETD->_send_udp(data[NAME], ret + ([
70 REQUEST: REPLY,
71 RECIPIENT: data[SENDER],
72 ID: data[ID],
73 "QUERY": data[DATA]
74 ]) );
75}
76
77string send_request(string mudname, string prop)
78{
79 if (!stringp(mudname) || !stringp(prop))
80 return 0;
81
82 return (INETD->_send_udp(mudname,
83 ([REQUEST: "query",
84 DATA: prop,
85 SENDER: getuid(previous_object())]),1)||
86 sprintf(INETD_QUERY_REQUESTED, prop, mudname));
87}
88