/* Hamlet, Feb 1996. -- This gets called to do the xfinger command.
Hamlet, Jun 1997. -- reworked to use inquired. Doesn't need cloned
any more. Simplified, cleaned the code, etc.
*/
#include <inquire_err.h>
#include <socket.h>
mapping fds;
varargs void xfinger_cb(int fd, int success, mixed response,
string wordip, string numericip);
void do_xfinger(string hostip, string userid, object me, string pname,
string hostname, int wide) {
int ret, fast;
string msg;
if(catch(load_object(INQUIRED))) {
tell_object(me, "Inquired seems to be broken. Have someone fix it.\n");
return;
}
if(!userid) userid = "";
if(!strlen(pname)) pname = 0;
if(wide)
msg = "/W "+ userid;
else
msg = userid;
if(hostname)
fast = 1;
ret = INQUIRED->inquire(hostip, 79, STREAM, msg, (: xfinger_cb :), fast);
if(ret <= 0)
tell_object(me, "xfinger: "+ inquire_error(ret) + "\n");
else {
tell_object(me, "Please wait...\n");
fds[ret] = ({ me, userid, pname, hostip, hostname });
}
}
varargs void xfinger_cb(int fd, int success, mixed response,
string wordip, string numericip) {
string header = "\n[";
if(!fds[fd])
return;
if( !strlen(wordip) )
wordip = fds[fd][4];
if( !strlen(numericip) )
numericip = fds[fd][3];
if(fds[fd][2]) /* pname */
header += capitalize(fds[fd][2]) + " -- ";
if(strlen(fds[fd][1])) /* userid */
header += fds[fd][1] + "@";
if(wordip && (wordip != numericip))
header += wordip + " (" + numericip + ")";
else
header += numericip;
header += "]\n";
if(success <= 0)
tell_object(fds[fd][0], header + "xfinger: " + response + "\n");
else
tell_object(fds[fd][0], header + response + "\n");
map_delete(fds, fd);
}
private void create() {
seteuid("Network stuff");
fds = ([ ]);
}