class user_stats { int date_created, date_last_login, date_last_logout; int login_count; // Number of times that the user has so far. int login_attempts; // Number of failed login attempts since last login. int login_time; // Total time spent online so far. string *sites; // Sites logged in from on the past. } /* class user_stats */ class user_info { string name; // real life name string email_address; // e-mail address string location; // real life location string homepage_url; // homepage URL string birthdate; // birthdate } /* class user_info */ // Reply for a local user finger request private void finger_reply(mixed *packet) { object user; string ret = "", unknown = "unknown"; int idle; if( sizeof(packet) != (S_P + SIZEOF_FINGER_REPLY) ) { packet_invalid(packet); return; } if( !( user = find_player(packet[P_RECIPIENT]) ) ) return; ret += sprintf("Real name: %35-s\n", sizeof(packet[S_P + FINGER_REPLY_NAME] ) ? packet[S_P + FINGER_REPLY_NAME] : unknown ); ret += sprintf("Email: %35-s\n", sizeof(packet[S_P + FINGER_REPLY_EMAIL] ) ? packet[S_P + FINGER_REPLY_EMAIL] : unknown ); ret += sprintf("Home page: %35-s\n", unknown ); ret += sprintf("Location: %35-s\n", unknown ); ret += sprintf("Birthday: %35-s\n", unknown ); if( ( idle = packet[S_P + FINGER_REPLY_IDLETIME]) > -1 ) { ret += "On since " + packet[S_P + FINGER_REPLY_LOGINOUT] + "."; if( idle > 60 ) ret += "\nIdle for " + time_string(idle) + "."; } else { ret += "Last logged on "+packet[S_P + FINGER_REPLY_LOGINOUT]+"."; } tell_object( user, ret + "%^RESET%^\n> "); } /* finger_reply() */ // Remote users finger request private void finger_request(mixed *packet) { class user_stats ustats; class user_info uinfo; object ob; mixed *reply, *info; string ip, user, login, title; int idle; return; if( sizeof(packet) != (S_P + SIZEOF_FINGER_REQ) ) { packet_invalid(packet); return; } user = packet[S_P + FINGER_REQ_NAME]; info = ({"This function is broken","This function is broken"}); ustats = info[1]; uinfo = info[0]; if( ob = find_player(user) ) { login = ctime(ustats -> date_last_login); idle = (interactive(ob) ? query_idle(ob) : -1); ip = query_ip_name(ob); title = TITLE_H->query_title(ob); } else { login = ctime(ustats -> date_last_logout); idle = -1; } reply = packet_allocate(FINGER_REPLY_PACKET); reply[P_DESTINATION] = packet[P_SOURCE]; reply[P_RECIPIENT] = packet[P_SENDER]; reply[S_P + FINGER_REPLY_SHORT] = CAP(packet[S_P + FINGER_REQ_NAME]); reply[S_P + FINGER_REPLY_TITLE] = title; reply[S_P + FINGER_REPLY_NAME] = uinfo -> name; reply[S_P + FINGER_REPLY_EMAIL] = uinfo -> email_address; reply[S_P + FINGER_REPLY_LOGINOUT] = login; reply[S_P + FINGER_REPLY_IDLETIME] = idle; reply[S_P + FINGER_REPLY_IPNAME] = ip; reply[S_P + FINGER_REPLY_LEVEL] = NULL; reply[S_P + FINGER_REPLY_EXTRA] = NULL; add_buffer( 0, reply ); send_buffer(0); } /* finger_request() */ // Inititate a remote finger request int finger( string user, string mud ) { mixed *packet; if( shutdown || !( mud = mud_exists(mud) ) ) return 0; // Service is unavailable packet = packet_allocate(FINGER_REQ_PACKET); packet[P_SENDER] = TU->query_name(); packet[P_DESTINATION] = mud; packet[S_P + FINGER_REQ_NAME] = user; add_buffer( 0, packet ); send_buffer(0); return 1; } /* finger() */