1 /*        $NetBSD: bounce_template.h,v 1.3 2022/10/08 16:12:45 christos Exp $   */
2 
3 #ifndef _BOUNCE_TEMPLATE_H_INCLUDED_
4 #define _BOUNCE_TEMPLATE_H_INCLUDED_
5 
6 /*++
7 /* NAME
8 /*        bounce_template 3h
9 /* SUMMARY
10 /*        bounce template support
11 /* SYNOPSIS
12 /*        #include <bounce_template.h>
13 /* DESCRIPTION
14 /* .nf
15 
16  /*
17   * Utility library.
18   */
19 #include <vstream.h>
20 
21  /*
22   * Structure of a single bounce template. Each template is manipulated by
23   * itself, without any external markers and delimiters. Applications are not
24   * supposed to access BOUNCE_TEMPLATE attributes directly.
25   */
26 typedef struct BOUNCE_TEMPLATE {
27     int     flags;
28     const char *class;                            /* for diagnostics (fixed) */
29     const char *origin;                           /* built-in or pathname */
30     const char *mime_charset;           /* character set (configurable) */
31     const char *mime_encoding;                    /* 7bit or 8bit (derived) */
32     const char *obs_from;               /* originator (configurable) */
33     const char *std_from;               /* originator (configurable) */
34     const char *subject;                /* general subject (configurable) */
35     const char *postmaster_subject;     /* postmaster subject (configurable) */
36     const char **message_text;                    /* message text (configurable) */
37     const struct BOUNCE_TEMPLATE *prototype;      /* defaults */
38     char   *buffer;                     /* ripped text */
39 } BOUNCE_TEMPLATE;
40 
41 #define BOUNCE_TMPL_FLAG_NEW_BUFFER     (1<<0)
42 
43 #define BOUNCE_TMPL_CLASS_FAILURE       "failure"
44 #define BOUNCE_TMPL_CLASS_DELAY                   "delay"
45 #define BOUNCE_TMPL_CLASS_SUCCESS       "success"
46 #define BOUNCE_TMPL_CLASS_VERIFY        "verify"
47 
48 #define IS_FAILURE_TEMPLATE(t)          ((t)->class[0] == BOUNCE_TMPL_CLASS_FAILURE[0])
49 #define IS_DELAY_TEMPLATE(t)  ((t)->class[0] == BOUNCE_TMPL_CLASS_DELAY[0])
50 #define IS_SUCCESS_TEMPLATE(t)          ((t)->class[0] == BOUNCE_TMPL_CLASS_SUCCESS[0])
51 
52 #define bounce_template_encoding(t)     ((t)->mime_encoding)
53 #define bounce_template_charset(t)      ((t)->mime_charset)
54 
55 typedef int PRINTFPTRLIKE(2, 3) (*BOUNCE_XP_PRN_FN) (VSTREAM *, const char *,...);
56 typedef int (*BOUNCE_XP_PUT_FN) (VSTREAM *, const char *);
57 
58 extern BOUNCE_TEMPLATE *bounce_template_create(const BOUNCE_TEMPLATE *);
59 extern void bounce_template_free(BOUNCE_TEMPLATE *);
60 extern void bounce_template_load(BOUNCE_TEMPLATE *, const char *, const char *);
61 extern void bounce_template_headers(BOUNCE_XP_PRN_FN, VSTREAM *, BOUNCE_TEMPLATE *, const char *, int);
62 extern void bounce_template_expand(BOUNCE_XP_PUT_FN, VSTREAM *, BOUNCE_TEMPLATE *);
63 extern void bounce_template_dump(VSTREAM *, BOUNCE_TEMPLATE *);
64 
65 #define POSTMASTER_COPY                 1         /* postmaster copy */
66 #define NO_POSTMASTER_COPY    0         /* not postmaster copy */
67 
68  /*
69   * Structure of a bounce template collection. These templates are read and
70   * written in their external representation, with markers and delimiters.
71   */
72 typedef struct {
73     BOUNCE_TEMPLATE *failure;
74     BOUNCE_TEMPLATE *delay;
75     BOUNCE_TEMPLATE *success;
76     BOUNCE_TEMPLATE *verify;
77 } BOUNCE_TEMPLATES;
78 
79 BOUNCE_TEMPLATES *bounce_templates_create(void);
80 void    bounce_templates_free(BOUNCE_TEMPLATES *);
81 void    bounce_templates_load(VSTREAM *, BOUNCE_TEMPLATES *);
82 void    bounce_templates_expand(VSTREAM *, BOUNCE_TEMPLATES *);
83 void    bounce_templates_dump(VSTREAM *, BOUNCE_TEMPLATES *);
84 
85 /* LICENSE
86 /* .ad
87 /* .fi
88 /*        The Secure Mailer license must be distributed with this software.
89 /* AUTHOR(S)
90 /*        Wietse Venema
91 /*        IBM T.J. Watson Research
92 /*        P.O. Box 704
93 /*        Yorktown Heights, NY 10598, USA
94 /*
95 /*        Wietse Venema
96 /*        Google, Inc.
97 /*        111 8th Avenue
98 /*        New York, NY 10011, USA
99 /*--*/
100 
101 #endif
102