Home | History | Annotate | Line # | Download | only in global
      1 /*	$NetBSD: mail_stream.h,v 1.2 2017/02/14 01:16:45 christos Exp $	*/
      2 
      3 #ifndef _MAIL_STREAM_H_INCLUDED_
      4 #define _MAIL_STREAM_H_INCLUDED_
      5 
      6 /*++
      7 /* NAME
      8 /*	mail_stream 3h
      9 /* SUMMARY
     10 /*	mail stream management
     11 /* SYNOPSIS
     12 /*	#include <mail_stream.h>
     13 /* DESCRIPTION
     14 /* .nf
     15 
     16  /*
     17   * System library.
     18   */
     19 #include <sys/time.h>
     20 
     21  /*
     22   * Utility library.
     23   */
     24 #include <vstream.h>
     25 #include <vstring.h>
     26 #include <check_arg.h>
     27 
     28  /*
     29   * External interface.
     30   */
     31 typedef struct MAIL_STREAM MAIL_STREAM;
     32 
     33 typedef int (*MAIL_STREAM_FINISH_FN) (MAIL_STREAM *, VSTRING *);
     34 typedef int (*MAIL_STREAM_CLOSE_FN) (VSTREAM *);
     35 
     36 struct MAIL_STREAM {
     37     VSTREAM *stream;			/* file or pipe or socket */
     38     char   *queue;			/* (initial) queue name */
     39     char   *id;				/* queue id */
     40     MAIL_STREAM_FINISH_FN finish;	/* finish code */
     41     MAIL_STREAM_CLOSE_FN close;		/* close stream */
     42     char   *class;			/* trigger class */
     43     char   *service;			/* trigger service */
     44     int     mode;			/* additional permissions */
     45 #ifdef DELAY_ACTION
     46     int     delay;			/* deferred delivery */
     47 #endif
     48     struct timeval ctime;		/* creation time */
     49 };
     50 
     51 /* Legacy type-unchecked API, internal use. */
     52 #define MAIL_STREAM_CTL_END	0	/* Terminator */
     53 #define MAIL_STREAM_CTL_QUEUE	1	/* Change queue */
     54 #define MAIL_STREAM_CTL_CLASS	2	/* Change notification class */
     55 #define MAIL_STREAM_CTL_SERVICE	3	/* Change notification service */
     56 #define MAIL_STREAM_CTL_MODE	4	/* Change final queue file mode */
     57 #ifdef DELAY_ACTION
     58 #define MAIL_STREAM_CTL_DELAY	5	/* Change final queue file mtime */
     59 #endif
     60 
     61 /* Type-checked API, external use. */
     62 #define CA_MAIL_STREAM_CTL_END		MAIL_STREAM_CTL_END
     63 #define CA_MAIL_STREAM_CTL_QUEUE(v)	MAIL_STREAM_CTL_QUEUE, CHECK_CPTR(MAIL_STREAM, char, (v))
     64 #define CA_MAIL_STREAM_CTL_CLASS(v)	MAIL_STREAM_CTL_CLASS, CHECK_CPTR(MAIL_STREAM, char, (v))
     65 #define CA_MAIL_STREAM_CTL_SERVICE(v)	MAIL_STREAM_CTL_SERVICE, CHECK_CPTR(MAIL_STREAM, char, (v))
     66 #define CA_MAIL_STREAM_CTL_MODE(v)	MAIL_STREAM_CTL_MODE, CHECK_VAL(MAIL_STREAM, int, (v))
     67 #ifdef DELAY_ACTION
     68 #define CA_MAIL_STREAM_CTL_DELAY(v)	MAIL_STREAM_CTL_DELAY, CHECK_VAL(MAIL_STREAM, int, (v))
     69 #endif
     70 
     71 CHECK_VAL_HELPER_DCL(MAIL_STREAM, int);
     72 CHECK_CPTR_HELPER_DCL(MAIL_STREAM, char);
     73 
     74 extern MAIL_STREAM *mail_stream_file(const char *, const char *, const char *, int);
     75 extern MAIL_STREAM *mail_stream_service(const char *, const char *);
     76 extern MAIL_STREAM *mail_stream_command(const char *);
     77 extern void mail_stream_cleanup(MAIL_STREAM *);
     78 extern int mail_stream_finish(MAIL_STREAM *, VSTRING *);
     79 extern void mail_stream_ctl(MAIL_STREAM *, int,...);
     80 
     81 
     82 /* LICENSE
     83 /* .ad
     84 /* .fi
     85 /*	The Secure Mailer license must be distributed with this software.
     86 /* AUTHOR(S)
     87 /*	Wietse Venema
     88 /*	IBM T.J. Watson Research
     89 /*	P.O. Box 704
     90 /*	Yorktown Heights, NY 10598, USA
     91 /*--*/
     92 
     93 #endif
     94