1 #ifndef _MAIL_QUEUE_H_INCLUDED_
2 #define _MAIL_QUEUE_H_INCLUDED_
28 #define MAIL_QUEUE_MAILDROP "maildrop"
29 #define MAIL_QUEUE_HOLD "hold"
30 #define MAIL_QUEUE_INCOMING "incoming"
31 #define MAIL_QUEUE_ACTIVE "active"
32 #define MAIL_QUEUE_DEFERRED "deferred"
33 #define MAIL_QUEUE_TRACE "trace"
34 #define MAIL_QUEUE_DEFER "defer"
35 #define MAIL_QUEUE_BOUNCE "bounce"
36 #define MAIL_QUEUE_CORRUPT "corrupt"
37 #define MAIL_QUEUE_FLUSH "flush"
38 #define MAIL_QUEUE_SAVED "saved"
48 #define MAIL_QUEUE_STAT_READY (S_IRUSR | S_IWUSR | S_IXUSR)
49 #define MAIL_QUEUE_STAT_CORRUPT (S_IRUSR)
50 #ifndef MAIL_QUEUE_STAT_UNTHROTTLE
51 #define MAIL_QUEUE_STAT_UNTHROTTLE (S_IRGRP)
68 #ifdef MAIL_QUEUE_INTERNAL
94 #define MQID_LG_SEC_BASE 52
95 #define MQID_LG_SEC_PAD 6
96 #define MQID_LG_USEC_BASE 52
97 #define MQID_LG_USEC_PAD 4
98 #define MQID_LG_TIME_PAD (MQID_LG_SEC_PAD + MQID_LG_USEC_PAD)
99 #define MQID_LG_INUM_SEP 'z'
100 #define MQID_LG_INUM_BASE 51
101 #define MQID_LG_INUM_PAD 0
103 #define MQID_FIND_LG_INUM_SEPARATOR(cp, path) \
104 (((cp) = strrchr((path), MQID_LG_INUM_SEP)) != 0 \
105 && ((cp) - (path) >= MQID_LG_TIME_PAD))
107 #define MQID_GET_INUM(path, inum, long_form, error) do { \
109 if (((long_form) = MQID_FIND_LG_INUM_SEPARATOR(_cp, (path))) != 0) { \
110 MQID_LG_DECODE_INUM(_cp + 1, (inum), (error)); \
112 MQID_SH_DECODE_INUM((path) + MQID_SH_USEC_PAD, (inum), (error)); \
116 #define MQID_LG_ENCODE_SEC(buf, val) \
117 MQID_LG_ENCODE((buf), (val), MQID_LG_SEC_BASE, MQID_LG_SEC_PAD)
119 #define MQID_LG_ENCODE_USEC(buf, val) \
120 MQID_LG_ENCODE((buf), (val), MQID_LG_USEC_BASE, MQID_LG_USEC_PAD)
122 #define MQID_LG_ENCODE_INUM(buf, val) \
123 MQID_LG_ENCODE((buf), (val), MQID_LG_INUM_BASE, MQID_LG_INUM_PAD)
125 #define MQID_LG_DECODE_USEC(str, ulval, error) \
126 MQID_LG_DECODE((str), (ulval), MQID_LG_USEC_BASE, (error))
128 #define MQID_LG_DECODE_INUM(str, ulval, error) \
129 MQID_LG_DECODE((str), (ulval), MQID_LG_INUM_BASE, (error))
131 #define MQID_LG_ENCODE(buf, val, base, padlen) \
132 safe_ultostr((buf), (unsigned long) (val), (base), (padlen), '0')
134 #define MQID_LG_DECODE(str, ulval, base, error) do { \
137 (ulval) = safe_strtoul((str), &_end, (base)); \
138 (error) = (*_end != 0 || ((ulval) == ULONG_MAX && errno == ERANGE)); \
141 #define MQID_LG_GET_HEX_USEC(bp, zp) do { \
143 unsigned long _us_val; \
144 vstring_strncpy((bp), (zp) - MQID_LG_USEC_PAD, MQID_LG_USEC_PAD); \
145 MQID_LG_DECODE_USEC(STR(bp), _us_val, _error); \
148 (void) MQID_SH_ENCODE_USEC((bp), _us_val); \
159 #define MQID_SH_USEC_PAD 5
161 #define MQID_SH_ENCODE_USEC(buf, usec) \
162 vstring_str(vstring_sprintf((buf), "%05X", (int) (usec)))
164 #define MQID_SH_ENCODE_INUM(buf, inum) \
165 vstring_str(vstring_sprintf((buf), "%lX", (unsigned long) (inum)))
167 #define MQID_SH_DECODE_INUM(str, ulval, error) do { \
170 (ulval) = strtoul((str), &_end, 16); \
171 (error) = (*_end != 0 || ((ulval) == ULONG_MAX && errno == ERANGE)); \
const char * mail_queue_path(VSTRING *, const char *, const char *)
int mail_queue_mkdirs(const char *)
struct VSTREAM * mail_queue_enter(const char *, mode_t, struct timeval *)
struct VSTREAM * mail_queue_open(const char *, const char *, int, mode_t)
const char * mail_queue_dir(VSTRING *, const char *, const char *)
int mail_queue_remove(const char *, const char *)
int mail_queue_id_ok(const char *)
int mail_queue_rename(const char *, const char *, const char *)
int mail_queue_name_ok(const char *)