Postfix3.3.1
データ構造 | マクロ定義 | 型定義 | 関数 | 変数
qmgr.h ファイル
#include <sys/time.h>
#include <time.h>
#include <vstream.h>
#include <scan_dir.h>
#include <recipient_list.h>
#include <dsn.h>

[ソースコード]

データ構造

struct  QMGR_TRANSPORT_LIST
 
struct  QMGR_FEEDBACK
 
struct  QMGR_QUEUE_LIST
 
struct  QMGR_JOB_LIST
 
struct  QMGR_TRANSPORT
 
struct  QMGR_ENTRY_LIST
 
struct  QMGR_QUEUE
 
struct  QMGR_ENTRY
 
struct  QMGR_MESSAGE
 
struct  QMGR_PEER_LIST
 
struct  QMGR_JOB
 
struct  QMGR_PEER
 
struct  QMGR_SCAN
 

マクロ定義

#define QMGR_LIST_ROTATE(head, object, peers)
 
#define QMGR_LIST_UNLINK(head, type, object, peers)
 
#define QMGR_LIST_LINK(head, pred, object, succ, peers)
 
#define QMGR_LIST_PREPEND(head, object, peers)
 
#define QMGR_LIST_APPEND(head, object, peers)
 
#define QMGR_LIST_INIT(head)
 
#define QMGR_FEEDBACK_IDX_NONE   0 /* no window dependence */
 
#define QMGR_FEEDBACK_IDX_WIN   1 /* 1/window dependence */
 
#define QMGR_FEEDBACK_VAL(fb, win)   ((fb).index == QMGR_FEEDBACK_IDX_NONE ? (fb).base : (fb).base / (win))
 
#define QMGR_TRANSPORT_STAT_DEAD   (1<<1)
 
#define QMGR_TRANSPORT_STAT_RATE_LOCK   (1<<2)
 
#define QMGR_TRANSPORT_THROTTLED(t)   ((t)->flags & QMGR_TRANSPORT_STAT_DEAD)
 
#define QMGR_QUEUE_TODO   1 /* waiting for service */
 
#define QMGR_QUEUE_BUSY   2 /* recipients on the wire */
 
#define QMGR_QUEUE_STAT_THROTTLED   0 /* back-off timer */
 
#define QMGR_QUEUE_STAT_SUSPENDED   -1 /* voluntary delay timer */
 
#define QMGR_QUEUE_STAT_SAVED   -2 /* delayed cleanup timer */
 
#define QMGR_QUEUE_STAT_BAD   -3 /* can't happen */
 
#define QMGR_QUEUE_READY(q)   ((q)->window > 0)
 
#define QMGR_QUEUE_THROTTLED(q)   ((q)->window == QMGR_QUEUE_STAT_THROTTLED)
 
#define QMGR_QUEUE_SUSPENDED(q)   ((q)->window == QMGR_QUEUE_STAT_SUSPENDED)
 
#define QMGR_QUEUE_SAVED(q)   ((q)->window == QMGR_QUEUE_STAT_SAVED)
 
#define QMGR_QUEUE_BAD(q)   ((q)->window <= QMGR_QUEUE_STAT_BAD)
 
#define QMGR_QUEUE_STATUS(q)
 
#define QMGR_READ_FLAG_SEEN_ALL_NON_RCPT   (1<<16)
 
#define QMGR_MESSAGE_LOCKED   ((QMGR_MESSAGE *) 1)
 
#define QMGR_MSG_STATS(stats, message)
 
#define QMGR_SCAN_START   (1<<0) /* start now/restart when done */
 
#define QMGR_SCAN_ALL   (1<<1) /* all queue file time stamps */
 
#define QMGR_FLUSH_ONCE   (1<<2) /* unthrottle once */
 
#define QMGR_FLUSH_DFXP   (1<<3) /* override defer_transports */
 
#define QMGR_FLUSH_EACH   (1<<4) /* unthrottle per message */
 

型定義

typedef struct QMGR_TRANSPORT QMGR_TRANSPORT
 
typedef struct QMGR_QUEUE QMGR_QUEUE
 
typedef struct QMGR_ENTRY QMGR_ENTRY
 
