/* Auth services for the Intermud 3 package.
* By Turrican@Discworld, 20-3-96
*/
#define SERVICE_AUTH
#define TIMEOUT 10*60
private nosave mapping sessions = ([]);
void eventReceiveAuthRequest(mixed *packet) {
int key;
if (file_name(previous_object()) != INTERMUD_D) return;
if (sizeof(packet) != 6) return;
key = random(time()); /* XXX - Is this guaranteed to be unique ?? */
if (!packet[2]) return;
sessions[packet[2]] = key;
call_out("eventTimeout", TIMEOUT, packet[2]);
INTERMUD_D->eventExternWrite(({"auth-mud-reply", 5, mud_name(), 0,
packet[2], 0, key}));
}
void eventTimeout(string mudname) {
if (sessions[mudname])
map_delete(sessions, mudname);
}
void eventReceiveAuthReply(mixed *packet) {
if (file_name(previous_object()) != INTERMUD_D) return;
if (sizeof(packet) != 7) return;
if (packet[6])
sessions[mud_name()] = packet[6];
}
void eventSendAuthRequest(string other) {
if (!other || other == "") return;
INTERMUD_D->eventExternWrite(({"auth-mud-req", 5, mud_name(), 0, other, 0}));
}
mapping GetKeys() {
return copy(sessions);
}
int GetKey(string mudname) {
if (!sessions[mudname]) return 0;
return sessions[mudname];
}