74 #define DELIVER_PASS_DEFER 1
75 #define DELIVER_PASS_UNKNOWN 2
79 static int deliver_pass_initial_reply(
VSTREAM *stream)
143 static int deliver_pass_final_reply(
VSTREAM *stream,
DSN_BUF *dsb)
176 transport = saved_service =
mystrdup(service);
177 if ((nexthop =
split_at(saved_service,
':')) == 0 || *nexthop == 0)
180 msg_fatal(
"missing transport name in \"%s\"", service);
198 if (deliver_pass_initial_reply(stream) != 0
199 || deliver_pass_send_request(stream, request, nexthop, rcpt) != 0) {
200 (void)
DSN_SIMPLE(&dsn,
"4.3.0",
"mail transport unavailable");
204 }
else if ((status = deliver_pass_final_reply(stream, dsb))
206 (void)
DSN_SIMPLE(&dsn,
"4.3.0",
"unknown mail transport error");
237 for (rcpt = list->
info; rcpt < list->info + list->
len; rcpt++)
VSTREAM * mail_connect_wait(const char *class, const char *name)
DSN_BUF * dsb_create(void)
char * mystrdup(const char *str)
#define MAIL_ATTR_ENCODING
int msg_stats_print(ATTR_PRINT_MASTER_FN, VSTREAM *, int, void *)
#define DSN_SIMPLE(dsn, _status, _reason)
#define DELIVER_PASS_DEFER
#define MAIL_ATTR_RWR_CONTEXT
void dsb_free(DSN_BUF *dsb)
#define RECV_ATTR_INT(name, val)
#define MAIL_ATTR_SASL_METHOD
int dsb_scan(ATTR_SCAN_MASTER_FN scan_fn, VSTREAM *fp, int flags, void *ptr)
#define MAIL_ATTR_LOG_HELO_NAME
#define MAIL_ATTR_LOG_PROTO_NAME
#define DEL_REQ_TRACE_FLAGS(f)
int vstream_fclose(VSTREAM *stream)
#define MAIL_ATTR_SMTPUTF8
#define MAIL_ATTR_SASL_SENDER
void msg_warn(const char *fmt,...)
#define MAIL_ATTR_DSN_RET
int deliver_pass(const char *class, const char *service, DELIVER_REQUEST *request, RECIPIENT *rcpt)
#define MAIL_ATTR_LOG_IDENT
#define MAIL_ATTR_DSN_ENVID
#define MAIL_ATTR_LOG_CLIENT_ADDR
#define SEND_ATTR_INT(name, val)
int deliver_pass_all(const char *class, const char *service, DELIVER_REQUEST *request)
#define SEND_ATTR_LONG(name, val)
NORETURN msg_fatal(const char *fmt,...)
#define MAIL_ATTR_NEXTHOP
int vstream_fflush(VSTREAM *stream)
#define MAIL_ATTR_SASL_USERNAME
#define MAIL_ATTR_RCPT_COUNT
#define SEND_ATTR_FUNC(func, val)
#define DELIVER_PASS_UNKNOWN
#define MAIL_ATTR_LOG_CLIENT_NAME
char * split_at(char *string, int delimiter)
#define RECV_ATTR_FUNC(func, val)
int defer_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
int rcpt_print(ATTR_PRINT_MASTER_FN print_fn, VSTREAM *fp, int flags, void *ptr)
#define MAIL_ATTR_QUEUEID
#define SEND_ATTR_STR(name, val)
#define MAIL_ATTR_LOG_CLIENT_PORT