94 lines
2.6 KiB
C
94 lines
2.6 KiB
C
#define SMTPTRACE /* enable tracing for smtp */
|
|
#define MAXSESSIONS 10 /* most connections allowed */
|
|
#define JOBNAME 13 /* max size of a job name with null */
|
|
#define LINELEN 128
|
|
#define SLINELEN 32
|
|
#define MBOXLEN 8 /* max size of a mail box name */
|
|
|
|
|
|
/* types of address used by smtp in an address list */
|
|
#define BADADDR 0
|
|
#define LOCAL 1
|
|
#define DOMAIN 2
|
|
|
|
/* a list entry */
|
|
struct list {
|
|
struct list *next;
|
|
char *val;
|
|
char type;
|
|
};
|
|
|
|
|
|
/* Per-session control block used by smtp server */
|
|
struct mail {
|
|
struct tcb *tcb; /* TCP control block pointer */
|
|
char state;
|
|
#define COMMAND_STATE 0
|
|
#define DATA_STATE 1
|
|
char *system; /* Name of remote system */
|
|
char *from; /* sender address */
|
|
struct list *to; /* Linked list of recipients */
|
|
char buf[LINELEN]; /* Input buffer */
|
|
char cnt; /* Length of input buffer */
|
|
FILE *data; /* Temporary input file pointer */
|
|
};
|
|
|
|
/* used by smtpcli as a queue entry for a single message */
|
|
struct smtp_job {
|
|
struct smtp_job *next; /* pointer to next mail job for this system */
|
|
char jobname[9]; /* the prefix of the job file name */
|
|
char *from; /* address of sender */
|
|
struct list *to; /* Linked list of recipients */
|
|
};
|
|
|
|
/* control structure used by an smtp client session */
|
|
struct smtp_cb {
|
|
struct tcb *tcb; /* tcp task control buffer */
|
|
int32 ipdest; /* address of forwarding system */
|
|
char state; /* state machine placeholder */
|
|
#define CLI_INIT_STATE 0
|
|
#define CLI_OPEN_STATE 1
|
|
#define CLI_HELO_STATE 2
|
|
#define CLI_MAIL_STATE 3
|
|
#define CLI_RCPT_STATE 4
|
|
#define CLI_SEND_STATE 5
|
|
#define CLI_UNLK_STATE 6
|
|
#define CLI_QUIT_STATE 7
|
|
#define CLI_IDLE_STATE 8
|
|
char *wname; /* name of workfile */
|
|
char *tname; /* name of data file */
|
|
char buf[LINELEN]; /* Input buffer */
|
|
char cnt; /* Length of input buffer */
|
|
FILE *tfile;
|
|
struct smtp_job *jobq;
|
|
char goodrcpt; /* are any of the rcpt ok */
|
|
char cts; /* clear to send state indication */
|
|
int rcpts; /* number of unacked rcpt commands */
|
|
struct list *errlog;
|
|
};
|
|
|
|
/* smpt server routing mode */
|
|
#define QUEUE 1
|
|
|
|
#define NULLLIST (struct list *)0
|
|
#define NULLMAIL (struct mail *)0
|
|
#define NULLCB (struct smtp_cb *)0
|
|
#define NULLJOB (struct smtp_job *)0
|
|
|
|
|
|
extern char *mailspool;
|
|
extern char *mailqdir; /* Outgoing spool directory */
|
|
extern char *routeqdir; /* spool directory for a router program */
|
|
extern char *mailqueue; /* Prototype of work file */
|
|
extern char *maillock; /* Mail system lock */
|
|
extern char hostname[];
|
|
extern char *alias;
|
|
extern int32 mailroute();
|
|
extern int mlock(),rmlock(),queuejob();
|
|
extern char *ptime();
|
|
extern void del_list();
|
|
extern long get_msgid();
|
|
extern int16 smtpmode;
|
|
extern char *fgets();
|
|
extern struct list *addlist();
|