typedef struct QMGR_MESSAGE QMGR_MESSAGE
 
typedef struct QMGR_JOB QMGR_JOB
 
typedef struct QMGR_PEER QMGR_PEER
 
typedef struct QMGR_TRANSPORT_LIST QMGR_TRANSPORT_LIST
 
typedef struct QMGR_QUEUE_LIST QMGR_QUEUE_LIST
 
typedef struct QMGR_ENTRY_LIST QMGR_ENTRY_LIST
 
typedef struct QMGR_JOB_LIST QMGR_JOB_LIST
 
typedef struct QMGR_PEER_LIST QMGR_PEER_LIST
 
typedef struct QMGR_SCAN QMGR_SCAN
 
typedef struct QMGR_FEEDBACK QMGR_FEEDBACK
 
typedef void(* QMGR_TRANSPORT_ALLOC_NOTIFY) (QMGR_TRANSPORT *, VSTREAM *)
 

関数

void qmgr_feedback_init (QMGR_FEEDBACK *, const char *, const char *, const char *, const char *)
 
QMGR_TRANSPORTqmgr_transport_select (void)
 
void qmgr_transport_alloc (QMGR_TRANSPORT *, QMGR_TRANSPORT_ALLOC_NOTIFY)
 
void qmgr_transport_throttle (QMGR_TRANSPORT *, DSN *)
 
void qmgr_transport_unthrottle (QMGR_TRANSPORT *)
 
QMGR_TRANSPORTqmgr_transport_create (const char *)
 
QMGR_TRANSPORTqmgr_transport_find (const char *)
 
QMGR_QUEUEqmgr_queue_create (QMGR_TRANSPORT *, const char *, const char *)
 
void qmgr_queue_done (QMGR_QUEUE *)
 
void qmgr_queue_throttle (QMGR_QUEUE *, DSN *)
 
void qmgr_queue_unthrottle (QMGR_QUEUE *)
 
QMGR_QUEUEqmgr_queue_find (QMGR_TRANSPORT *, const char *)
 
void qmgr_queue_suspend (QMGR_QUEUE *, int)
 
QMGR_ENTRYqmgr_entry_select (QMGR_PEER *)
 
void qmgr_entry_unselect (QMGR_ENTRY *)
 
void qmgr_entry_move_todo (QMGR_QUEUE *, QMGR_ENTRY *)
 
void qmgr_entry_done (QMGR_ENTRY *, int)
 
QMGR_ENTRYqmgr_entry_create (QMGR_PEER *, QMGR_MESSAGE *)
 
void qmgr_message_free (QMGR_MESSAGE *)
 
void qmgr_message_update_warn (QMGR_MESSAGE *)
 
void qmgr_message_kill_record (QMGR_MESSAGE *, long)
 
QMGR_MESSAGEqmgr_message_alloc (const char *, const char *, int, mode_t)
 
QMGR_MESSAGEqmgr_message_realloc (QMGR_MESSAGE *)
 
QMGR_ENTRYqmgr_job_entry_select (QMGR_TRANSPORT *)
 
QMGR_PEERqmgr_peer_select (QMGR_JOB *)
 
void qmgr_job_blocker_update (QMGR_QUEUE *)
 
QMGR_JOBqmgr_job_obtain (QMGR_MESSAGE *, QMGR_TRANSPORT *)
 
void qmgr_job_free (QMGR_JOB *)
 
void qmgr_job_move_limits (QMGR_JOB *)
 
QMGR_PEERqmgr_peer_create (QMGR_JOB *, QMGR_QUEUE *)
 
QMGR_PEERqmgr_peer_find (QMGR_JOB *, QMGR_QUEUE *)
 
QMGR_PEERqmgr_peer_obtain (QMGR_JOB *, QMGR_QUEUE *)
 
void qmgr_peer_free (QMGR_PEER *)
 
void qmgr_defer_transport (QMGR_TRANSPORT *, DSN *)
 
void qmgr_defer_todo (QMGR_QUEUE *, DSN *)
 
void qmgr_defer_recipient (QMGR_MESSAGE *, RECIPIENT *, DSN *)
 
