1*fb52cf35Schristos /*	$NetBSD: mail_server.h,v 1.4 2022/10/08 16:12:46 christos Exp $	*/
241fbaed0Stron 
341fbaed0Stron /*++
441fbaed0Stron /* NAME
541fbaed0Stron /*	mail_server 3h
641fbaed0Stron /* SUMMARY
741fbaed0Stron /*	skeleton servers
841fbaed0Stron /* SYNOPSIS
941fbaed0Stron /*	#include <mail_server.h>
1041fbaed0Stron /* DESCRIPTION
1141fbaed0Stron /* .nf
1241fbaed0Stron 
1341fbaed0Stron  /*
1441fbaed0Stron   * Utility library.
1541fbaed0Stron   */
1641fbaed0Stron #include <vstream.h>
17*fb52cf35Schristos #include <htable.h>
1841fbaed0Stron 
1941fbaed0Stron  /*
20837e7c1aSchristos   * Global library.
21837e7c1aSchristos   */
22837e7c1aSchristos #include <mail_conf.h>
23837e7c1aSchristos 
24837e7c1aSchristos  /*
2541fbaed0Stron   * External interface. Tables are defined in mail_conf.h.
2641fbaed0Stron   */
2741fbaed0Stron #define MAIL_SERVER_INT_TABLE	1
2841fbaed0Stron #define MAIL_SERVER_STR_TABLE	2
2941fbaed0Stron #define MAIL_SERVER_BOOL_TABLE	3
3041fbaed0Stron #define MAIL_SERVER_TIME_TABLE	4
3141fbaed0Stron #define MAIL_SERVER_RAW_TABLE	5
3241fbaed0Stron #define MAIL_SERVER_NINT_TABLE	6
33e8314800Stron #define MAIL_SERVER_NBOOL_TABLE	7
34e694ac3bStron #define MAIL_SERVER_LONG_TABLE	8
3541fbaed0Stron 
3641fbaed0Stron #define	MAIL_SERVER_PRE_INIT	10
3741fbaed0Stron #define MAIL_SERVER_POST_INIT	11
3841fbaed0Stron #define MAIL_SERVER_LOOP	12
3941fbaed0Stron #define MAIL_SERVER_EXIT	13
4041fbaed0Stron #define MAIL_SERVER_PRE_ACCEPT	14
4141fbaed0Stron #define MAIL_SERVER_SOLITARY	15
4241fbaed0Stron #define MAIL_SERVER_UNLIMITED	16
4341fbaed0Stron #define MAIL_SERVER_PRE_DISCONN	17
4441fbaed0Stron #define MAIL_SERVER_PRIVILEGED	18
4541fbaed0Stron #define MAIL_SERVER_WATCHDOG	19
4641fbaed0Stron 
4741fbaed0Stron #define MAIL_SERVER_IN_FLOW_DELAY	20
4828e9a2d2Stron #define MAIL_SERVER_SLOW_EXIT	21
49837e7c1aSchristos #define MAIL_SERVER_BOUNCE_INIT	22
503c275423Schristos #define MAIL_SERVER_RETIRE_ME	23
51*fb52cf35Schristos #define MAIL_SERVER_POST_ACCEPT	24
5241fbaed0Stron 
5341fbaed0Stron typedef void (*MAIL_SERVER_INIT_FN) (char *, char **);
5441fbaed0Stron typedef int (*MAIL_SERVER_LOOP_FN) (char *, char **);
5541fbaed0Stron typedef void (*MAIL_SERVER_EXIT_FN) (char *, char **);
5641fbaed0Stron typedef void (*MAIL_SERVER_ACCEPT_FN) (char *, char **);
57*fb52cf35Schristos typedef void (*MAIL_SERVER_POST_ACCEPT_FN) (VSTREAM *, char *, char **, HTABLE *);
5841fbaed0Stron typedef void (*MAIL_SERVER_DISCONN_FN) (VSTREAM *, char *, char **);
5928e9a2d2Stron typedef void (*MAIL_SERVER_SLOW_EXIT_FN) (char *, char **);
6041fbaed0Stron 
61837e7c1aSchristos /* Type-checked API for external use. */
62837e7c1aSchristos #define CA_MAIL_SERVER_INT_TABLE(v)	MAIL_SERVER_INT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_INT_TABLE, (v))
63837e7c1aSchristos #define CA_MAIL_SERVER_STR_TABLE(v)	MAIL_SERVER_STR_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_STR_TABLE, (v))
64837e7c1aSchristos #define CA_MAIL_SERVER_BOOL_TABLE(v)	MAIL_SERVER_BOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_BOOL_TABLE, (v))
65837e7c1aSchristos #define CA_MAIL_SERVER_TIME_TABLE(v)	MAIL_SERVER_TIME_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_TIME_TABLE, (v))
66837e7c1aSchristos #define CA_MAIL_SERVER_RAW_TABLE(v)	MAIL_SERVER_RAW_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_RAW_TABLE, (v))
67837e7c1aSchristos #define CA_MAIL_SERVER_NINT_TABLE(v)	MAIL_SERVER_NINT_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NINT_TABLE, (v))
68837e7c1aSchristos #define CA_MAIL_SERVER_NBOOL_TABLE(v)	MAIL_SERVER_NBOOL_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_NBOOL_TABLE, (v))
69837e7c1aSchristos #define CA_MAIL_SERVER_LONG_TABLE(v)	MAIL_SERVER_LONG_TABLE, CHECK_CPTR(MAIL_SERVER, CONFIG_LONG_TABLE, (v))
70837e7c1aSchristos #define CA_MAIL_SERVER_PRE_INIT(v)	MAIL_SERVER_PRE_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v))
71837e7c1aSchristos #define CA_MAIL_SERVER_POST_INIT(v)	MAIL_SERVER_POST_INIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_INIT_FN, (v))
72837e7c1aSchristos #define CA_MAIL_SERVER_LOOP(v)		MAIL_SERVER_LOOP, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_LOOP_FN, (v))
73837e7c1aSchristos #define CA_MAIL_SERVER_EXIT(v)		MAIL_SERVER_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_EXIT_FN, (v))
74837e7c1aSchristos #define CA_MAIL_SERVER_PRE_ACCEPT(v)	MAIL_SERVER_PRE_ACCEPT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN, (v))
75*fb52cf35Schristos #define CA_MAIL_SERVER_POST_ACCEPT(v)	MAIL_SERVER_POST_ACCEPT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_POST_ACCEPT_FN, (v))
76837e7c1aSchristos #define CA_MAIL_SERVER_SOLITARY	MAIL_SERVER_SOLITARY
77837e7c1aSchristos #define CA_MAIL_SERVER_UNLIMITED	MAIL_SERVER_UNLIMITED
78837e7c1aSchristos #define CA_MAIL_SERVER_PRE_DISCONN(v)	MAIL_SERVER_PRE_DISCONN, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN, (v))
79837e7c1aSchristos #define CA_MAIL_SERVER_PRIVILEGED	MAIL_SERVER_PRIVILEGED
80837e7c1aSchristos #define CA_MAIL_SERVER_WATCHDOG(v)	MAIL_SERVER_WATCHDOG, CHECK_PTR(MAIL_SERVER, int, (v))
81837e7c1aSchristos #define CA_MAIL_SERVER_IN_FLOW_DELAY	MAIL_SERVER_IN_FLOW_DELAY
82837e7c1aSchristos #define CA_MAIL_SERVER_SLOW_EXIT(v)	MAIL_SERVER_SLOW_EXIT, CHECK_VAL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN, (v))
83837e7c1aSchristos #define CA_MAIL_SERVER_BOUNCE_INIT(v, w) MAIL_SERVER_BOUNCE_INIT, CHECK_PTR(MAIL_SERVER, char, (v)), CHECK_PPTR(MAIL_SERVER, char, (w))
843c275423Schristos #define CA_MAIL_SERVER_RETIRE_ME	MAIL_SERVER_RETIRE_ME
85837e7c1aSchristos 
86837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_SLOW_EXIT_FN);
87837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_LOOP_FN);
88837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_INIT_FN);
89837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_EXIT_FN);
90837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_DISCONN_FN);
91837e7c1aSchristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_ACCEPT_FN);
92*fb52cf35Schristos CHECK_VAL_HELPER_DCL(MAIL_SERVER, MAIL_SERVER_POST_ACCEPT_FN);
93837e7c1aSchristos CHECK_PTR_HELPER_DCL(MAIL_SERVER, int);
94837e7c1aSchristos CHECK_PTR_HELPER_DCL(MAIL_SERVER, char);
95837e7c1aSchristos CHECK_PPTR_HELPER_DCL(MAIL_SERVER, char);
96837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_TIME_TABLE);
97837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_STR_TABLE);
98837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_RAW_TABLE);
99837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NINT_TABLE);
100837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_NBOOL_TABLE);
101837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_LONG_TABLE);
102837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_INT_TABLE);
103837e7c1aSchristos CHECK_CPTR_HELPER_DCL(MAIL_SERVER, CONFIG_BOOL_TABLE);
104837e7c1aSchristos 
10541fbaed0Stron  /*
10641fbaed0Stron   * single_server.c
10741fbaed0Stron   */
10841fbaed0Stron typedef void (*SINGLE_SERVER_FN) (VSTREAM *, char *, char **);
10941fbaed0Stron extern NORETURN single_server_main(int, char **, SINGLE_SERVER_FN,...);
11041fbaed0Stron 
11141fbaed0Stron  /*
11241fbaed0Stron   * multi_server.c
11341fbaed0Stron   */
11441fbaed0Stron typedef void (*MULTI_SERVER_FN) (VSTREAM *, char *, char **);
11541fbaed0Stron extern NORETURN multi_server_main(int, char **, MULTI_SERVER_FN,...);
11641fbaed0Stron extern void multi_server_disconnect(VSTREAM *);
11741fbaed0Stron extern int multi_server_drain(void);
11841fbaed0Stron 
11941fbaed0Stron  /*
12028e9a2d2Stron   * event_server.c
12128e9a2d2Stron   */
12228e9a2d2Stron typedef void (*EVENT_SERVER_FN) (VSTREAM *, char *, char **);
12328e9a2d2Stron extern NORETURN event_server_main(int, char **, EVENT_SERVER_FN,...);
12428e9a2d2Stron extern void event_server_disconnect(VSTREAM *);
12528e9a2d2Stron extern int event_server_drain(void);
12628e9a2d2Stron 
12728e9a2d2Stron  /*
12841fbaed0Stron   * trigger_server.c
12941fbaed0Stron   */
130837e7c1aSchristos typedef void (*TRIGGER_SERVER_FN) (char *, ssize_t, char *, char **);
13141fbaed0Stron extern NORETURN trigger_server_main(int, char **, TRIGGER_SERVER_FN,...);
13241fbaed0Stron 
13341fbaed0Stron #define TRIGGER_BUF_SIZE	1024
13441fbaed0Stron 
1353c275423Schristos  /*
1363c275423Schristos   * dgram_server.c
1373c275423Schristos   */
1383c275423Schristos typedef void (*DGRAM_SERVER_FN) (char *, ssize_t, char *, char **);
1393c275423Schristos extern NORETURN dgram_server_main(int, char **, DGRAM_SERVER_FN,...);
1403c275423Schristos 
1413c275423Schristos #define DGRAM_BUF_SIZE	4096
1423c275423Schristos 
14341fbaed0Stron /* LICENSE
14441fbaed0Stron /* .ad
14541fbaed0Stron /* .fi
14641fbaed0Stron /*	The Secure Mailer license must be distributed with this software.
14741fbaed0Stron /* AUTHOR(S)
14841fbaed0Stron /*	Wietse Venema
14941fbaed0Stron /*	IBM T.J. Watson Research
15041fbaed0Stron /*	P.O. Box 704
15141fbaed0Stron /*	Yorktown Heights, NY 10598, USA
1523c275423Schristos /*
1533c275423Schristos /*	Wietse Venema
1543c275423Schristos /*	Google, Inc.
1553c275423Schristos /*	111 8th Avenue
1563c275423Schristos /*	New York, NY 10011, USA
15741fbaed0Stron /*--*/
158