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