void qmgr_bounce_recipient (QMGR_MESSAGE *, RECIPIENT *, DSN *)
 
void qmgr_deliver (QMGR_TRANSPORT *, VSTREAM *)
 
int qmgr_active_feed (QMGR_SCAN *, const char *)
 
void qmgr_active_drain (void)
 
void qmgr_active_done (QMGR_MESSAGE *)
 
void qmgr_move (const char *, const char *, time_t)
 
void qmgr_enable_all (void)
 
void qmgr_enable_transport (QMGR_TRANSPORT *)
 
void qmgr_enable_queue (QMGR_QUEUE *)
 
QMGR_SCANqmgr_scan_create (const char *)
 
void qmgr_scan_request (QMGR_SCAN *, int)
 
char * qmgr_scan_next (QMGR_SCAN *)
 
QMGR_TRANSPORTqmgr_error_transport (const char *)
 
QMGR_QUEUEqmgr_error_queue (const char *, DSN *)
 
char * qmgr_error_nexthop (DSN *)
 

変数

struct HTABLEqmgr_transport_byname
 
QMGR_TRANSPORT_LIST qmgr_transport_list
 
int qmgr_queue_count
 
int qmgr_message_count
 
int qmgr_recipient_count
 
int qmgr_vrfy_pend_count
 
int qmgr_deliver_concurrency
 

マクロ定義詳解

#define QMGR_FEEDBACK_IDX_NONE   0 /* no window dependence */

qmgr.h131 行目に定義があります。

#define QMGR_FEEDBACK_IDX_WIN   1 /* 1/window dependence */

qmgr.h132 行目に定義があります。

#define QMGR_FEEDBACK_VAL (   fb,
  win 
)    ((fb).index == QMGR_FEEDBACK_IDX_NONE ? (fb).base : (fb).base / (win))

qmgr.h144 行目に定義があります。

#define QMGR_FLUSH_DFXP   (1<<3) /* override defer_transports */

qmgr.h509 行目に定義があります。

#define QMGR_FLUSH_EACH   (1<<4) /* unthrottle per message */

qmgr.h510 行目に定義があります。

#define QMGR_FLUSH_ONCE   (1<<2) /* unthrottle once */

qmgr.h508 行目に定義があります。

#define QMGR_LIST_APPEND (   head,
  object,
  peers 
)
値:
{ \
object->peers.prev = head.prev; \
object->peers.next = 0; \
if (head.prev) { \
head.prev->peers.next = object; \
} else { \
head.next = object; \
} \
head.prev = object; \
}

qmgr.h89 行目に定義があります。

#define QMGR_LIST_INIT (   head)
値:
{ \
head.prev = 0; \
head.next = 0; \
}

qmgr.h100 行目に定義があります。

#define QMGR_LIST_LINK (   head,
  pred,
  object,
  succ,
  peers 
)
値:
{ \
object->peers.prev = pred; \
object->peers.next = succ; \
if (pred) pred->peers.next = object; \
else head.next = object; \
if (succ) succ->peers.prev = object; \
else head.prev = object; \
}

qmgr.h69 行目に定義があります。

#define QMGR_LIST_PREPEND (   head,
  object,
  peers 
)
値:
{ \
object->peers.next = head.next; \
object->peers.prev = 0; \
if (head.next) { \
head.next->peers.prev = object; \
} else { \
head.prev = object; \
} \
head.next = object; \
}

qmgr.h78 行目に定義があります。

#define QMGR_LIST_ROTATE (   head,
  object,
  peers 
)
値:
{ \
head.next->peers.prev = head.prev; \
head.prev->peers.next = head.next; \
head.next = object->peers.next; \
head.next->peers.prev = 0; \
head.prev = object; \
object->peers.next = 0; \
}

qmgr.h50 行目に定義があります。

#define QMGR_LIST_UNLINK (   head,
  type,
  object,
  peers 
)
値:
{ \
type _next = object->peers.next; \
type _prev = object->peers.prev; \
if (_prev) _prev->peers.next = _next; \
else head.next = _next; \
if (_next) _next->peers.prev = _prev; \
else head.prev = _prev; \
object->peers.next = object->peers.prev = 0; \
}

