mailer.c-Dateireferenz

#include <config.h>
#include <mail.h>
#include <wizlevels.h>
Include-Abhängigkeitsdiagramm für mailer.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define DEBUG(msg)
#define DEBUG(x)
#define NOTIFY_RECIPIENT
#define BOUNCE_ADDR   "mud@mg.mud.de"
#define SECURITY(x)   (geteuid(x) == ROOTID || geteuid(x) == MAILID)
#define MAIL_DELAYED   4096
#define MG_NAMES   ({ MUDNAME, "mg", "morgengrauen", "mud", "mg.mud.de" })

Funktionen

protected void create ()
static int GetFolders (string user)
static string _unify (string str)
static string * unify (string *str)
static string * expand (string *addr, int expa)
static string _filter_addr (string addr)
public string * DeliverMail (mixed msg, int expa)
public int FingerMail (string user)
static void save_msg (mixed msg, string user)
public int RemoveMsg (int msg, int folder, string user)
public int MoveMsg (int msg, int folder, string newfolder, string user)
public int DeleteUnreadFolder (string user)
public int RemoveFolder (string folder, string user)
public int MakeFolder (string folder, string user)
public int query_recipient_ok (string name)
public void deliver_mail (string recipient, string from, string subject, string mail_body)
string expandSystemRecursive (string addr, int maxrec)

Variablen

mixed * folders
static mapping alias
static string cachedname

Makro-Dokumentation

#define BOUNCE_ADDR   "mud@mg.mud.de"

Definiert in Zeile 79 der Datei mailer.c.

Wird benutzt von DeliverMail().

#define DEBUG ( x   ) 

Definiert in Zeile 74 der Datei mailer.c.

#define DEBUG ( msg   ) 
Wert:
if ( find_player("zesstra") ) \
                      tell_object( find_player("zesstra"), "MAILER: "+msg )

Definiert in Zeile 74 der Datei mailer.c.

#define MAIL_DELAYED   4096

Definiert in Zeile 82 der Datei mailer.c.

Wird benutzt von DeliverMail().

#define MG_NAMES   ({ MUDNAME, "mg", "morgengrauen", "mud", "mg.mud.de" })

Definiert in Zeile 171 der Datei mailer.c.

Wird benutzt von expand().

#define NOTIFY_RECIPIENT

Definiert in Zeile 77 der Datei mailer.c.

#define SECURITY ( x   )     (geteuid(x) == ROOTID || geteuid(x) == MAILID)

Definiert in Zeile 80 der Datei mailer.c.

Wird benutzt von DeleteUnreadFolder(), MakeFolder(), MoveMsg(), RemoveFolder() und RemoveMsg().


Dokumentation der Funktionen

static string _filter_addr ( string  addr  )  [static]

Definiert in Zeile 245 der Datei mailer.c.

00246 {
00247     addr = regreplace( addr, "[^<]*<(.*)>[^>]*", "\\1", 0);
00248     return regreplace( addr, " *([^ ][^ ]*).*", "\\1", 0);
00249 }

static string _unify ( string  str  )  [static]

Definiert in Zeile 153 der Datei mailer.c.

00154 {
00155     return str[0] == '\\' ? str[1..] : str;
00156 }

protected void create (  ) 

Definiert in Zeile 109 der Datei mailer.c.

Benutzt alias, i und ROOTID.

00110 {
00111     mixed tmp;
00112     int i;
00113     string s1, s2;
00114   
00115     seteuid(ROOTID);
00116     alias=([]);
00117     
00118     if ( tmp = read_file("/mail/system.mailrc") ){
00119         tmp = explode( tmp, "\n" );
00120         
00121         for ( i = sizeof(tmp); i--; )
00122             if ( sscanf( tmp[i], "%s %s", s1, s2 ) == 2 )
00123                 alias[s1] = s2;
00124     }
00125 }

public int DeleteUnreadFolder ( string  user  ) 

Definiert in Zeile 512 der Datei mailer.c.

Benutzt folders, GetFolders(), MAILPATH, member_array(), save_object() und SECURITY.

