xref: /netbsd-src/external/ibm-public/postfix/dist/src/global/recipient_list.h (revision 41fbaed053f8fbfdf9d2a4ee0a7386a3c83f8505)
1 /*	$NetBSD: recipient_list.h,v 1.1.1.1 2009/06/23 10:08:47 tron Exp $	*/
2 
3 #ifndef _RECIPIENT_LIST_H_INCLUDED_
4 #define _RECIPIENT_LIST_H_INCLUDED_
5 
6 /*++
7 /* NAME
8 /*	recipient_list 3h
9 /* SUMMARY
10 /*	recipient list structures
11 /* SYNOPSIS
12 /*	#include <recipient_list.h>
13 /* DESCRIPTION
14 /* .nf
15 
16  /*
17   * Information about a recipient is kept in this structure. The file offset
18   * tells us the position of the REC_TYPE_RCPT byte in the message queue
19   * file, This byte is replaced by REC_TYPE_DONE when the delivery status to
20   * that recipient is established.
21   *
22   * Rather than bothering with subclasses that extend this structure with
23   * application-specific fields we just add them here.
24   */
25 typedef struct RECIPIENT {
26     long    offset;			/* REC_TYPE_RCPT byte */
27     const char *dsn_orcpt;		/* DSN original recipient */
28     int     dsn_notify;			/* DSN notify flags */
29     const char *orig_addr;		/* null or original recipient */
30     const char *address;		/* complete address */
31     union {				/* Application specific. */
32 	int     status;			/* SMTP client */
33 	struct QMGR_QUEUE *queue;	/* Queue manager */
34 	const char *addr_type;		/* DSN */
35     }       u;
36 } RECIPIENT;
37 
38 #define RECIPIENT_ASSIGN(rcpt, offs, orcpt, notify, orig, addr) do { \
39     (rcpt)->offset = (offs); \
40     (rcpt)->dsn_orcpt = (orcpt); \
41     (rcpt)->dsn_notify = (notify); \
42     (rcpt)->orig_addr = (orig); \
43     (rcpt)->address = (addr); \
44     (rcpt)->u.status = (0); \
45 } while (0)
46 
47 #define RECIPIENT_UPDATE(ptr, new) do { \
48     myfree((char *) (ptr)); (ptr) = mystrdup(new); \
49 } while (0)
50 
51 typedef struct RECIPIENT_LIST {
52     RECIPIENT *info;
53     int     len;
54     int     avail;
55     int     variant;
56 } RECIPIENT_LIST;
57 
58 extern void recipient_list_init(RECIPIENT_LIST *, int);
59 extern void recipient_list_add(RECIPIENT_LIST *, long, const char *, int, const char *, const char *);
60 extern void recipient_list_swap(RECIPIENT_LIST *, RECIPIENT_LIST *);
61 extern void recipient_list_free(RECIPIENT_LIST *);
62 
63 #define RCPT_LIST_INIT_STATUS	1
64 #define RCPT_LIST_INIT_QUEUE	2
65 #define RCPT_LIST_INIT_ADDR	3
66 
67 /* LICENSE
68 /* .ad
69 /* .fi
70 /*	The Secure Mailer license must be distributed with this software.
71 /* AUTHOR(S)
72 /*	Wietse Venema
73 /*	IBM T.J. Watson Research
74 /*	P.O. Box 704
75 /*	Yorktown Heights, NY 10598, USA
76 /*--*/
77 
78 #endif
79