int push_mail( mapping outmsg ) { mixed *list; int i; outmsg["SUBJECT"] = outmsg["subject"]; outmsg["CC"] = outmsg["cc"]; outmsg["DATE"] = ( outmsg["date"] ); outmsg["MSG"] = outmsg["message"]; outmsg["WIZFROM"] = outmsg["from"] + "@" + Mud_name(); outmsg["WIZTO"] = outmsg["to"]; // Used only for housekeeping on our end. outmsg["TIME"] = time(); map_delete( outmsg, "subject" ); map_delete( outmsg, "cc" ); map_delete( outmsg, "to" ); map_delete( outmsg, "from" ); map_delete( outmsg, "date" ); map_delete( outmsg, "message" ); // from, to, subject, msg, cc, date // First, make sure CC and WIZTO have proper format. list = outmsg["WIZTO"]; i = sizeof( list ); while( i-- ) { if( strsrch( list[i], "@" ) < 0 ) list[i] += "@" + Mud_name(); } if( !pointerp( list ) ) list = ({ list });
void incoming_request(mapping info) { mapping minfo; string reply; if (info["NAME"] && info["PORTUDP"]) { if (info["NAME"] == Mud_name()) return; minfo = DNS_MASTER->query_mud_info(info["NAME"]); if (!minfo || !DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); if (minfo && minfo["HOSTADDRESS"] != info["HOSTADDRESS"]) { dns_log("dns_fake", "Tell: "+info["WIZFROM"]+"@"+info["NAME"]+ "("+info["HOSTADDRESS"]+") telling "+info["WIZTO"] +" "+ info["MSG"]+"\n"); DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"], "@@@"+DNS_WARNING+ "||MSG: Faked gtell message "+info["WIZFROM"]+ "@"+info["NAME"]+"> "+info["WIZTO"]+ " "+info["MSG"]+ "||FAKEHOST:"+info["name"]+ "@@@\n"); return ; } if( reply=TELL_CMD->remote_tell( info["CNAME"], info["WIZFROM"], info["NAME"], info["WIZTO"], info["MSG"]) ) reply = "你告诉"+reply+"("+capitalize(info["WIZTO"])+"@"+Mud_name()+"):" + info["MSG"]; else reply = "没有这个人。\n"; (AUX_PATH+"affirmation_a")->send_affirmation_a(info["HOSTADDRESS"], info["PORTUDP"], "Gtell@"+Mud_name(), info["WIZFROM"], reply, "gtell"); } }
// Support. Do we support this protocol? void incoming_request(mapping info) { if(!ACCESS_CHECK(previous_object())) return; if (stringp(info["NAME"]) && stringp(info["PORTUDP"])) { // dont want requests from ourself if(info["NAME"] == Mud_name()) return; if(!DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); // if the file exists that is enough to know that we support // it, unless there is a param request, in which case we have // to call_other to the file to check. if( file_size(AUX_PATH+info["CMD"]+".c") <= 0 || (!undefinedp(info["PARAM"]) && call_other(AUX_PATH+info["CMD"], "support_"+info["PARAM"]))) { // we don't support it DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"], sprintf("@@@%s||NAME:%s||PORTUDP:%d||CMD:%s||NOTSUPPORTED:yes||ANSWERID:%s@@@\n", DNS_SUPPORT_A, Mud_name(), udp_port(), info["CMD"]+ (!undefinedp(info["PARAM"]) ? "||PARAM:"+info["PARAM"] : ""), info["ANSWERID"])); } else { // we do support it DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"], sprintf("@@@%s||NAME:%s||PORTUDP:%d||CMD:%s||SUPPORTED:yes||ANSWERID:%s@@@\n", DNS_SUPPORT_A, Mud_name(), udp_port(), info["CMD"]+(!undefinedp(info["PARAM"]) ? "||PARAM:"+info["PARAM"] : ""), info["ANSWERID"])); } } //if (stringp(info["NAME"]) && stringp(info["PORTUDP"])) }
void incoming_request(mapping info) { mapping minfo; string tmsg; #ifdef DEBUG set("channel_id", "网际巫师频道精灵"); CHANNEL_D->do_channel(this_object(), "sys", "gwizmsg received from " + info["NAME"]); #endif if(!ACCESS_CHECK(previous_object())) return; if (info["NAME"]) { if (info["NAME"] == Mud_name()) return ; minfo = DNS_MASTER->query_mud_info(info["NAME"]); if (!minfo || !strlen(info["WIZNAME"]) || !DNS_MASTER->dns_mudp(info["NAME"])) { // We don't accept the message. But ping them anyway. PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); return ; } if (info["HOSTADDRESS"] != minfo["HOSTADDRESS"]) { if (info["EMOTE"]) tmsg = info["WIZNAME"]+"@"+info["NAME"]+" "+info["GWIZ"]; else tmsg = info["WIZNAME"]+"@"+info["NAME"]+": "+info["GWIZ"]; // Faked. sheeze... dns_log("dns_fake",sprintf( "Gwiz: %s %s\n%s", ctime(time()), info["HOSTADDRESS"],tmsg)); DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"], "@@@"+DNS_WARNING+ "||NAME:"+Mud_name()+ "||MSG: Fake gwiz msg: "+tmsg+ "||FAKEHOST:"+info["HOSTADDRESS"]+ "@@@\n"); return; } if( undefinedp(info["CNAME"]) ) set("channel_id", sprintf("%s@%s", info["WIZNAME"], info["NAME"])); else set("channel_id", sprintf("%s(%s@%s)", info["CNAME"], info["WIZNAME"], info["NAME"])); CHANNEL_D->do_channel(this_object(), "gwiz", info["GWIZ"], info["EMOTE"]); } //if (info["NAME"]) }
void incoming_request(mapping info) { object ob; string msg; mapping minfo; if( !ACCESS_CHECK(previous_object())) return; minfo = (mapping)DNS_MASTER->query_mud_info(info["NAME"]); if (!minfo) return ; if (stringp(info["PORTUDP"]) && stringp(info["HOSTADDRESS"])) { if (info["NAME"] == Mud_name()) return ; if (!DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); ob = find_player(lower_case(info["SOURCE_ID"])); if (!ob) return; msg = EMOTE_D->do_emote(ob,lower_case(info["MSG"]),info["TARGET"],4); #ifdef DEBUG CHANNEL_D->do_channel(this_object(), DEBUG, sprintf("%s %s.\n",info["MSG"],info["TARGET"] )); #endif if (!stringp(msg)) { CHANNEL_D->do_channel(ob,"sys","error : Nothing get from emoted.c"); return; } if(!userp(ob)) return; CHANNEL_D->do_channel(ob, info["CHANNEL"],msg,1,1); } }
void send_gtell(string mud, string wiz_to, object source, string msg) { mapping minfo; if(!ACCESS_CHECK(previous_object()) && base_name(previous_object()) != TELL_CMD) return; mud = htonn( mud ); if(mud == mud_nname() || !geteuid(source)) return; minfo = (mapping)DNS_MASTER->query_mud_info(mud); if (!minfo) return ; msg = replace_string(msg, "|", ""); msg = replace_string(msg, "@@@", ""); DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"], "@@@" + DNS_GTELL + "||NAME:" + Mud_name() + "||PORTUDP:" + udp_port() + "||WIZTO:" + wiz_to + "||WIZFROM:" + capitalize(geteuid(source)) + "||CNAME:" + source->name(1) + "||MSG:"+msg+"@@@\n"); }
// Someone has ping'd us void incoming_request(mapping info) { if(!ACCESS_CHECK(previous_object())) return; if(info["NAME"] == Mud_name()) { dns_warning("ping_q::incoming_request: ping from ourselves\n"); // we pinged ourselves! return; } if (info["PORTUDP"]) { // check we have an entry for the sender if (!DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); // send a ping answer along with our mud info DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"], "@@@" + DNS_PING_A + (string)DNS_MASTER->start_message()+ "@@@\n"); } }
// They answered our finger request. Nice of them. void incoming_request(mapping info) { object ob; mapping mudinfo; if(!ACCESS_CHECK(previous_object())) return; if (info["PORTUDP"] && info["NAME"]) { // dont want to finger ourselves if (info["NAME"] == Mud_name()) return ; // if we haven't got an entry for the mud, get one. if (!DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); // send the info to the player ob = find_player(info["ASKWIZ"]); if (ob) { mudinfo=DNS_MASTER->query_mud_info(info["NAME"]); message("finger", "\n"+ ((!mudinfo || undefinedp(mudinfo["MUDNAME"]))? info["NAME"]:mudinfo["MUDNAME"])+ "告诉你:\n"+info["MSG"],ob); } } }
// We received an answer answer to our 'do you support xx' request. void incoming_request(mapping info) { int idx; if(!ACCESS_CHECK(previous_object())) return; if (stringp(info["PORTUDP"]) && stringp(info["NAME"])) { // don't want requests from ourself if (info["NAME"] == Mud_name()) return ; // if we don't have an entry for the mud, then we ping it if (!DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); if(info["ANSWERID"] && sscanf(info["ANSWERID"], "%d", idx)) index_call(idx, info); } }
// This is the interface to the intermud channels void send_remote_q(string mud,string channel,string me,string who,string msg) { mapping rhost; if( !this_player() || !ACCESS_CHECK(previous_object())) return; mud = htonn( mud ); if (mud == mud_nname()) return; rhost = (mapping)DNS_MASTER->query_mud_info(mud); if (!rhost) return ; msg = replace_string(msg, "|", ""); msg = replace_string(msg, "@@@", ""); #ifdef DEBUG CHANNEL_D->do_channel(this_object(), DEBUG, sprintf("send remote to host %s channel %s\n message (%s %s %s).", mud, channel, me, msg, who)); #endif DNS_MASTER->send_udp(rhost["HOSTADDRESS"], rhost["PORTUDP"], "@@@" + "remote_q" + "||NAME:" + Mud_name() + "||PORTUDP:" + udp_port() + "||CHANNEL:" + channel + "||SOURCE_ID:" + lower_case(me) + "||TARGET_ID:" + lower_case(who) + "||MSG:" + msg+"@@@\n"); }
int send_gtell(string mud, string wiz_to, object source, string msg) { mapping minfo; if (! ACCESS_CHECK(previous_object()) && is_root(previous_object())) return 0; mud = htonn(mud); if (mud == mud_nname() || ! source) return 0; minfo = (mapping)DNS_MASTER->query_mud_info(mud); if (! minfo) { write(LOCAL_MUD_NAME() + "并没有和 " + mud + " 联系上。\n"); return 0; } msg = replace_string(msg, "|", ""); msg = replace_string(msg, "@@@", ""); DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"], "@@@" + DNS_GTELL + "||NAME:" + Mud_name() + "||PORTUDP:" + udp_port() + "||WIZTO:" + wiz_to + "||WIZFROM:" + capitalize(source->query("id")) + "||CNAME:" + source->name(1) + "||WIZ_LEVEL:" + wiz_level(source) + "||MSG:" + msg + "@@@\n"); return 1; }
void incoming_request(mapping info) { mapping rhost; object ob; if(!ACCESS_CHECK(previous_object())) return; if (undefinedp(info["CHANNEL"])) return; if (info["NAME"]) { if (info["NAME"] == Mud_name()) return ; rhost = DNS_MASTER->query_mud_info(info["NAME"]); if (!rhost || !DNS_MASTER->dns_mudp(info["NAME"])) { // We don't accept the message. But ping them anyway. PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); return ; } if (info["HOSTADDRESS"] != rhost["HOSTADDRESS"]) { // Faked. sheeze... dns_log("dns_fake",sprintf( "Gchannel: %s %s\n%s", ctime(time()), info["HOSTADDRESS"],info["MYINFO"])); DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"], "@@@"+DNS_WARNING+ "||NAME:"+Mud_name()+ "||MSG: Fake remote_q msg: "+info["CHANNEL"]+ "||FAKEHOST:"+info["HOSTADDRESS"]+ "@@@\n"); return; } ob=find_player(info["TARGET_ID"]); if(!userp(ob)) return; if( ob->is_ghost() || ob->query("env/invisibility") > 0 ) return; DNS_MASTER->send_udp(rhost["HOSTADDRESS"], rhost["PORTUDP"], "@@@" + "remote_a" + "||NAME:" + Mud_name() + "||PORTUDP:" + udp_port() + "||CHANNEL:" + info["CHANNEL"] + "||SOURCE_ID:" + info["SOURCE_ID"] + "||MSG:" + info["MSG"] + "||TARGET:" + sprintf("mud=%s name=%s id=%s age=%d gender=%s respect=%s rude=%s ", Mud_name(),ob->query("name"),ob->query("id"),ob->query("age"),ob->query("gender"), RANK_D->query_respect(ob),RANK_D->query_rude(ob) ) + "@@@\n"); } }
void incoming_request(mapping info) { mapping minfo; string tmsg; if(!ACCESS_CHECK(previous_object())) return; if (info["NAME"]) { if (info["NAME"] == Mud_name()) return ; minfo = DNS_MASTER->query_mud_info(info["NAME"]); if (!minfo || !strlen(info["USRNAME"]) || !DNS_MASTER->dns_mudp(info["NAME"])) { // We don't accept the message. But ping them anyway. PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); return ; } if (info["HOSTADDRESS"] != minfo["HOSTADDRESS"]) { if (info["EMOTE"]) tmsg = info["USRNAME"]+"@"+info["NAME"]+" "+info["MSG"]; else tmsg = info["USRNAME"]+"@"+info["NAME"]+": "+info["MSG"]; // Faked. sheeze... dns_log("dns_fake",sprintf( "Gchannel: %s %s\n%s", ctime(time()), info["HOSTADDRESS"],tmsg)); DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"], "@@@"+DNS_WARNING+ "||NAME:"+Mud_name()+ "||MSG: Fake gchannel msg: "+tmsg+ "||FAKEHOST:"+info["HOSTADDRESS"]+ "@@@\n"); return; } info["NAME"]=upper_case(info["NAME"]); //mon 1/14/98 if( undefinedp(info["CNAME"]) ) set("channel_id", sprintf("%s@%s", info["USRNAME"], info["NAME"])); else set("channel_id", sprintf("%s(%s@%s)", info["CNAME"], info["USRNAME"], info["NAME"])); CHANNEL_D->do_channel(this_object(), lower_case(info["CHANNEL"]), info["MSG"], info["EMOTE"]); } //if (info["NAME"]) }
void send_locate_q(string who) { mapping info; string *muds; int i; i = sizeof(muds = keys(info=(mapping)DNS_MASTER->query_muds())); while(i--) { if(lower_case(muds[i]) == lower_case(Mud_name())) continue; DNS_MASTER->send_udp(info[muds[i]]["HOSTADDRESS"], info[muds[i]]["PORTUDP"], "@@@"+DNS_LOCATE_Q+ "||NAME:"+Mud_name()+ "||PORTUDP:"+ udp_port() + "||TARGET:"+lower_case(who)+ "||ASKWIZ:"+(string)this_player()->query("name")+ "@@@\n"); } return; }
// send a pinq query void send_ping_q(string host, mixed port) { if(!ACCESS_CHECK(previous_object())) return; DNS_MASTER->send_udp(host, port, "@@@"+DNS_PING_Q+ "||NAME:"+Mud_name()+ "||PORTUDP:"+udp_port()+ "@@@\n"); }
// Someone on another mud has sent us a tell. void incoming_request(mapping info) { mapping minfo, mudinfo; object pl; string reply; if (info["NAME"] && info["PORTUDP"]) { // dont want to tell to ourselves if (info["NAME"] == Mud_name()) return; // get our info about the sender, ping them if we don't have any minfo = DNS_MASTER->query_mud_info(info["NAME"]); if (!minfo || !DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); if (minfo && minfo["HOSTADDRESS"] != info["HOSTADDRESS"]) { // Its been faked! dns_log("dns_fake", "Tell: "+info["WIZFROM"]+"@"+info["NAME"]+ "("+info["HOSTADDRESS"]+") telling "+info["WIZTO"] +" "+ info["MSG"]+"\n"); DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"], "@@@"+DNS_WARNING+ "||MSG: Faked gtell message "+info["WIZFROM"]+ "@"+info["NAME"]+"> "+info["WIZTO"]+ " "+info["MSG"]+ "||FAKEHOST:"+info["name"]+ "@@@\n"); return ; } reply=TELL_CMD->remote_tell( info["CNAME"], info["WIZFROM"], info["NAME"], info["WIZTO"], info["MSG"]); mudinfo=DNS_MASTER->query_mud_info(Mud_name()); // query info about ourselves. (AUX_PATH+"affirmation_a")->send_affirmation_a(info["HOSTADDRESS"], info["PORTUDP"], mudinfo["MUDNAME"], //"Gtell@"+Mud_name(), info["WIZFROM"], reply, "gtell"); } //if (info["NAME"] && info["PORTUDP"]) }
// Someone has answered our ping of them. void incoming_request(mapping info) { if(!ACCESS_CHECK(previous_object())) return; // set the name in the network master if (info["NAME"] && info["NAME"] != Mud_name()) { DNS_MASTER->set_mud_info( htonn(info["NAME"]), info); // If there's mail to send out, do it now! MAIL_Q -> check_for_mail( info["NAME"], 3 ); } }
// we send this when we shut down void send_shutdown(string host, int port) { if(!ACCESS_CHECK(previous_object())) return; DNS_MASTER->send_udp(host, port, "@@@"+DNS_SHUTDOWN+ "||NAME:"+Mud_name()+ "||PORTUDP:"+udp_port()+ "@@@\n"); }
// Someone on another mud has sent us a tell. void incoming_request(mapping info) { mapping minfo; object pl; string reply; if (info["NAME"] && info["PORTUDP"]) { // dont want to tell to ourselves if (info["NAME"] == Mud_name()) return; // get our info about the sender, ping them if we don't have any minfo = DNS_MASTER->query_mud_info(info["NAME"]); if (!minfo || !DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); if (minfo && minfo["HOSTADDRESS"] != info["HOSTADDRESS"]) { // Its been faked! dns_log("dns_fake", "Tell: "+info["WIZFROM"]+"@"+info["NAME"]+ "("+info["HOSTADDRESS"]+") telling "+info["WIZTO"] +" "+ info["MSG"]+"\n"); DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"], "@@@"+DNS_WARNING+ "||MSG: Faked gtell message "+info["WIZFROM"]+ "@"+info["NAME"]+"> "+info["WIZTO"]+ " "+info["MSG"]+ "||FAKEHOST:"+info["name"]+ "@@@\n"); return ; } // reply = (string)TS_D->tell_user(info["WIZFROM"], info["NAME"], // info["WIZTO"], info["MSG"]); SECURITY_D->checking_status(info); if( TELL_CMD->remote_tell( info["CNAME"], info["WIZFROM"], info["NAME"], info["WIZTO"], info["MSG"]) ) reply = capitalize(info["WIZTO"]) + " has received your message."; else reply = "No such user.\n"; (AUX_PATH+"affirmation_a")->send_affirmation_a(info["HOSTADDRESS"], info["PORTUDP"], "Gtell@"+Mud_name(), info["WIZFROM"], reply, "gtell"); } //if (info["NAME"] && info["PORTUDP"]) }
void send_support_q(string host, mixed port, string cmd, string param) { int idx; function f; if(!ACCESS_CHECK(previous_object())) return; if (!param) param = ""; f = (: previous_object(), "support_q_callback" :); idx = index_add(f); DNS_MASTER->send_udp(host, port, sprintf("@@@%s||NAME:%s||PORTUDP:%d||CMD:%s||ANSWERID:%d@@@\n", DNS_SUPPORT_Q, Mud_name(), udp_port(), cmd + (strlen(param) ? "||PARAM:"+param : ""), idx)); }
// send a pinq query void send_ping_q(string host, mixed port) { /* CHANNEL_D->do_channel(this_object(), "sys", "send_ping "+ host+" "+port+" (from "+Mud_name()+")"); return; //don't ping */ if(!ACCESS_CHECK(previous_object())) return; DNS_MASTER->send_udp(host, port, "@@@"+DNS_PING_Q+ "||NAME:"+Mud_name()+ "||PORTUDP:"+udp_port()+ "@@@\n"); }
void incoming_request(mapping info) { object ob; if( !ACCESS_CHECK(previous_object())) return; if (stringp(info["PORTUDP"]) && stringp(info["HOSTADDRESS"])) { if (info["NAME"] == Mud_name()) return ; if (!DNS_MASTER->dns_mudp(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); if (!(ob = find_player(lower_case(info["ASKWIZ"])))) return ; tell_object(ob, info["RWHO"]); } }
void send_affirmation_a(string host, string port, string from, string to, string msg, string type) { // if(!ACCESS_CHECK(previous_object())) return; DNS_MASTER->send_udp(host, port, "@@@"+DNS_AFFIRMATION_A+ "||NAME:"+Mud_name()+ "||PORTUDP:"+udp_port()+ "||WIZTO:"+to+ "||WIZFROM:"+from+ "||TYPE:"+type+ "||MSG:"+msg+"@@@\n"); }
void incoming_request(mapping info) { object ob; if(!ACCESS_CHECK(previous_object())) return; if (!info["NAME"] || info["NAME"] == Mud_name()) return; if (info["WIZTO"]) { if( info["MSG"][sizeof(info["MSG"])] != '\n' ) info["MSG"] += "\n"; if (ob = find_player(lower_case(info["WIZTO"]))) tell_object(ob, HIG + info["WIZFROM"]+"通知你:"+info["MSG"] + NOR); } }
// This is the interface to the intermud channels void send_msg(string channel, string id, string name, string msg, int emoted, mixed filter) { string *names; int i; mapping muds; mapping svcs; mapping minfo; if( !this_player() // Prevent from being called by ourself. || !ACCESS_CHECK(previous_object())) return; #ifdef DEBUG set("channel_id", "网路频道精灵"); CHANNEL_D->do_channel(this_object(), "sys", "prepare to send gchannel message."); #endif muds = (mapping)DNS_MASTER->query_muds(); svcs = (mapping)DNS_MASTER->query_svc(); msg = replace_string(msg, "|", ""); msg = replace_string(msg, "@@@", ""); // use keys(svcs) because none of the muds not in svcs can possibley // receive the message names = keys(svcs); i = sizeof(names); while(i--) if( (names[i] != mud_nname()) && evaluate(filter, muds[names[i]]) && (muds[names[i]]["MUDLIB"]=="Eastern Stories" || muds[names[i]]["MUDLIB"]=="A Journey to the West") ) { minfo = muds[names[i]]; if(!mapp(minfo) || !mapp(svcs[names[i]]) || !(svcs[names[i]]["gwizmsg"] & SVC_UDP)) continue; #ifdef DEBUG set("channel_id", "网路频道精灵"); CHANNEL_D->do_channel(this_object(), "sys", sprintf("gchannel message sent to %s.", minfo["NAME"])); #endif DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"], "@@@" + DNS_GCHANNEL + "||NAME:" + Mud_name() + "||PORTUDP:" + udp_port() + "||USRNAME:" + capitalize(id) + "||CNAME:" + name + "||MSG:" + msg + "||CHANNEL:" + channel + (emoted?"||EMOTE:1":"") + "@@@\n"); } }
void incoming_request(mapping info) { string field; if(!info["NAME"] || !info["PORTUDP"]) return; if(!DNS_MASTER->query_mud_info(info["NAME"])) PING_Q->send_ping_q(info["HOSTADDRESS"], info["PORTUDP"]); if(!info["TARGET"]) field = "NO"; else field = (find_player(lower_case(info["TARGET"])) ? "YES" : "NO"); DNS_MASTER->send_udp(info["HOSTADDRESS"], info["PORTUDP"], "@@@"+DNS_LOCATE_A+"||NAME:"+Mud_name()+ "||PORTUDP:"+udp_port()+ "||LOCATE:"+field+ "||TARGET:"+info["TARGET"]+ "||ASKWIZ:"+info["ASKWIZ"]+"@@@\n"); }
// This is the interface to the intermud channels void send_msg(string channel, string id, string name, string msg, int emoted) { string *names; int i; mapping muds; mapping svcs; mapping minfo; if( !this_player() // Prevent from being called by ourself. || !ACCESS_CHECK(previous_object())) return; #ifdef DEBUG set("channel_id", "网际巫师频道精灵"); CHANNEL_D->do_channel(this_object(), "sys", "prepare to send gwizmsg"); #endif muds = (mapping)DNS_MASTER->query_muds(); svcs = (mapping)DNS_MASTER->query_svc(); msg = replace_string(msg, "|", ""); msg = replace_string(msg, "@@@", ""); // use keys(svcs) because none of the muds not in svcs can possibley // receive the message names = keys(svcs); i = sizeof(names); while(i--) if (names[i] != mud_nname()) { minfo = muds[names[i]]; if(!mapp(minfo) || !mapp(svcs[names[i]]) || !(svcs[names[i]]["gwizmsg"] & SVC_UDP)) continue; DNS_MASTER->send_udp(minfo["HOSTADDRESS"], minfo["PORTUDP"], "@@@" + DNS_GWIZMSG + "||NAME:" + Mud_name() + "||PORTUDP:" + udp_port() + "||WIZNAME:" + capitalize(id) + "||CNAME:" + name + "||GWIZ:" + msg + "||CHANNEL:" + channel + (emoted?"||EMOTE:1":"") + "@@@\n"); } }
// Someone has answered our ping of them. void incoming_request(mapping info) { mapping mud; if (! ACCESS_CHECK(previous_object())) return; if (VERSION_D->is_release_server() && info["MUDLIB"] == MUDLIB_NAME) { // 本地服务器接受到了自称为同LIB的MUD信息 if (! CONFIG_D->query(info["HOSTADDRESS"] + " " + info["PORT"])) // 这个不是经过总站授权的MUD,丢弃 return 0; } if (! undefinedp(info["USER"]) && info["USER"] == 0) map_delete(info, "USER"); // set the name in the network master if (info["NAME"] && info["NAME"] != Mud_name()) DNS_MASTER->set_mud_info(htonn(info["NAME"]), info); }