Beispiel #1
0
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 });
Beispiel #2
0
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");
        }
}
Beispiel #3
0
// 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"]))
}
Beispiel #4
0
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"])
}
Beispiel #5
0
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);

	}
}
Beispiel #6
0
Datei: gtell.c Projekt: cosin/XYJ
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");
}
Beispiel #7
0
// 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");
    }
}
Beispiel #8
0
// 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);
     }      
   }
}
Beispiel #9
0
// 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);
	}
}
Beispiel #10
0
// 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");
}
Beispiel #11
0
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;
}
Beispiel #12
0
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");
	}
}
Beispiel #13
0
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"])
}
Beispiel #14
0
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;
}
Beispiel #15
0
// 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");
}
Beispiel #16
0
Datei: gtell.c Projekt: cosin/XYJ
// 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"])
}
Beispiel #17
0
// 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 );
    }
}
Beispiel #18
0
// 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");
}
Beispiel #19
0
// 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"])
}  
Beispiel #20
0
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));
}    
Beispiel #21
0
// 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");
}
Beispiel #22
0
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"]);
   }
}
Beispiel #23
0
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");
}
Beispiel #24
0
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);
   }
}
Beispiel #25
0
// 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");
		}
}
Beispiel #26
0
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");
}
Beispiel #27
0
// 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");
		}
}
Beispiel #28
0
// 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);
}