/* Do not remove the headers from this file! see /USAGE for more info. */ /* ** mail.c -- handler for I3's "mail" service ** ** 950126, Deathblade: created */ void oob_register_requests(mapping requests); void oob_register_replies(mapping replies); void oob_initiate_connection(string target_mudname); void oob_svc_send(object socket, mixed * message); private nomask void mail_add_request(string, mixed array); nosave private mapping mail_requests = ([]); private nomask void handle_mail(string mudname, object socket, mixed * message) { string array errors; errors = IMAIL_D->incoming_mail(mudname, message); oob_svc_send(socket, ({"mail-ack", ([ message[1] : errors ])})); } private nomask void handle_mail_ack(string mudname, object socket, mixed * message) { IMAIL_D->receive_ack(message[1]); } protected nomask int mail_has_outgoing(string mudname) { return sizeof(mail_requests[mudname]) != 0; } protected nomask int mail_send_outgoing(string mudname, object socket) { mixed array requests = mail_requests[mudname]; if (!sizeof(requests)) { return 0; } oob_svc_send(socket, requests[0]); mail_requests[mudname] = requests[1..]; } protected nomask void mail_startup() { oob_register_requests(([ "mail" : (: handle_mail :), ])); oob_register_replies(([ "mail-ack" : (: handle_mail_ack :), ])); } private nomask void mail_add_request(string mudname, mixed array request) { if ( !mail_requests[mudname] ) { mail_requests[mudname] = request; } else { mail_requests[mudname] += request; } } public nomask void send_mail_message_to_mud(array packet, string mudname) { if(previous_object() != find_object(IMAIL_D)) { error("Fuck no"); } mail_add_request(mudname, ({packet})); oob_initiate_connection(mudname); }