Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/secure/udp/channel.c b/secure/udp/channel.c
new file mode 100644
index 0000000..3592ffe
--- /dev/null
+++ b/secure/udp/channel.c
@@ -0,0 +1,110 @@
+// MorgenGrauen MUDlib
+//
+// channel.c
+//
+// $Id: channel.c 9142 2015-02-04 22:17:29Z Zesstra $
+
+#include <udp.h>
+
+#include <properties.h>
+#include <daemon.h>
+
+#ifdef ZEBEDEE
+inherit "/sys/format";
+#endif
+
+#define COMMAND "cmd"
+#define CHANNEL "channel"
+
+private nosave mixed _name_;
+
+int filter_listeners(object ob, string channel) {
+ return ob->QueryProp(P_INTERMUD);
+}
+
+int udp_channel(mapping data) {
+ object *list;
+ string msg;
+ int i, type;
+
+ /* Compatability with older systems. */
+ if (!data[CHANNEL])
+ data[CHANNEL] = data["CHANNEL"];
+ if (!data[COMMAND])
+ data[COMMAND] = data["CMD"];
+ if (!data[DATA])
+ data[DATA]="";
+
+ if (!stringp(data[CHANNEL]) || !sizeof(data[CHANNEL])
+ || !stringp(data[DATA]) || !sizeof(data[DATA])
+ || !stringp(data[NAME]) || !sizeof(data[NAME])
+ || !stringp(data[SENDER]) || !sizeof(data[SENDER]))
+ return 0;
+
+ data[DATA]=
+ implode(filter(explode(data[DATA], ""), #'>=, " "), "");//'))
+ data[NAME]=
+ implode(filter(explode(data[NAME], ""), #'>=, " "), "");//'))
+ switch(data[COMMAND]) {
+ case "list":
+ /* Request for a list of people listening to a certain channel. */
+ list = filter(users(), "filter_listeners",
+ this_object(), data[CHANNEL]);
+ if (i = sizeof(list)) {
+ msg = "[" + capitalize(data[CHANNEL]) + "@" +
+ LOCAL_NAME + "] Listening:\n";
+ while(i--)
+ msg +=
+ " " + capitalize(list[i]->query_real_name()) + "\n";
+ }
+ else
+ msg = "[" + capitalize(data[CHANNEL]) + "@" + LOCAL_NAME
+ + "] Nobody Listening.\n";
+ INETD->_send_udp(data[NAME], ([
+ REQUEST: REPLY,
+ RECIPIENT: data[SENDER],
+ ID: data[ID],
+ DATA: msg
+ ]));
+ return 1;
+ case "emote": /* A channel emote. */
+ type = MSG_EMOTE;
+ break;
+ default: /* A regular channel message. */
+ type = MSG_SAY;
+ break;
+ }
+ _name_ = capitalize(data[SENDER])+"@"+capitalize(data[NAME]);
+ CHMASTER->send(capitalize(data[CHANNEL]), this_object(),
+ data[DATA], type);
+ _name_ = 0;
+ return 1;
+}
+
+string name() { return _name_ || "<Intermud>"; }
+string Name() {return capitalize(_name_ || "<Intermud>");}
+
+private void _send(string mud, mixed data, mapping request)
+{
+ if(member(data[HOST_COMMANDS], "channel") != -1 ||
+ member(data[HOST_COMMANDS], "*") != -1)
+ INETD->_send_udp(data[HOST_NAME], request);
+}
+
+void ChannelMessage(mixed m)
+{
+ mapping request;
+ if(m[1] == this_object()) return;
+ request = ([
+ REQUEST : "channel",
+ SENDER : m[1]->name() || capitalize(getuid(m[1])),
+ "CHANNEL": lower_case(m[0]),
+ DATA : implode(old_explode(m[2], "\n"), " ")]);
+ if(m[3] == MSG_GEMOTE || m[3] == MSG_EMOTE)
+ {
+ request["EMOTE"] = 1;
+ request["CMD"] = "emote";
+ }
+ walk_mapping(INETD->query("hosts") - ([lower_case(MUDNAME)]),
+ #'_send/*'*/, request);
+}