/* /cmds/adm/mfinger.c
* from the Dead Souls LPC Library
* a tool for fingering the site of a player
* created by Descartes of Borg 950429
*/
#include <lib.h>
inherit LIB_DAEMON;
private static mapping Waiting;
void ReadSocket(string str);
static void create() {
daemon::create();
Waiting = ([]);
}
mixed cmd(string args) {
object ob;
string ip;
if( !args || args == "" ) return "Mfinger whom?";
if( !(ob = find_player(args)) )
return "No one around " + mud_name() + " by that name.";
ip = query_ip_number(ob);
args = (string)ob->GetCapName();
ob = new(LIB_CLIENT);
Waiting[ob] = ([ "who" : this_player(), "player" : args, "ip" : ip ]);
if( (int)ob->eventCreateSocket(ip, 79) < 0 ) {
message("error", "Unable to create socket.", this_player());
ob->eventDestruct();
return 1;
}
ob->SetDestructOnClose(1);
ob->SetRead( (: ReadSocket :) );
ob->eventWrite("\n");
message("system", "Finger sent to " + possessive_noun(args) + " site " +
ip + ".", this_player());
return 1;
}
void ReadSocket(string str) {
object ob;
if( !Waiting[ob = previous_object()] ) return;
if( !Waiting[ob]["who"] ) return;
message("system", "Information from " + Waiting[ob]["ip"] + " for " +
Waiting[ob]["player"] + ":", Waiting[ob]["who"]);
message("system", str, Waiting[ob]["who"]);
}
void help() {
message("help", "Syntax: <mfinger [player]>\n\n"
"Allows you to get finger information from a player's site.\n\n"
"Note: In 1995, you could reliably expect a UNIX machine to cheerfully "
"respond to a finger request. Now, more than 10 years later, everything "
"is blocked, firewalled, and hardened. This command is all but useless, "
"and is kept as a historical curiosity. Any \"bugs\" it contains will "
"not be fixed.",
this_player());
}