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