#ifndef _BOUNCE_H_INCLUDED_
#define _BOUNCE_H_INCLUDED_

/*++
/* NAME
/*	bounce 3h
/* SUMMARY
/*	bounce service client
/* SYNOPSIS
/*	#include <bounce.h>
/* DESCRIPTION
/* .nf

 /*
  * System library.
  */
#include <time.h>

 /*
  * Global library.
  */
#include <deliver_request.h>
#include <dsn_buf.h>
#include <pol_stats.h>

 /*
  * Client interface.
  */
extern int bounce_append(int, const char *, MSG_STATS *, RECIPIENT *,
			         const char *, const POL_STATS *, DSN *);
extern int bounce_flush(int, const char *, const char *, const char *, int,
			        const char *, const char *, int);
extern int bounce_flush_verp(int, const char *, const char *, const char *, int,
		             const char *, const char *, int, const char *);
extern int bounce_one(int, const char *, const char *, const char *, int,
		              const char *, const char *,
		              int, MSG_STATS *, RECIPIENT *,
		              const char *, const POL_STATS *, DSN *);
extern void bounce_client_init(const char *, const char *);

 /*
  * Bounce/defer protocol commands.
  */
#define BOUNCE_CMD_APPEND	0	/* append log */
#define BOUNCE_CMD_FLUSH	1	/* send log */
#define BOUNCE_CMD_WARN		2	/* send warning, don't delete log */
#define BOUNCE_CMD_VERP		3	/* send log, verp style */
#define BOUNCE_CMD_ONE		4	/* send one recipient notice */
#define BOUNCE_CMD_TRACE	5	/* send delivery record */

 /*
  * Macros to make obscure code more readable.
  */
#define NO_DSN_DCODE		((char *) 0)
#define NO_RELAY_AGENT		"none"
#define NO_DSN_RMTA		((char *) 0)

 /*
  * Flags.
  */
#define BOUNCE_FLAG_NONE	0	/* no flags up */
#define BOUNCE_FLAG_CLEAN	(1<<0)	/* remove log on error */
#define BOUNCE_FLAG_DELRCPT	(1<<1)	/* delete recipient from queue file */

 /*
  * Backwards compatibility.
  */
#define BOUNCE_FLAG_KEEP	BOUNCE_FLAG_NONE

 /*
  * Start of private API.
  */

#ifdef DSN_INTERN

#include <dsn_filter.h>

extern DSN_FILTER *delivery_status_filter;

extern int bounce_append_intern(int, const char *, MSG_STATS *, RECIPIENT *,
			            const char *, const POL_STATS *, DSN *);
extern int bounce_one_intern(int, const char *, const char *, const char *,
			             int, const char *, const char *,
			             int, MSG_STATS *, RECIPIENT *,
			             const char *, const POL_STATS *, DSN *);

#endif

/* 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
/*	porcupine.org
/*--*/

#endif
