/* 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 = ([ ]); }