qmgr.h59 行目に定義があります。

#define QMGR_MESSAGE_LOCKED   ((QMGR_MESSAGE *) 1)

qmgr.h379 行目に定義があります。

#define QMGR_MSG_STATS (   stats,
  message 
)
値:
incoming_arrival, message->arrival_time, \
active_arrival, message->active_time)
#define MSG_STATS_INIT2(st, m1, v1, m2, v2)
Definition: msg_stats.h:77

qmgr.h391 行目に定義があります。

#define QMGR_QUEUE_BAD (   q)    ((q)->window <= QMGR_QUEUE_STAT_BAD)

qmgr.h287 行目に定義があります。

#define QMGR_QUEUE_BUSY   2 /* recipients on the wire */

qmgr.h257 行目に定義があります。

#define QMGR_QUEUE_READY (   q)    ((q)->window > 0)

qmgr.h283 行目に定義があります。

#define QMGR_QUEUE_SAVED (   q)    ((q)->window == QMGR_QUEUE_STAT_SAVED)

qmgr.h286 行目に定義があります。

#define QMGR_QUEUE_STAT_BAD   -3 /* can't happen */

qmgr.h281 行目に定義があります。

#define QMGR_QUEUE_STAT_SAVED   -2 /* delayed cleanup timer */

qmgr.h280 行目に定義があります。

#define QMGR_QUEUE_STAT_SUSPENDED   -1 /* voluntary delay timer */

qmgr.h279 行目に定義があります。

#define QMGR_QUEUE_STAT_THROTTLED   0 /* back-off timer */

qmgr.h278 行目に定義があります。

#define QMGR_QUEUE_STATUS (   q)
値:
( \
QMGR_QUEUE_READY(q) ? "ready" : \
QMGR_QUEUE_THROTTLED(q) ? "throttled" : \
QMGR_QUEUE_SUSPENDED(q) ? "suspended" : \
QMGR_QUEUE_SAVED(q) ? "saved" : \
"invalid queue status" \
)
#define QMGR_QUEUE_SAVED(q)
Definition: qmgr.h:286
#define QMGR_QUEUE_SUSPENDED(q)
Definition: qmgr.h:285
#define QMGR_QUEUE_THROTTLED(q)
Definition: qmgr.h:284
#define QMGR_QUEUE_READY(q)
Definition: qmgr.h:283

qmgr.h289 行目に定義があります。

#define QMGR_QUEUE_SUSPENDED (   q)    ((q)->window == QMGR_QUEUE_STAT_SUSPENDED)

qmgr.h285 行目に定義があります。

#define QMGR_QUEUE_THROTTLED (   q)    ((q)->window == QMGR_QUEUE_STAT_THROTTLED)

qmgr.h284 行目に定義があります。

#define QMGR_QUEUE_TODO   1 /* waiting for service */

qmgr.h256 行目に定義があります。

#define QMGR_READ_FLAG_SEEN_ALL_NON_RCPT   (1<<16)

qmgr.h377 行目に定義があります。

#define QMGR_SCAN_ALL   (1<<1) /* all queue file time stamps */

qmgr.h507 行目に定義があります。

#define QMGR_SCAN_START   (1<<0) /* start now/restart when done */

qmgr.h506 行目に定義があります。

#define QMGR_TRANSPORT_STAT_DEAD   (1<<1)

qmgr.h211 行目に定義があります。

#define QMGR_TRANSPORT_STAT_RATE_LOCK   (1<<2)

qmgr.h212 行目に定義があります。

#define QMGR_TRANSPORT_THROTTLED (   t)    ((t)->flags & QMGR_TRANSPORT_STAT_DEAD)

qmgr.h222 行目に定義があります。

型定義詳解

typedef struct QMGR_ENTRY QMGR_ENTRY

qmgr.h35 行目に定義があります。

qmgr.h41 行目に定義があります。

typedef struct QMGR_FEEDBACK QMGR_FEEDBACK

qmgr.h45 行目に定義があります。

typedef struct QMGR_JOB QMGR_JOB

qmgr.h37 行目に定義があります。

typedef struct QMGR_JOB_LIST QMGR_JOB_LIST

