Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/secure/udp/query.c b/secure/udp/query.c
new file mode 100644
index 0000000..f9bc7cd
--- /dev/null
+++ b/secure/udp/query.c
@@ -0,0 +1,88 @@
+// MorgenGrauen MUDlib
+//
+// query.c
+//
+// $Id: query.c 7397 2010-01-26 21:48:11Z Zesstra $
+
+#include <udp.h>
+#include <udp_language.h>
+#include <strings.h>
+
+#ifdef ZEBEDEE
+#include <system.h>
+#elif !defined(INETD)
+#define INETD        "/secure/inetd"
+#endif
+
+/* Mud / Admin email address. */
+#define EMAIL        "mud@mg.mud.de"
+
+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":
+        {
+            string tmp = "";
+      foreach(string mudname, mixed fields: INETD->query("hosts")) {
+        tmp += fields[HOST_NAME] + ":" +
+             fields[HOST_IP] + ":" +
+             fields[HOST_UDP_PORT] + ":" +
+             implode(fields[LOCAL_COMMANDS], ",") + ":" +
+             implode(fields[HOST_COMMANDS], ",") + "\n";
+      }
+            ret = ([ DATA: trim(tmp,TRIM_RIGHT, "\n") ]);
+            break;
+        }
+        case "inetd":
+            ret = ([ DATA: INETD_VERSION ]);
+            break;
+        case "list":
+            /* List of thingsthat can be queried. */
+            ret = ([ DATA: "commands:email:hosts:inetd:mud_port:time:version" ]);
+            break;
+        case "mud_port":
+            ret = ([ DATA: query_mud_port() ]);
+            break;
+        case "time":
+            ret = ([ DATA: time() ]);
+            break;
+        case "version":
+            ret = ([ DATA: version() ]);
+            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]
+    ]) );
+}
+
+string send_request(string mudname, string prop)
+{
+  if (!stringp(mudname) || !stringp(prop))
+    return 0;
+  
+  return (INETD->_send_udp(mudname,
+                             ([REQUEST: "query",
+                               DATA: prop,
+                               SENDER: getuid(previous_object())]),1)||
+          sprintf(INETD_QUERY_REQUESTED, prop, mudname));
+}
+