Add $smtp_command_history variable
[exim.git] / src / src / structs.h
index 179ce58defdac7ba92da2624ac368a420634cc70..14d109869ec4ceb67972f1e6f2cf4b365d67a6aa 100644 (file)
@@ -28,11 +28,11 @@ struct router_info;
 /* Structure for remembering macros for the configuration file */
 
 typedef struct macro_item {
-  struct   macro_item *next;
-  BOOL     command_line;
-  unsigned namelen;
-  uschar * replacement;
-  uschar   name[1];
+  struct  macro_item * next;
+  BOOL         command_line;
+  unsigned     namelen;
+  const uschar * name;
+  const uschar * replacement;
 } macro_item;
 
 /* Structure for bit tables for debugging and logging */
@@ -230,12 +230,15 @@ typedef struct transport_info {
 #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 */
@@ -244,17 +247,11 @@ typedef struct transport_context {
 
   /* 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;
 
 
@@ -635,7 +632,7 @@ typedef struct address_item {
                                   /* (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  */
@@ -731,11 +728,11 @@ typedef struct search_cache {
 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. */
@@ -749,9 +746,9 @@ typedef struct {
 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