qmgr.h42 行目に定義があります。

typedef struct QMGR_MESSAGE QMGR_MESSAGE

qmgr.h36 行目に定義があります。

typedef struct QMGR_PEER QMGR_PEER

qmgr.h38 行目に定義があります。

qmgr.h43 行目に定義があります。

typedef struct QMGR_QUEUE QMGR_QUEUE

qmgr.h34 行目に定義があります。

qmgr.h40 行目に定義があります。

typedef struct QMGR_SCAN QMGR_SCAN

qmgr.h44 行目に定義があります。

qmgr.h33 行目に定義があります。

typedef void(* QMGR_TRANSPORT_ALLOC_NOTIFY) (QMGR_TRANSPORT *, VSTREAM *)

qmgr.h214 行目に定義があります。

qmgr.h39 行目に定義があります。

関数詳解

void qmgr_active_done ( QMGR_MESSAGE )

qmgr_active.c258 行目に定義があります。

void qmgr_active_drain ( void  )

qmgr_active.c574 行目に定義があります。

int qmgr_active_feed ( QMGR_SCAN ,
const char *   
)

qmgr_active.c171 行目に定義があります。

void qmgr_bounce_recipient ( QMGR_MESSAGE ,
RECIPIENT ,
DSN  
)

qmgr_bounce.c57 行目に定義があります。

void qmgr_defer_recipient ( QMGR_MESSAGE ,
RECIPIENT ,
DSN  
)

qmgr_defer.c147 行目に定義があります。

void qmgr_defer_todo ( QMGR_QUEUE ,
DSN  
)

qmgr_defer.c103 行目に定義があります。

void qmgr_defer_transport ( QMGR_TRANSPORT ,
DSN  
)

qmgr_defer.c83 行目に定義があります。

void qmgr_deliver ( QMGR_TRANSPORT ,
VSTREAM  
)

qmgr_deliver.c374 行目に定義があります。

void qmgr_enable_all ( void  )

qmgr_enable.c60 行目に定義があります。

void qmgr_enable_queue ( QMGR_QUEUE )

qmgr_enable.c98 行目に定義があります。

void qmgr_enable_transport ( QMGR_TRANSPORT )

qmgr_enable.c77 行目に定義があります。

QMGR_ENTRY* qmgr_entry_create ( QMGR_PEER ,
QMGR_MESSAGE  
)

qmgr_entry.c360 行目に定義があります。

void qmgr_entry_done ( QMGR_ENTRY ,
int   
)

qmgr_entry.c212 行目に定義があります。

void qmgr_entry_move_todo ( QMGR_QUEUE ,
QMGR_ENTRY  
)

qmgr_entry.c180 行目に定義があります。

QMGR_ENTRY* qmgr_entry_select ( QMGR_PEER )

qmgr_entry.c110 行目に定義があります。

void qmgr_entry_unselect ( QMGR_ENTRY )

qmgr_entry.c182 行目に定義があります。

char* qmgr_error_nexthop ( DSN )

qmgr_error.c115 行目に定義があります。

QMGR_QUEUE* qmgr_error_queue ( const char *  ,
DSN  
)

qmgr_error.c85 行目に定義があります。

QMGR_TRANSPORT* qmgr_error_transport ( const char *  )

qmgr_error.c65 行目に定義があります。

void qmgr_feedback_init ( QMGR_FEEDBACK ,
const char *  ,
const char *  ,
const char *  ,
const char *   
)

qmgr_feedback.c103 行目に定義があります。

void qmgr_job_blocker_update ( QMGR_QUEUE )

qmgr_job.c950 行目に定義があります。

QMGR_ENTRY* qmgr_job_entry_select ( QMGR_TRANSPORT )

qmgr_job.c829 行目に定義があります。

void qmgr_job_free ( QMGR_JOB )

qmgr_job.c412 行目に定義があります。

void qmgr_job_move_limits ( QMGR_JOB )

qmgr_job.c278 行目に定義があります。

QMGR_JOB* qmgr_job_obtain ( QMGR_MESSAGE ,
QMGR_TRANSPORT  
)

qmgr_job.c246 行目に定義があります。

