tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
/*
//
//  File    :  /adm/daemons/network/netmail.c
//  Author  :  Inspiral@Tabor
//  Created :  93-12-22
//  Purpose :  To facilitate proper communication between the mailer daemon
//                     and the dns system.
//
//
//  REVISION HISTORY
//  93-12-23   - Added support to mailer daemon.
//  93-12-24   - Added support for data_netmail_file() simul_efun
//
*/

// IMPORTANT !!!!!!!!!!!!
// This file hasn't been converted to the Intermud 3 system because
// it's not yet clear how the new protocol will implelment mudmail.
DISABALED
#include <net/macros.h>
#include <mailer.h>
#include <net/dns.h>


#define SAVE_FILE( x )( data_netmail_file( htonn( x ) ) )
#define init_queue()( out_queue = ({  }) )



#define WHO find_player( "no_one" )
#define TELL( x ) if( WHO ) tell_object( WHO, "NETMAIL: " + x + "\n" )

mixed * out_queue;

mapping check_for_mail( string mudname ) {
  init_queue();
  
  if( !file_exists( SAVE_FILE( mudname ) + SAVE_EXTENSION ) )
    return 0;
  
  if( !restore_object( SAVE_FILE( mudname ) ) ) {
    rm( SAVE_FILE( mudname ) + SAVE_EXTENSION );
    return 0;
  }
  
  if( !out_queue )
    init_queue();
  
  if( sizeof( out_queue ) )
    return out_queue[0];
  
  return 0;
}

int pop_mud( string mudname ) {
  init_queue();
  
  if( !file_exists( SAVE_FILE( mudname ) + SAVE_EXTENSION ) )
    return 0;
  
  if( !restore_object( SAVE_FILE( mudname ) ) ) {
    rm( SAVE_FILE( mudname ) + SAVE_EXTENSION );
    return 0;
  }
  
  if( !out_queue )
    init_queue();
  
TELL( sizeof(out_queue) );
  out_queue = out_queue[1..<1];
TELL(sizeof(out_queue ) );
  
  if( !sizeof( out_queue ) )
    rm( SAVE_FILE( mudname ) + SAVE_EXTENSION );
  else
    save_object( SAVE_FILE( mudname ) );
  return 1;
}

int push_mail( mapping outmsg ) {
  mixed *list;
  int i;
  
  outmsg["SUBJECT"] = outmsg["subject"];
  outmsg["CC"] = outmsg["cc"];
  outmsg["DATE"] = ( outmsg["date"] );
  outmsg["MSG"] = outmsg["message"];
  outmsg["WIZFROM"] = outmsg["from"] + "@" + Mud_name();
  outmsg["WIZTO"] = outmsg["to"];
  
// Used only for housekeeping on our end.
  outmsg["TIME"] = time();
  
  map_delete( outmsg, "subject" );
  map_delete( outmsg, "cc" );
  map_delete( outmsg, "to" );
  map_delete( outmsg, "from" );
  map_delete( outmsg, "date" );
  map_delete( outmsg, "message" );
  
  
// from, to, subject, msg, cc, date
// First, make sure CC and WIZTO have proper format.
  list = outmsg["WIZTO"];
  
  i = sizeof( list );
  while( i-- ) {
    if( strsrch( list[i], "@" ) < 0 )
      list[i] += "@" + Mud_name();
  }
  
  if( !pointerp( list ) ) list = ({ list });
  
  outmsg["WIZTO"] = list;
  list = outmsg["CC"];
  
  i = sizeof( list );
  while( i-- ) {
    if( strsrch( list[i], "@" ) < 0 )
      list[i] += "@" + Mud_name();
  }
  
  if( !pointerp( list ) ) list = ({ list });
  
  outmsg["CC"] = list;
  
// now, we strip duplicates, and compile a list of muds to send to.
  list = uniq_array( outmsg["WIZTO"] + outmsg["CC"] );
  outmsg["CC"] = implode( outmsg["CC"], "," );
  
  if( outmsg["CC"] == "" )
    outmsg["CC"] = 0;
  
  if( pointerp( outmsg["WIZTO"] ) )
    outmsg["WIZTO"] = implode( outmsg["WIZTO"], "," );
  
  i = sizeof( list );
  
  while( i-- ) {
    if( !stringp( list[i] ) )
      list[i] = "";
    sscanf( list[i], "%*s@%s", list[i] );
    list[i] = htonn( list[i] );
  }
  
  list = uniq_array( list );
  list -= ({ Mud_name() });
  list -= ({ mud_nname() });
  list -= ({ "" });
  
  i = sizeof( list );
  
  while( i-- ) {
    init_queue();
    
    if( !restore_object( SAVE_FILE( list[i] ) ) )
      rm( SAVE_FILE( list[i] ) + SAVE_EXTENSION );
    
    if( !out_queue ) init_queue();
    
    out_queue += ({ outmsg });
    save_object( SAVE_FILE( list[i] ) );
    TELL( "Saved to " + list[i] + ".db" );
    MAIL_Q-> check_for_mail( list[i], 3 );
  }
  
  return 1;
}

int incoming_mail( mapping info ) {
// Convert intermud format to our mailer's format.
  if( info["CC"] && info["CC"] != "" )
    info[ "cc" ] = info["CC"];
  else info[ "cc" ] = ({  });
  
  if( !info["WIZTO"] || info["WIZTO"] == "" )
    return 0;
  
  info["to"] = info["WIZTO"];
  info["cc"] = info["CC"];
  info[ "from" ] = info["WIZFROM"];
  info[ "date" ] = to_int( info[ "DATE" ] );
  info[ "subject" ] = info[ "SUBJECT" ];
  info[ "message" ] = info[ "MSG" ];
  
  map_delete( info, "WIZTO" );
  map_delete( info, "CC" );
  map_delete( info, "DATE" );
  map_delete( info, "SUBJECT" );
  map_delete( info, "HOSTADDRESS" );
  map_delete( info, "ENDMSG" );
  map_delete( info, "MSG" );
  map_delete( info, "WIZFROM" );
  map_delete( info, "ALIAS" );
  map_delete( info, "NAME" );
  map_delete( info, "PORTUDP" );
  
  MAILBOX_D-> send_mail( info );
  return 1;
}

/* EOF */