#ifndef _DSN_BUF_H_INCLUDED_
#define _DSN_BUF_H_INCLUDED_
#include <vstring.h>
#include <dsn.h>
typedef struct {
DSN dsn;
VSTRING *status;
VSTRING *action;
VSTRING *mtype;
VSTRING *mname;
VSTRING *dtype;
VSTRING *dtext;
VSTRING *reason;
} DSN_BUF;
#define DSB_DEF_ACTION ((char *) 0)
#define DSB_SKIP_RMTA ((char *) 0), ((char *) 0)
#define DSB_MTYPE_NONE ((char *) 0)
#define DSB_MTYPE_DNS "dns"
#define DSB_SKIP_REPLY (char *) 0, " "
#define DSB_DTYPE_NONE ((char *) 0)
#define DSB_DTYPE_SMTP "smtp"
#define DSB_DTYPE_UNIX "x-unix"
#define DSB_DTYPE_SASL "x-sasl"
extern DSN_BUF *dsb_create(void);
extern DSN_BUF *PRINTFLIKE(8, 9) dsb_update(DSN_BUF *, const char *, const char *, const char *, const char *, const char *, const char *, const char *,...);
extern DSN_BUF *vdsb_simple(DSN_BUF *, const char *, const char *, va_list);
extern DSN_BUF *PRINTFLIKE(3, 4) dsb_simple(DSN_BUF *, const char *, const char *,...);
extern DSN_BUF *PRINTFLIKE(4, 5) dsb_unix(DSN_BUF *, const char *, const char *, const char *,...);
extern DSN_BUF *dsb_formal(DSN_BUF *, const char *, const char *, const char *, const char *, const char *, const char *);
extern DSN_BUF *dsb_status(DSN_BUF *, const char *);
extern void dsb_reset(DSN_BUF *);
extern void dsb_free(DSN_BUF *);
#define DSN_FROM_DSN_BUF(dsb) \
DSN_ASSIGN(&(dsb)->dsn, \
vstring_str((dsb)->status), \
vstring_str((dsb)->action), \
vstring_str((dsb)->reason), \
vstring_str((dsb)->dtype), \
vstring_str((dsb)->dtext), \
vstring_str((dsb)->mtype), \
vstring_str((dsb)->mname))
#endif