00513 {
00514     int unread, newmail;
00515 
00516     if ( !SECURITY(previous_object()) )
00517         return -2;
00518 
00519     if ( !GetFolders(user) )
00520         return -1; /* Source folder not found */
00521 
00522     if ( (unread = member_array( "unread", folders[0] )) == -1 )
00523         return 0;
00524     
00525     if ( (newmail = member_array( "newmail", folders[0] )) == -1 ){
00526         folders[0] += ({ "newmail" });
00527         folders[1] += ({({})}); 
00528         newmail = sizeof(folders[1]) - 1;
00529     }
00530     
00531     if ( !pointerp(folders[1][newmail]) )
00532         folders[1][newmail] = ({});
00533     
00534     if ( pointerp(folders[1][unread]) )
00535         folders[1][newmail] += folders[1][unread];
00536     
00537     folders[0][unread..unread] = ({});
00538     folders[1][unread..unread] = ({});
00539 
00540     save_object( MAILPATH + user[0..0] + "/" + user );
00541     return 0;
00542 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public void deliver_mail ( string  recipient,
string  from,
string  subject,
string  mail_body 
)

Definiert in Zeile 609 der Datei mailer.c.

Benutzt ctime(), DEBUG und DeliverMail().

Wird benutzt von retry_send().

00614 {
00615     DEBUG( sprintf("DELIVER %O\n",
00616                    ({ from, from, recipient, ({}), ({}), subject, time() })) );
00617 
00618     // Geloggt wird, wenn ein aufrufendes Objekt nicht sicher ist.
00619     if (object_name(previous_object())[0..7]!="/secure/")
00620       write_file("/secure/ARCH/DELIVER_MAIL",
00621      sprintf("%s : Aufruf von /secure/mailer->deliver_mail()\n"
00622           "  Sender: %O Empfaenger: %O\n  PO: %O TI: %O TP:%O\n\n",
00623           ctime(time()),from, recipient,
00624           previous_object(), this_interactive(), this_player()));
00625     
00626     DeliverMail( ({ from, from, recipient, ({}), ({}), subject, time(),
00627                     "EXTERNAL", mail_body }), 0 );
00628 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public string * DeliverMail ( mixed  msg,
int  expa 
)

Definiert in Zeile 259 der Datei mailer.c.

Benutzt BOUNCE_ADDR, ctime(), DEBUG, dtime(), expand(), i, log_file, MAIL_DELAYED, MSG_BCC, MSG_BODY, MSG_CC, MSG_FROM, MSG_RECIPIENT, MSG_SENDER, MSG_SUBJECT, MUDNAME, NO_CARBON_COPIES, rec(), save_msg(), SAVEPATH, sender, UDPSERV und unify().

Wird benutzt von deliver_mail() und versende_mail().

00260 {
00261     string sender, *recipients, *recok, t, *tmp;
00262     mixed *newmsg;
00263     int i;
00264 #ifdef INTERNET_MAIL_ENABLED
00265     int ext;
00266 #endif
00267 
00268     if ( !pointerp(msg) || sizeof(msg) != 9 )
00269         return 0;
00270 
00271     DEBUG( sprintf( "DeliverMail: %O %O\n", msg[0..4] +({0})+ msg[6..7], expa ) );
00272     t = ctime(time());
00273 
00274     if ( !(expa & MAIL_DELAYED) ){
00275         /* determine the real sender */
00276         if ( extern_call() && object_name(previous_object())[0..7] != "/secure/" )
00277             sender = getuid( this_interactive() || previous_object() );
00278         else
00279             sender = msg[MSG_SENDER];
00280         
00281         /* make a list of all recipients */
00282         recipients = ({ msg[MSG_RECIPIENT] });
00283         
00284         if ( !(expa & NO_CARBON_COPIES) ){
00285             if ( pointerp(msg[MSG_CC]) )
00286                 recipients += msg[MSG_CC];
00287             
00288             if ( pointerp(msg[MSG_BCC]) )
00289                 recipients += msg[MSG_BCC];
00290         }
00291 
00292         // Mail-Aliase ersetzen
00293         recipients = expand( recipients, expa );
00294     
00295         // doppelte Adressen loeschen (nebenbei: auf Kleinschreibung wandeln)
00296         recipients = unify( recipients );
00297     
00298         // Realnamen und Kommentare entfernen
00299         recipients = map( recipients, "_filter_addr", this_object() );
00300     
00301         // auf ungueltige Zeichen checken
00302         if ( sizeof(tmp = regexp( recipients, "^[-_.@a-z0-9]*$" ))
00303              != sizeof(recipients) ){
00304             tmp = recipients - tmp;
00305             
00306             for ( i = sizeof(tmp); i--; )
00307                 log_file( "MAIL_INVALID", sprintf( "%s: Mail von %O (%O) an "
00308                                                    "'%O'.\n", dtime(time()),
00309                                                    msg[MSG_FROM],
00310                                                    sender, tmp[i] ) );
00311             
00312             recipients -= tmp;
00313         }
00314 
00315      // check for valid Subject and Body
00316      if (!stringp(msg[MSG_SUBJECT]))
00317          msg[MSG_SUBJECT] = "(no subject given)";
00318      if (!stringp(msg[MSG_BODY]))
00319          msg[MSG_BODY] =
00320            "\n\nSorry - This mail was delivered without a mail body\n\n";
00321 
00322         DEBUG( sprintf( "NEED TO DELIVER TO %O\n", recipients ) );
00323 
00324         /* build the new message */
00325         newmsg = ({ msg[MSG_FROM], sender, msg[MSG_RECIPIENT],
00326                         msg[MSG_CC], "", msg[MSG_SUBJECT],
00327                         dtime(time()), MUDNAME + ":" + time(),
00328                         msg[MSG_BODY] });
00329     }
00330     
00331     /* Send it off ... */
00332     recok = ({ });
00333 
00334     // ACHTUNG: durch expand() geaenderte Adressen werden zugestellt,
00335     // aber durch /mail/mailer.c zusaetzlich als unzustellbar genannt!
00336     
00337     for ( i = sizeof(recipients); i-- /*&& get_eval_cost() > 500000*/; ){
00338         DEBUG( sprintf( "Begin delivering to %s. Evalcosts left: %d.\n",
00339                         recipients[i], get_eval_cost() ) );
00340         if ( member( recipients[i], '@' ) > 0 &&
00341              strstr( recipients[i], "daemon" ) < 0 ) {
00342             string rec, mud;
00343             
00344             tmp = explode( recipients[i], "@" );
00345             mud = tmp[1];
00346             rec = tmp[0];
00347             sender = regreplace( sender, "@", "%", 1 );
00348             // Zustellung via Intermud-Mail an andere Muds.
00349             if ( member( mud, '.' ) == -1 ) {
00350                 "/secure/udp_mail"->deliver_mail( rec, mud, sender,
00351                                                   msg[MSG_SUBJECT],
00352                                                   msg[MSG_BODY] );
00353                 recok += ({ recipients[i] });
00354             }
00355 #ifdef INTERNET_MAIL_ENABLED
00356             // Zustellung in den Rest des Internets.
00357             else {
00358                 ext = 1;
00359                 sender = explode( sender, "%" )[0];
00360                 rec = explode( regreplace( rec, "@", "%", 1 ), "%" )[0];
00361                 mud = explode( regreplace( mud, "@", "%", 1 ), "%" )[0];
00362 
00363                 write_file( sprintf( "/mail/outbound/%s.%d-%d-%d",
00364                                      sender, time(), i, random(123456) ),
00365                             sprintf( "%s\n%s@%s\n"
00366                             "Subject: %s\n"
00367                          "X-MUD-From: %s\n"
00368                          "X-MUD-To: %s\n"
00369                          "X-MUD-Cc: %s\n"
00370                          "X-MU-Subject: %s\n\n",
00371                          sender, rec, mud,
00372                                      msg[MSG_SUBJECT],
00373                                      sender, recipients[0],
00374                                      pointerp(msg[MSG_CC]) ?
00375                                      implode( msg[MSG_CC], "," ) : "",
00376                                      msg[MSG_SUBJECT] ) + msg[MSG_BODY] +
00377                             sprintf( FOOTER, t[4..10] + t[20..], t[11..18] )
00378                             + "\n" );
00379                 recok += ({ recipients[i] });
00380             }
00381 #endif // INTERNET_MAIL_ENABLED
00382 
00383         }
00384         else
00385             if ( file_size( SAVEPATH + recipients[i][0..0] + "/" +
00386                             recipients[i] + ".o" ) >=0 ){
00387                 save_msg( newmsg, recipients[i] );
00388                 recok += ({ recipients[i] });
00389             }
00390             else {
00391                 string *tmpmsg = copy(newmsg);
00392                 tmpmsg[MSG_BODY] = "--- Text der Mail geloescht. ---\n";
00393                 write_file( sprintf( "/mail/outbound/postmaster.%d-%d",
00394                                      time(), random(time()) ),
00395                             sprintf( "postmaster\n" + BOUNCE_ADDR + 
00396                                      "\nSubject: Undeliverable Mail\n%O\n",
00397                                      tmpmsg) );
00398             }
00399         DEBUG( sprintf( "End delivering to %s. Evalcosts left: %d.\n",
00400                         recipients[i], get_eval_cost() ) );
00401     }
00402 #ifdef INTERNET_MAIL_ENABLED
00403     if ( ext )
00404         send_udp( UDPSERV, 4123, "DELIVERMAIL" );
00405 #endif
00406     return recok;
00407 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static string * expand ( string *  addr,
int  expa 
) [static]

Definiert in Zeile 209 der Datei mailer.c.

Benutzt expandSystemRecursive(), FWSERV, i, MG_NAMES, NO_SYSTEM_ALIASES und NO_USER_ALIASES.

Wird benutzt von DeliverMail().

00210 {
00211     string tmp, *new, *ret;
00212     int i;
00213     closure qf;
00214 
00215     ret = ({});
00216     addr -= ({""});
00217     qf = symbol_function( "QueryForward", FWSERV );
00218 
00219     for ( i = sizeof(addr); i--; ){
00220         addr[i] = lower_case( addr[i] );
00221         // @morgengrauen-namen werden lokal zugestellt.
00222         if ( sizeof(new = explode( addr[i], "@" )) == 2  &&
00223              member( MG_NAMES, new[1] ) != -1 )
00224             addr[i] = new[0];
00225 
00226         if ( !(expa & NO_SYSTEM_ALIASES) && tmp = expandSystemRecursive(addr[i],0) ){
00227             ret += explode( tmp, "," );
00228         }
00229         else
00230             ret += ({ addr[i] });
00231     }
00232     
00233     for ( i = sizeof(ret); i--; ){
00234         if ( ret[i][0] == '\\' )
00235             ret[i] = ret[i][1..];
00236         else if ( !(expa & NO_USER_ALIASES) )
00237             ret = ret - ({ ret[i] }) +
00238                 explode( funcall( qf, ret[i] ), "," );
00239     }
00240     
00241     return ret;
00242 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

string expandSystemRecursive ( string  addr,
int  maxrec 
)

Definiert in Zeile 173 der Datei mailer.c.

Benutzt alias, i und list.

Wird benutzt von expand().

00173                                                     {
00174   string *list,*tlist;
00175   string ret,tmp;
00176   int i,size;
00177   
00178   if(maxrec>8 || !addr){
00179     return addr;
00180   }
00181   maxrec++;
00182   
00183   tlist=({});
00184   ret="";
00185 
00186   list=explode(addr,",");
00187   list-=({""});
00188   size=sizeof(list);
00189   for(i=0;i<size;i++){
00190     if(tmp=alias[list[i]]){
00191       tlist+=explode(tmp,",");
00192     }
00193     else{
00194       tlist+=({list[i]});
00195     }
00196   }
00197   tlist-=({""});  
00198   ret=implode(tlist,",");
00199 
00200   if((ret!=addr)!=0){
00201     ret=expandSystemRecursive(ret,maxrec);
00202   }
00203   return ret;
00204 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public int FingerMail ( string  user  ) 

Definiert in Zeile 410 der Datei mailer.c.

Benutzt ARCH_SECURITY, folders, GetFolders(), i, member_array() und process_call().

00411 {
00412     int newfolder, i;
00413 
00414     //Zugriff beschraenken, Zahl der gelesenen Mails ist Privatsphaere
00415     if (!objectp(this_interactive()) || !stringp(user) || !strlen(user)) 
00416      return(-1);
00417     if ((getuid(this_interactive())!=user) &&
00418      (process_call() || !ARCH_SECURITY)) return(-1);
00419 
00420     if ( !GetFolders(user) )
00421         return 0;
00422 
00423     if ( (newfolder = member_array( "unread", folders[0] )) != -1 )
00424         return sizeof(folders[1][newfolder]);
00425 
00426     return 0;
00427 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

static int GetFolders ( string  user  )  [static]

Definiert in Zeile 133 der Datei mailer.c.

Benutzt cachedname, DEBUG, folders, MAILPATH und restore_object().

Wird benutzt von DeleteUnreadFolder(), FingerMail(), MakeFolder(), MoveMsg(), RemoveFolder(), RemoveMsg() und save_msg().

00134 {
00135     if ( user == cachedname ){
00136         DEBUG( "Using cached folder for " + user + "\n" );
00137         return sizeof(folders[1]);
00138     }
00139     
00140     cachedname = user;
00141     
00142     if ( !restore_object( MAILPATH + "/" + user[0..0] + "/" + user ) ){
00143         DEBUG( "Loading folder: " + user + " (empty)\n" );
00144         folders = ({ ({}), ({}) });
00145         return 0;
00146     }
00147     
00148     DEBUG( "Loading folder:" + user + "\n" );
00149     return 1;
00150 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

public int MakeFolder ( string  folder,
string  user 
)

Definiert in Zeile 569 der Datei mailer.c.

Benutzt folders, GetFolders(), MAILPATH, member_array(), save_object() und SECURITY.

00570 {
00571     if ( !SECURITY(previous_object()) )
00572         return -2;
00573     
00574     if ( !folder || !stringp(folder) )
00575         return -1; /* Huh ? */
00576 
00577     if ( folder == "unread" )
00578         return 0; /* Folder exists virtually :) */
00579 
00580     GetFolders( user );
00581 
00582     if ( member_array( folder, folders[0] ) != -1 )
00583         return 0; /* Folder exists */
00584 
00585     folders[0] = folders[0] + ({ folder });
00586     folders[1] = folders[1] + ({ ({}) });
00587     
00588     save_object( MAILPATH + user[0..0] + "/" + user );
00589     return 1;
00590 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public int MoveMsg ( int  msg,
int  folder,
string  newfolder,
string  user 
)

Definiert in Zeile 480 der Datei mailer.c.

Benutzt folders, GetFolders(), member_array(), RemoveMsg() und SECURITY.

00481 {
00482     int target;
00483 
00484     if ( !SECURITY(previous_object()) )
00485         return -2;
00486 
00487     if ( !GetFolders(user) )
00488         return -1; /* Source folder not found */
00489 
00490     if ( !pointerp(folders) || !pointerp(folders[0]) || 
00491          folder >= sizeof(folders[0]) )
00492         return -1;
00493   
00494     if ( msg < 0 || sizeof(folders[1][folder]) <= msg )
00495         return 0; /* No such msg */
00496 
00497     if ( (target = member_array( newfolder, folders[0] )) == -1 )
00498         return -3;
00499 
00500     if ( target == folder )
00501         return 1;
00502 
00503     if ( !pointerp(folders[1][target]) ) 
00504         folders[1][target] = ({ folders[1][folder][msg] });
00505     else 
00506         folders[1][target] += ({ folders[1][folder][msg] });
00507 
00508     return RemoveMsg( msg, folder, user );
00509 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public int query_recipient_ok ( string  name  ) 

Definiert in Zeile 593 der Datei mailer.c.

00594 {
00595 #if INTERNET_MAIL_ENABLED
00596     return  (file_size( "secure/save/" + name[0..0] + "/" + name + ".o" ) > 0
00597         || member( name, '%' ) > 0 || member( name, '@' ) > 0 );
00598 #else
00599     // es darf zwar ein @ in der Adresse vorkommen, dahinter aber kein . mehr
00600     // (dann ist es ne Mail via Intermud-Mail, nicht ins Internet).
00601     string *tmp;
00602     return  (file_size( "secure/save/" + name[0..0] + "/" + name + ".o" ) > 0
00603         || member( name, '%' ) > 0
00604         || (sizeof(tmp=explode(name,"@")) == 2 && strstr(tmp[1],".") == -1));
00605 #endif
00606 }

public int RemoveFolder ( string  folder,
string  user 
)

Definiert in Zeile 545 der Datei mailer.c.

Benutzt folders, GetFolders(), i, MAILPATH, member_array(), save_object() und SECURITY.

00546 {
00547     int i;
00548 
00549     if ( !SECURITY(previous_object()) )
00550         return -2;
00551 
00552     if ( !GetFolders(user) )
00553         return -1; /* No such folder */
00554 
00555     if ( (i = member_array( folder, folders[0] )) == -1 )
00556         return -1; /* No such folder */
00557 
00558     if ( sizeof(folders[1][i]) > 0 )
00559         return 0; /* Folder not empty */
00560 
00561     folders[0][i..i] = ({});
00562     folders[1][i..i] = ({});
00563 
00564     save_object( MAILPATH + user[0..0] + "/" + user );
00565     return 1;
00566 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

public int RemoveMsg ( int  msg,
int  folder,
string  user 
)

Definiert in Zeile 457 der Datei mailer.c.

Benutzt folders, GetFolders(), MAILPATH, save_object() und SECURITY.

Wird benutzt von MoveMsg().

00458 {
00459     if ( !SECURITY(previous_object()) )
00460         return -2;
00461 
00462     if ( !GetFolders(user) ) 
00463         return -1; /* No such folder */
00464 
00465     if ( !pointerp(folders) || !pointerp(folders[0]) || 
00466          folder >= sizeof(folders[0]) )
00467         return -1;
00468 
00469     if ( msg < 0 || sizeof(folders[1][folder]) <= msg )
00470         return 0; /* No such msg */
00471 
00472     folders[1][folder][msg..msg] = ({});
00473     
00474     save_object( MAILPATH + user[0..0] + "/" + user );
00475     return 1; /* Success */
00476 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static void save_msg ( mixed  msg,
string  user 
) [static]

Definiert in Zeile 430 der Datei mailer.c.

Benutzt find_player(), folders, GetFolders(), MAILPATH, member_array(), p und save_object().

Wird benutzt von DeliverMail().

00431 {
00432     int newfolder;
00433     object p;
00434   
00435     GetFolders( user );
00436 
00437     /* if folder 'unread' doesn't exist, create it */
00438     newfolder = member_array( "unread", folders[0] );
00439     
00440     if ( newfolder == -1 ){
00441         folders[0] += ({ "unread" });
00442         folders[1] += ({ ({ }) });
00443         newfolder = member_array( "unread", folders[0] );
00444     }
00445     
00446     folders[1][newfolder] += ({ msg });
00447     save_object( MAILPATH + user[0..0] + "/" + user );
00448 #ifdef NOTIFY_RECIPIENT
00449     if ( p = find_player(user) )
00450         tell_object( p, "Ein Postreiter ruft Dir aus einiger Entfernung zu, "
00451                      "dass Du neue Post hast!\n" );
00452 #endif
00453 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static string * unify ( string *  str  )  [static]

Definiert in Zeile 159 der Datei mailer.c.

Wird benutzt von DeliverMail().

00160 {
00161     if ( !pointerp(str) )
00162         return ({});
00163     
00164     str = map( filter( str, #'stringp/*'*/ ), #'lower_case/*'*/ );
00165     str = map( str, "_unify", this_object() );
00166 
00167     return m_indices( mkmapping(str) );
00168 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:


Variablen-Dokumentation

mapping alias [static]

Definiert in Zeile 105 der Datei mailer.c.

Wird benutzt von create() und expandSystemRecursive().

string cachedname [static]

Definiert in Zeile 106 der Datei mailer.c.

Wird benutzt von GetFolders().

mixed* folders

Definiert in Zeile 104 der Datei mailer.c.

Erzeugt am Thu Jun 3 14:39:27 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3