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; }
// 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"); }
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 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 ); } }
// 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); }