QMGR_MESSAGE* qmgr_message_alloc ( const char *  ,
const char *  ,
int  ,
mode_t   
)

qmgr_message.c1347 行目に定義があります。

void qmgr_message_free ( QMGR_MESSAGE )

qmgr_message.c1296 行目に定義があります。

void qmgr_message_kill_record ( QMGR_MESSAGE ,
long   
)

qmgr_message.c868 行目に定義があります。

QMGR_MESSAGE* qmgr_message_realloc ( QMGR_MESSAGE )

qmgr_message.c1415 行目に定義があります。

void qmgr_message_update_warn ( QMGR_MESSAGE )

qmgr_message.c850 行目に定義があります。

void qmgr_move ( const char *  ,
const char *  ,
time_t   
)

qmgr_move.c57 行目に定義があります。

QMGR_PEER* qmgr_peer_create ( QMGR_JOB ,
QMGR_QUEUE  
)

qmgr_peer.c78 行目に定義があります。

QMGR_PEER* qmgr_peer_find ( QMGR_JOB ,
QMGR_QUEUE  
)

qmgr_peer.c115 行目に定義があります。

void qmgr_peer_free ( QMGR_PEER )

qmgr_peer.c94 行目に定義があります。

QMGR_PEER* qmgr_peer_obtain ( QMGR_JOB ,
QMGR_QUEUE  
)

qmgr_peer.c122 行目に定義があります。

QMGR_PEER* qmgr_peer_select ( QMGR_JOB )

qmgr_peer.c133 行目に定義があります。

QMGR_QUEUE* qmgr_queue_create ( QMGR_TRANSPORT ,
const char *  ,
const char *   
)

qmgr_queue.c407 行目に定義があります。

void qmgr_queue_done ( QMGR_QUEUE )

qmgr_queue.c374 行目に定義があります。

QMGR_QUEUE* qmgr_queue_find ( QMGR_TRANSPORT ,
const char *   
)

qmgr_queue.c439 行目に定義があります。

void qmgr_queue_suspend ( QMGR_QUEUE ,
int   
)

qmgr_queue.c160 行目に定義があります。

void qmgr_queue_throttle ( QMGR_QUEUE ,
DSN  
)

qmgr_queue.c278 行目に定義があります。

void qmgr_queue_unthrottle ( QMGR_QUEUE )

qmgr_queue.c198 行目に定義があります。

QMGR_SCAN* qmgr_scan_create ( const char *  )

qmgr_scan.c176 行目に定義があります。

char* qmgr_scan_next ( QMGR_SCAN )

qmgr_scan.c154 行目に定義があります。

void qmgr_scan_request ( QMGR_SCAN ,
int   
)

qmgr_scan.c112 行目に定義があります。

void qmgr_transport_alloc ( QMGR_TRANSPORT ,
QMGR_TRANSPORT_ALLOC_NOTIFY   
)

qmgr_transport.c339 行目に定義があります。

QMGR_TRANSPORT* qmgr_transport_create ( const char *  )

qmgr_transport.c410 行目に定義があります。

QMGR_TRANSPORT* qmgr_transport_find ( const char *  )

qmgr_transport.c469 行目に定義があります。

QMGR_TRANSPORT* qmgr_transport_select ( void  )

qmgr_transport.c298 行目に定義があります。

void qmgr_transport_throttle ( QMGR_TRANSPORT ,
DSN  
)

qmgr_transport.c211 行目に定義があります。

void qmgr_transport_unthrottle ( QMGR_TRANSPORT )

qmgr_transport.c183 行目に定義があります。

変数詳解

int qmgr_deliver_concurrency

qmgr_deliver.c93 行目に定義があります。

int qmgr_message_count

qmgr_message.c150 行目に定義があります。

int qmgr_queue_count

qmgr_queue.c112 行目に定義があります。

int qmgr_recipient_count

qmgr_message.c151 行目に定義があります。

struct HTABLE* qmgr_transport_byname

qmgr_transport.c107 行目に定義があります。

QMGR_TRANSPORT_LIST qmgr_transport_list

qmgr_transport.c108 行目に定義があります。

int qmgr_vrfy_pend_count

qmgr_message.c152 行目に定義があります。