#include <sys/time.h>
#include <vstream.h>
#include <vstring.h>
#include <mail_stream.h>
typedef struct {
int err;
VSTREAM *client;
VSTRING *message;
VSTRING *buf;
struct timeval arrival_time;
char *name;
char *addr;
char *port;
char *namaddr;
char *rfc_addr;
int addr_family;
char *queue_id;
VSTREAM *cleanup;
MAIL_STREAM *dest;
int rcpt_count;
char *reason;
char *sender;
char *recipient;
char *protocol;
char *where;
VSTRING *why_rejected;
} QMQPD_STATE;
#define CLIENT_ATTR_UNKNOWN "unknown"
#define CLIENT_NAME_UNKNOWN CLIENT_ATTR_UNKNOWN
#define CLIENT_ADDR_UNKNOWN CLIENT_ATTR_UNKNOWN
#define CLIENT_PORT_UNKNOWN CLIENT_ATTR_UNKNOWN
#define CLIENT_NAMADDR_UNKNOWN CLIENT_ATTR_UNKNOWN
#define IS_AVAIL_CLIENT_ATTR(v) ((v) && strcmp((v), CLIENT_ATTR_UNKNOWN))
#define IS_AVAIL_CLIENT_NAME(v) IS_AVAIL_CLIENT_ATTR(v)
#define IS_AVAIL_CLIENT_ADDR(v) IS_AVAIL_CLIENT_ATTR(v)
#define IS_AVAIL_CLIENT_PORT(v) IS_AVAIL_CLIENT_ATTR(v)
#define IS_AVAIL_CLIENT_NAMADDR(v) IS_AVAIL_CLIENT_ATTR(v)
#define QMQPD_STAT_OK 'K'
#define QMQPD_STAT_RETRY 'Z'
#define QMQPD_STAT_HARD 'D'
QMQPD_STATE *qmqpd_state_alloc(VSTREAM *);
void qmqpd_state_free(QMQPD_STATE *);
void qmqpd_peer_init(QMQPD_STATE *);
void qmqpd_peer_reset(QMQPD_STATE *);