/* Do not remove the headers from this file! see /USAGE for more info. */ /* ** mailbox.c -- mailbox daemon ** ** This daemon will manage the mailboxes in the system. Each mailbox ** contains a list of message keys that a particular user has in their ** mailbox. The actual messages are managed by MAIL_D. ** ** Public API: ** get_mailbox(): return a MAILBOX object for the specified user ** unload_mailbox(): the specified mailbox is no longer needed; close it ** close_mailboxes(): close all unneeded mailboxes ** ** 960119, Deathblade: created from code in MAIL_D. */ #include <clean_up.h> private nosave mapping mailboxes = ([ ]); private nomask void create() { object mailbox; foreach ( mailbox in children(MAILBOX) ) { string owner; if ( mailbox && (owner = mailbox->query_owner()) ) mailboxes[owner] = mailbox; } } nomask object get_mailbox(string the_owner) { object mailbox; if ( !(mailbox = mailboxes[the_owner]) ) { mailbox = mailboxes[the_owner] = new(MAILBOX, the_owner); if ( !mailbox ) error("mailbox wasn't created"); } return mailbox; } nomask void unload_mailbox(string the_owner) { object mailbox; if ( mailbox = mailboxes[the_owner] ) { destruct(mailbox); map_delete(mailboxes, the_owner); } } nomask void close_mailboxes() { string * names; string name; names = keys(mailboxes) - users()->query_userid(); foreach ( name in names ) { if ( mailboxes[name] ) /* might have been destructed */ destruct(mailboxes[name]); map_delete(mailboxes, name); } } // We don't want to disappear, but do some cleaning anyway. int clean_up() { close_mailboxes(); return ASK_AGAIN; }