#ifndef _PIPE_COMMAND_H_INCLUDED_
#define _PIPE_COMMAND_H_INCLUDED_
#include <vstream.h>
#include <vstring.h>
#include <check_arg.h>
#include <mail_copy.h>
#include <dsn_buf.h>
#define PIPE_CMD_END 0
#define PIPE_CMD_COMMAND 1
#define PIPE_CMD_ARGV 2
#define PIPE_CMD_COPY_FLAGS 3
#define PIPE_CMD_SENDER 4
#define PIPE_CMD_DELIVERED 5
#define PIPE_CMD_UID 6
#define PIPE_CMD_GID 7
#define PIPE_CMD_TIME_LIMIT 8
#define PIPE_CMD_ENV 9
#define PIPE_CMD_SHELL 10
#define PIPE_CMD_EOL 11
#define PIPE_CMD_EXPORT 12
#define PIPE_CMD_ORIG_RCPT 13
#define PIPE_CMD_CWD 14
#define PIPE_CMD_CHROOT 15
#define CA_PIPE_CMD_END PIPE_CMD_END
#define CA_PIPE_CMD_COMMAND(v) PIPE_CMD_COMMAND, CHECK_CPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_ARGV(v) PIPE_CMD_ARGV, CHECK_PPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_COPY_FLAGS(v) PIPE_CMD_COPY_FLAGS, CHECK_VAL(PIPE_CMD, int, (v))
#define CA_PIPE_CMD_SENDER(v) PIPE_CMD_SENDER, CHECK_CPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_DELIVERED(v) PIPE_CMD_DELIVERED, CHECK_CPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_UID(v) PIPE_CMD_UID, CHECK_VAL(PIPE_CMD, uid_t, (v))
#define CA_PIPE_CMD_GID(v) PIPE_CMD_GID, CHECK_VAL(PIPE_CMD, gid_t, (v))
#define CA_PIPE_CMD_TIME_LIMIT(v) PIPE_CMD_TIME_LIMIT, CHECK_VAL(PIPE_CMD, int, (v))
#define CA_PIPE_CMD_ENV(v) PIPE_CMD_ENV, CHECK_PPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_SHELL(v) PIPE_CMD_SHELL, CHECK_CPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_EOL(v) PIPE_CMD_EOL, CHECK_CPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_EXPORT(v) PIPE_CMD_EXPORT, CHECK_PPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_ORIG_RCPT(v) PIPE_CMD_ORIG_RCPT, CHECK_CPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_CWD(v) PIPE_CMD_CWD, CHECK_CPTR(PIPE_CMD, char, (v))
#define CA_PIPE_CMD_CHROOT(v) PIPE_CMD_CHROOT, CHECK_CPTR(PIPE_CMD, char, (v))
CHECK_VAL_HELPER_DCL(PIPE_CMD, uid_t);
CHECK_VAL_HELPER_DCL(PIPE_CMD, int);
CHECK_VAL_HELPER_DCL(PIPE_CMD, gid_t);
CHECK_PPTR_HELPER_DCL(PIPE_CMD, char);
CHECK_CPTR_HELPER_DCL(PIPE_CMD, char);
#define PIPE_STAT_OK 0
#define PIPE_STAT_DEFER 1
#define PIPE_STAT_BOUNCE 2
#define PIPE_STAT_CORRUPT 3
extern int pipe_command(VSTREAM *, DSN_BUF *,...);
#endif