#include "udp.h"
#include "term.h"
/*
* Someone has asked us for a remote who...
* Lets oblige them.
*/
mapping junk;
string fix_string(string str) {
int i;
string *bits;
string ret;
if (!junk) {
junk = TERM_HANDLER->set_term_type("dumb");
junk["RESET"] = "";
}
ret = "";
bits = explode(str, "%^");
for (i=0;i<sizeof(bits);i++)
if (stringp(junk[bits[i]]))
ret += junk[bits[i]];
else
ret += bits[i];
return ret;
} /* fix_string() */
void incoming_request(mapping info) {
string str;
int i;
object *cre, *play, *all;
if (stringp(info["NAME"]) && stringp(info["PORTUDP"])) {
if (info["NAME"] == mud_name())
return ;
if (!NAMESERVER_CD->query_mud_info(info["NAME"]))
PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]);
if (info["FULL"])
str = "/global/player"->who_string(75);
else {
all = users();
cre = play = ({ });
for (i=0;i<sizeof(all);i++)
if (!all[i]->query_invis() && (string)all[i]->short() && (string)all[i]->query_name() != "logon")
if (all[i]->query_creator())
cre += ({ all[i] });
else
play += ({ all[i] });
if (!sizeof(cre) && !sizeof(play))
str = "There is no one at all on "+mud_name()+", I am depressed "+
"are you depressed?\n";
else if (!sizeof(cre))
str = "There are only players on "+mud_name()+".\n"+
sprintf("They are: %-=70s\n", query_multiple_short(play)+".");
else if (!sizeof(play))
str = "There are only creators on "+mud_name()+".\n"+
sprintf("They are: %-=70s\n", query_multiple_short(cre)+".");
else
str = "There are people playing "+mud_name()+", in fact "+
(sizeof(cre)+sizeof(play))+" of them.\n"+
sprintf("These are the creators: %-=50s\n",
query_multiple_short(cre)+".")+
sprintf("These are the players: %-=52s\n",
query_multiple_short(play)+".");
}
NAMESERVER_CD->send_udp(info["HOSTADDRESS"], info["PORTUDP"],
"@@@"+UDP_RWHO_A+
"||NAME:"+mud_name()+
"||PORTUDP:"+NAMESERVER_CD->query_my_port()+
"||RWHO:"+(info["DISCWORLD"]?str:fix_string(str))+
"||ASKWIZ:"+info["ASKWIZ"]+
"@@@\n");
}
} /* incoming_request() */
void send_rwho_q(string mud) {
mapping info;
string askwiz;
askwiz = this_player()->query_name();
info = NAMESERVER_CD->query_mud_info(mud);
if (!info)
return ;
NAMESERVER_CD->send_udp(info["HOSTADDRESS"], info["PORTUDP"],
"@@@"+UDP_RWHO_Q+
"||NAME:"+mud_name()+
"||PORTUDP:"+NAMESERVER_CD->query_my_port()+
"||ASKWIZ:"+askwiz+
"||@@@\n");
} /* send_rwho_q() */
void create() {
seteuid(getuid());
} /* create() */