Driver interface
When writing a new driver for the c-client, you must provide a
DRIVER stucture giving a dispatch vector between MAIL and the driver.
The DRIVER dispatch vector is described in mail.h.
char *name;
Name by which the driver is known to c-client.
unsigned long flags;
Attribute flags for this driver:
DR_DISABLE This driver is currently disabled.
DR_LOCAL This driver deals with local mailboxes; if
this is off it deals with mailboxes over a
network.
DR_MAIL This driver supports e-mail messages.
DR_NEWS This driver supports netnews messages
DR_READONLY This driver only allows read-only access;
mail_setflag(), mail_expunge(), etc. are
no-ops.
DR_NOFAST This driver does not implement mail_fetchfast()
in a fast way (e.g. it may have to fetch the
entire message text over a network to
calculate sizes).
DR_NAMESPACE This driver accepts and uses namespace format
names.
DR_LOWMEM This driver is designed for systems with very
limited amounts of memory (e.g. DOS) and
support routines called by this driver should
try not to use much memory.
DRIVER *next;
Pointer to the next driver which this application supports (or NIL if
this is the last driver). Drivers are lunk together via the mail_link()
function.
DRIVER *driver_valid (char *mailbox);
This function returns a pointer to the driver's DRIVER dispatch
vector iff this driver accepts the given name as a valid mailbox for this
driver. Otherwise, it returns the value of the next driver's
driver_valid() or NIL if there is no next driver. In other words, calling
driver_valid() for the first driver will return the driver dispatch vector
for the driver which supports this type of mailbox.
void *driver_parameters (long function,void *value);
This function implements mail_parameters() for this driver.
void driver_scan (MAILSTREAM *stream,char *ref,char *pat,char *contents);
This function implements mail_scan() for this driver.
void driver_list (MAILSTREAM *stream,char *ref,char *pat);
This function implements mail_list() for this driver.
void driver_lsub (MAILSTREAM *stream,char *ref,char *pat);
This function implements mail_lsub() for this driver.
long driver_subscribe (MAILSTREAM *stream,char *mailbox);
This function implements mail_subscribe() for this driver.
long driver_unsubscribe (MAILSTREAM *stream,char *mailbox);
This function implements mail_unsubscribe() for this driver.
long driver_create (MAILSTREAM *stream,char *mailbox);
This function implements mail_create() for this driver.
long driver_delete (MAILSTREAM *stream,char *mailbox);
This function implements mail_delete() for this driver.
long driver_rename (MAILSTREAM *stream,char *old,char *new);
This function implements mail_rename() for this driver.
long driver_status (MAILSTREAM *stream,char *mailbox,long flags);
This function implements mail_status() for this driver.
MAILSTREAM *driver_open (MAILSTREAM *stream);
This function opens the mailbox identified by the given stream. It
may use the data on the stream and create additional data on stream->local
as necessary. It should return the given stream unless it failed to open
the mailbox, in which case it should return NIL.
void driver_close (MAILSTREAM *stream,long options);
This function implements mail_close() for this driver.
void driver_fetchfast (MAILSTREAM *stream,char *sequence,long flags);
This function implements mail_fetchfast() for this driver.
void driver_fetchflags (MAILSTREAM *stream,char *sequence,long flags);
This function implements mail_fetchflags() for this driver.
ENVELOPE *driver_fetchstructure (MAILSTREAM *stream,unsigned long msgno,
BODY **body,long flags);
This function implements mail_fetchstructure() for this driver.
char *driver_fetchheader (MAILSTREAM *stream,unsigned long msgno,
STRINGLIST *lines,unsigned long *len,long flags);
This function implements mail_fetchheader() for this driver.
char *driver_fetchtext (MAILSTREAM *stream,unsigned long msgno,
unsigned long *len,long flags);
This function implements mail_fetchtext() for this driver.
char *driver_fetchbody (MAILSTREAM *stream,unsigned long msgno,char *section,
unsigned long *len,long flags);
This function implements mail_fetchbody() for this driver.
void driver_setflag (MAILSTREAM *stream,char *sequence,char *flag,long flags);
This function implements mail_setflag() for this driver.
void driver_clearflag (MAILSTREAM *stream,char *sequence,char *flag,
long flags);
This function implements mail_clearflag() for this driver.
void driver_search (MAILSTREAM *stream,char *charset,SEARCHPGM *pgm,
long flags);
This function implements mail_search() for this driver.
unsigned long *driver_sort (MAILSTREAM *stream,char *charset,SEARCHPGM *spg,
SORTPGM *pgm,long flags);
This function implements mail_sort() for this driver.
void *driver_thread (MAILSTREAM *stream,char *seq,long function,long flag);
This dispatch is reserved for a future threading capability.
long driver_ping (MAILSTREAM *stream);
This function implements mail_ping() for this driver.
void driver_check (MAILSTREAM *stream);
This function implements mail_check() for this driver.
void driver_expunge (MAILSTREAM *stream);
This function implements mail_expunge() for this driver.
long driver_copy (MAILSTREAM *stream,char *sequence,char *mailbox,
long options);
This function implements mail_copy() for this driver.
long driver_append (MAILSTREAM *stream,char *mailbox,char *flags,char *date,
STRING *message);
This function implements mail_append() for this driver.
void driver_gc (MAILSTREAM *stream,long gcflags);
This function implements mail_gc() for this driver.