#define tc_chunk_last BIT(1) /* annotate chunk SMTP cmd as LAST */
struct transport_context;
-typedef int (*tpt_chunk_cmd_cb)(int fd, struct transport_context * tctx,
- unsigned len, unsigned flags);
+typedef int (*tpt_chunk_cmd_cb)(struct transport_context *, unsigned, unsigned);
/* Structure for information about a delivery-in-progress */
typedef struct transport_context {
+ union { /* discriminated by option topt_output_string */
+ int fd; /* file descriptor to write message to */
+ uschar * msg; /* allocated string with written message */
+ } u;
transport_instance * tblock; /* transport */
struct address_item * addr;
uschar * check_string; /* string replacement */
/* items below only used with option topt_use_bdat */
tpt_chunk_cmd_cb chunk_cb; /* per-datachunk callback */
- struct smtp_inblock * inblock;
- struct smtp_outblock * outblock;
- host_item * host;
- struct address_item * first_addr;
- struct address_item **sync_addr;
- BOOL pending_MAIL;
- BOOL pending_BDAT;
- BOOL good_RCPT;
- BOOL * completed_address;
- int cmd_count;
- uschar * buffer;
+ void * smtp_context;
+
+ /* items below only used with option topt_output_string */
+ int msg_size;
+ int msg_ptr;
} transport_ctx;
/* (may need to hold a timestamp) */
short int basic_errno; /* status after failure */
- short int child_count; /* number of child addresses */
+ unsigned short child_count; /* number of child addresses */
short int return_file; /* fileno of return data file */
short int special_action; /* ( used when when deferred or failed */
/* ( also */
uncompressed, but the data pointer is into the raw data. */
typedef struct {
- uschar name[DNS_MAXNAME]; /* domain name */
- int type; /* record type */
- unsigned short ttl; /* time-to-live, seconds */
- int size; /* size of data */
- uschar *data; /* pointer to data */
+ uschar name[DNS_MAXNAME]; /* domain name */
+ int type; /* record type */
+ unsigned short ttl; /* time-to-live, seconds */
+ int size; /* size of data */
+ const uschar *data; /* pointer to data */
} dns_record;
/* Structure for holding the result of a DNS query. */
block. */
typedef struct {
- int rrcount; /* count of RRs in the answer */
- uschar *aptr; /* pointer in the answer while scanning */
- dns_record srr; /* data from current record in scan */
+ int rrcount; /* count of RRs in the answer */
+ const uschar *aptr; /* pointer in the answer while scanning */
+ dns_record srr; /* data from current record in scan */
} dns_scan;
/* Structure for holding a chain of IP addresses that are extracted from