#ifndef _MAIL_PROTO_H_INCLUDED_
#define _MAIL_PROTO_H_INCLUDED_
#include <stdarg.h>
#include <string.h>
#include <vstream.h>
#include <iostuff.h>
#include <attr.h>
#define MAIL_PROTO_SMTP "SMTP"
#define MAIL_PROTO_ESMTP "ESMTP"
#define MAIL_PROTO_QMQP "QMQP"
#define MAIL_SERVICE_BOUNCE "bounce"
#define MAIL_SERVICE_CLEANUP "cleanup"
#define MAIL_SERVICE_DEFER "defer"
#define MAIL_SERVICE_FORWARD "forward"
#define MAIL_SERVICE_LOCAL "local"
#define MAIL_SERVICE_PICKUP "pickup"
#define MAIL_SERVICE_QUEUE "qmgr"
#define MAIL_SERVICE_TLSMGR "tlsmgr"
#define MAIL_SERVICE_RESOLVE "resolve"
#define MAIL_SERVICE_REWRITE "rewrite"
#define MAIL_SERVICE_VIRTUAL "virtual"
#define MAIL_SERVICE_SMTP "smtp"
#define MAIL_SERVICE_SMTPD "smtpd"
#define MAIL_SERVICE_SHOWQ "showq"
#define MAIL_SERVICE_ERROR "error"
#define MAIL_SERVICE_RETRY "retry"
#define MAIL_SERVICE_FLUSH "flush"
#define MAIL_SERVICE_VERIFY "verify"
#define MAIL_SERVICE_TRACE "trace"
#define MAIL_SERVICE_RELAY "relay"
#define MAIL_SERVICE_PROXYMAP "proxymap"
#define MAIL_SERVICE_SCACHE "scache"
#define MAIL_CLASS_PUBLIC "public"
#define MAIL_CLASS_PRIVATE "private"
#define TRIGGER_REQ_WAKEUP 'W'
#define QMGR_REQ_SCAN_DEFERRED 'D'
#define QMGR_REQ_SCAN_INCOMING 'I'
#define QMGR_REQ_FLUSH_DEAD 'F'
#define QMGR_REQ_SCAN_ALL 'A'
extern VSTREAM *mail_connect(const char *, const char *, int);
extern VSTREAM *mail_connect_wait(const char *, const char *);
extern int mail_command_client(const char *, const char *,...);
extern int mail_command_server(VSTREAM *,...);
extern int mail_trigger(const char *, const char *, const char *, ssize_t);
extern char *mail_pathname(const char *, const char *);
#define MAIL_ATTR_REQ "request"
#define MAIL_ATTR_NREQ "nrequest"
#define MAIL_ATTR_STATUS "status"
#define MAIL_ATTR_FLAGS "flags"
#define MAIL_ATTR_QUEUE "queue_name"
#define MAIL_ATTR_QUEUEID "queue_id"
#define MAIL_ATTR_SENDER "sender"
#define MAIL_ATTR_RCPT_COUNT "recipient_count"
#define MAIL_ATTR_ORCPT "original_recipient"
#define MAIL_ATTR_RECIP "recipient"
#define MAIL_ATTR_WHY "reason"
#define MAIL_ATTR_VERPDL "verp_delimiters"
#define MAIL_ATTR_SITE "site"
#define MAIL_ATTR_OFFSET "offset"
#define MAIL_ATTR_SIZE "size"
#define MAIL_ATTR_ERRTO "errors-to"
#define MAIL_ATTR_RRCPT "return-receipt"
#define MAIL_ATTR_TIME "time"
#define MAIL_ATTR_CREATE_TIME "create_time"
#define MAIL_ATTR_RULE "rule"
#define MAIL_ATTR_ADDR "address"
#define MAIL_ATTR_TRANSPORT "transport"
#define MAIL_ATTR_NEXTHOP "nexthop"
#define MAIL_ATTR_TRACE_FLAGS "trace_flags"
#define MAIL_ATTR_ADDR_STATUS "recipient_status"
#define MAIL_ATTR_ACTION "action"
#define MAIL_ATTR_TABLE "table"
#define MAIL_ATTR_KEY "key"
#define MAIL_ATTR_VALUE "value"
#define MAIL_ATTR_INSTANCE "instance"
#define MAIL_ATTR_SASL_METHOD "sasl_method"
#define MAIL_ATTR_SASL_USERNAME "sasl_username"
#define MAIL_ATTR_SASL_SENDER "sasl_sender"
#define MAIL_ATTR_ETRN_DOMAIN "etrn_domain"
#define MAIL_ATTR_DUMMY "dummy"
#define MAIL_ATTR_RWR_CONTEXT "rewrite_context"
#define MAIL_ATTR_RWR_LOCAL "local"
#define MAIL_ATTR_RWR_REMOTE "remote"
#define MAIL_ATTR_TTL "ttl"
#define MAIL_ATTR_LABEL "label"
#define MAIL_ATTR_PROP "property"
#define MAIL_ATTR_CCERT_SUBJECT "ccert_subject"
#define MAIL_ATTR_CCERT_ISSUER "ccert_issuer"
#define MAIL_ATTR_CCERT_FINGERPRINT "ccert_fingerprint"
#define MAIL_ATTR_CRYPTO_PROTOCOL "encryption_protocol"
#define MAIL_ATTR_CRYPTO_CIPHER "encryption_cipher"
#define MAIL_ATTR_CRYPTO_KEYSIZE "encryption_keysize"
#define MAIL_ATTR_S_NAME "_name"
#define MAIL_ATTR_S_DOMAIN "_domain"
#define MAIL_ATTR_RBL_WHAT "rbl_what"
#define MAIL_ATTR_RBL_DOMAIN "rbl_domain"
#define MAIL_ATTR_RBL_REASON "rbl_reason"
#define MAIL_ATTR_RBL_TXT "rbl_txt"
#define MAIL_ATTR_RBL_CLASS "rbl_class"
#define MAIL_ATTR_RBL_CODE "rbl_code"
#define MAIL_ATTR_ENCODING "encoding"
#define MAIL_ATTR_ENC_8BIT "8bit"
#define MAIL_ATTR_ENC_7BIT "7bit"
#define MAIL_ATTR_ENC_NONE ""
#define MAIL_ATTR_LOG_CLIENT_NAME "log_client_name"
#define MAIL_ATTR_LOG_CLIENT_ADDR "log_client_address"
#define MAIL_ATTR_LOG_HELO_NAME "log_helo_name"
#define MAIL_ATTR_LOG_PROTO_NAME "log_protocol_name"
#define MAIL_ATTR_LOG_ORIGIN "log_message_origin"
#define MAIL_ATTR_ACT_CLIENT "client"
#define MAIL_ATTR_ACT_CLIENT_NAME "client_name"
#define MAIL_ATTR_ACT_CLIENT_ADDR "client_address"
#define MAIL_ATTR_ACT_CLIENT_PORT "client_port"
#define MAIL_ATTR_ACT_CLIENT_AF "client_address_type"
#define MAIL_ATTR_ACT_HELO_NAME "helo_name"
#define MAIL_ATTR_ACT_PROTO_NAME "protocol_name"
#define MAIL_ATTR_ACT_REVERSE_CLIENT_NAME "reverse_client_name"
#define MAIL_ATTR_ACT_FORWARD_CLIENT_NAME "forward_client_name"
#define MAIL_ATTR_PROTO_STATE "protocol_state"
#define MAIL_ATTR_ORG_NONE "unknown"
#define MAIL_ATTR_ORG_LOCAL "local"
#define XCLIENT_CMD "XCLIENT"
#define XCLIENT_NAME "NAME"
#define XCLIENT_REVERSE_NAME "REVERSE_NAME"
#ifdef FORWARD_CLIENT_NAME
#define XCLIENT_FORWARD_NAME "FORWARD_NAME"
#endif
#define XCLIENT_ADDR "ADDR"
#define XCLIENT_PROTO "PROTO"
#define XCLIENT_HELO "HELO"
#define XCLIENT_UNAVAILABLE "[UNAVAILABLE]"
#define XCLIENT_TEMPORARY "[TEMPUNAVAIL]"
#define XFORWARD_CMD "XFORWARD"
#define XFORWARD_NAME "NAME"
#define XFORWARD_ADDR "ADDR"
#define XFORWARD_PROTO "PROTO"
#define XFORWARD_HELO "HELO"
#define XFORWARD_IDENT "IDENT"
#define XFORWARD_DOMAIN "SOURCE"
#define XFORWARD_DOM_LOCAL "LOCAL"
#define XFORWARD_DOM_REMOTE "REMOTE"
#define XFORWARD_UNAVAILABLE "[UNAVAILABLE]"
#define MAIL_ATTR_DSN_STATUS "status"
#define MAIL_ATTR_DSN_DTYPE "diag_type"
#define MAIL_ATTR_DSN_DTEXT "diag_text"
#define MAIL_ATTR_DSN_MTYPE "mta_type"
#define MAIL_ATTR_DSN_MNAME "mta_mname"
#define MAIL_ATTR_DSN_ACTION "action"
#define MAIL_ATTR_DSN_ENVID "envelope_id"
#define MAIL_ATTR_DSN_RET "ret_flags"
#define MAIL_ATTR_DSN_NOTIFY "notify_flags"
#define MAIL_ATTR_DSN_ORCPT "dsn_orig_rcpt"
#endif