146686Sbrian/*	$NetBSD$	*/
246686Sbrian
346686Sbrian/*++
446686Sbrian/* NAME
546686Sbrian/*	qmqpd 3h
646686Sbrian/* SUMMARY
746686Sbrian/*	Postfix QMQP server
846686Sbrian/* SYNOPSIS
946686Sbrian/*	include "qmqpd.h"
1046686Sbrian/* DESCRIPTION
1146686Sbrian/* .nf
1246686Sbrian
1346686Sbrian /*
1446686Sbrian  * System library.
1546686Sbrian  */
1646686Sbrian#include <sys/time.h>
1746686Sbrian
1846686Sbrian /*
1946686Sbrian  * Utility library.
2046686Sbrian  */
2146686Sbrian#include <vstream.h>
2246686Sbrian#include <vstring.h>
2346686Sbrian
2446686Sbrian /*
2546686Sbrian  * Global library.
2650479Speter  */
2746686Sbrian#include <mail_stream.h>
2846686Sbrian
2946686Sbrian /*
3046686Sbrian  * Per-session state.
3146686Sbrian  */
3246686Sbriantypedef struct {
3346686Sbrian    int     err;			/* error flags */
3446686Sbrian    VSTREAM *client;			/* client connection */
3546686Sbrian    VSTRING *message;			/* message buffer */
3646686Sbrian    VSTRING *buf;			/* line buffer */
3746686Sbrian    struct timeval arrival_time;	/* start of session */
3846686Sbrian    char   *name;			/* client name */
3946686Sbrian    char   *addr;			/* client IP address */
4046686Sbrian    char   *port;			/* client TCP port */
4146686Sbrian    char   *namaddr;			/* name[addr]:port */
4246686Sbrian    char   *rfc_addr;			/* RFC 2821 client IP address */
4346686Sbrian    int     addr_family;		/* address family */
4446686Sbrian    char   *queue_id;			/* queue file ID */
4546686Sbrian    VSTREAM *cleanup;			/* cleanup server */
4646686Sbrian    MAIL_STREAM *dest;			/* cleanup server */
4746686Sbrian    int     rcpt_count;			/* recipient count */
4846686Sbrian    char   *reason;			/* exception name */
4946686Sbrian    char   *sender;			/* sender address */
5046686Sbrian    char   *recipient;			/* recipient address */
5146686Sbrian    char   *protocol;			/* protocol name */
52134789Sbrian    char   *where;			/* protocol state */
53134789Sbrian    VSTRING *why_rejected;		/* REJECT reason */
5447061Sbrian} QMQPD_STATE;
5547061Sbrian
5654912Sbrian /*
57131327Sbrian  * Representation of unknown upstream client or message information within
5847061Sbrian  * qmqpd processes. This is not the representation that Postfix uses in
5947061Sbrian  * queue files, in queue manager delivery requests, or in XCLIENT/XFORWARD
6047061Sbrian  * commands!
6147061Sbrian  */
62134789Sbrian#define CLIENT_ATTR_UNKNOWN	"unknown"
63134789Sbrian
6446686Sbrian#define CLIENT_NAME_UNKNOWN	CLIENT_ATTR_UNKNOWN
6546686Sbrian#define CLIENT_ADDR_UNKNOWN	CLIENT_ATTR_UNKNOWN
66131327Sbrian#define CLIENT_PORT_UNKNOWN	CLIENT_ATTR_UNKNOWN
6746686Sbrian#define CLIENT_NAMADDR_UNKNOWN	CLIENT_ATTR_UNKNOWN
6846686Sbrian
6946686Sbrian /*
7046686Sbrian  * QMQP protocol status codes.
7147061Sbrian  */
7247061Sbrian#define QMQPD_STAT_OK		'K'
7347061Sbrian#define QMQPD_STAT_RETRY	'Z'
74131327Sbrian#define QMQPD_STAT_HARD		'D'
75131327Sbrian
76131327Sbrian /*
77131327Sbrian  * qmqpd_state.c
7854912Sbrian  */
7946686SbrianQMQPD_STATE *qmqpd_state_alloc(VSTREAM *);
8046686Sbrianvoid    qmqpd_state_free(QMQPD_STATE *);
8146686Sbrian
8246686Sbrian /*
8346686Sbrian  * qmqpd_peer.c
8447062Sbrian  */
85void    qmqpd_peer_init(QMQPD_STATE *);
86void    qmqpd_peer_reset(QMQPD_STATE *);
87
88/* LICENSE
89/* .ad
90/* .fi
91/*	The Secure Mailer license must be distributed with this software.
92/* AUTHOR(S)
93/*	Wietse Venema
94/*	IBM T.J. Watson Research
95/*	P.O. Box 704
96/*	Yorktown Heights, NY 10598, USA
97/*--*/
98