187 static VSTRING *scache_request;
188 static VSTRING *scache_dest_label;
189 static VSTRING *scache_dest_prop;
190 static VSTRING *scache_endp_label;
191 static VSTRING *scache_endp_prop;
193 #ifdef CANT_WRITE_BEFORE_SENDING_FD
206 static int scache_dest_hits;
207 static int scache_dest_miss;
208 static int scache_dest_count;
209 static int scache_endp_hits;
210 static int scache_endp_miss;
211 static int scache_endp_count;
212 static int scache_sess_count;
218 #define STR(x) vstring_str(x)
219 #define VSTREQ(x,y) (strcmp(STR(x),y) == 0)
223 static void scache_save_endp_service(
VSTREAM *client_stream)
225 const char *myname =
"scache_save_endp_service";
237 msg_warn(
"%s: bad or missing request parameter", myname);
253 msg_warn(
"%s: unable to receive file descriptor: %m", myname);
261 STR(scache_endp_label),
STR(scache_endp_prop), fd);
276 static void scache_find_endp_service(
VSTREAM *client_stream)
278 const char *myname =
"scache_find_endp_service";
285 msg_warn(
"%s: bad or missing request parameter", myname);
292 scache_endp_prop)) < 0) {
317 msg_warn(
"%s: cannot send file descriptor: %m", myname);
327 static void scache_save_dest_service(
VSTREAM *client_stream)
329 const char *myname =
"scache_save_dest_service";
341 msg_warn(
"%s: bad or missing request parameter", myname);
349 STR(scache_dest_label),
STR(scache_dest_prop),
350 STR(scache_endp_label));
365 static void scache_find_dest_service(
VSTREAM *client_stream)
367 const char *myname =
"scache_find_dest_service";
374 msg_warn(
"%s: bad or missing request parameter", myname);
383 scache_endp_prop)) < 0) {
410 msg_warn(
"%s: cannot send file descriptor: %m", myname);
420 static void scache_service(
VSTREAM *client_stream,
char *unused_service,
428 msg_fatal(
"unexpected command-line argument: %s", argv[0]);
448 scache_save_dest_service(client_stream);
450 scache_find_dest_service(client_stream);
452 scache_save_endp_service(client_stream);
454 scache_find_endp_service(client_stream);
456 msg_warn(
"unrecognized request: \"%s\", ignored",
457 STR(scache_request));
469 static void scache_status_dump(
char *unused_name,
char **unused_argv)
471 if (scache_dest_hits || scache_dest_miss
472 || scache_endp_hits || scache_endp_miss
473 || scache_dest_count || scache_endp_count
474 || scache_sess_count)
475 msg_info(
"statistics: start interval %.15s",
478 if (scache_dest_hits || scache_dest_miss) {
479 msg_info(
"statistics: domain lookup hits=%d miss=%d success=%d%%",
480 scache_dest_hits, scache_dest_miss,
481 scache_dest_hits * 100
482 / (scache_dest_hits + scache_dest_miss));
483 scache_dest_hits = scache_dest_miss = 0;
485 if (scache_endp_hits || scache_endp_miss) {
486 msg_info(
"statistics: address lookup hits=%d miss=%d success=%d%%",
487 scache_endp_hits, scache_endp_miss,
488 scache_endp_hits * 100
489 / (scache_endp_hits + scache_endp_miss));
490 scache_endp_hits = scache_endp_miss = 0;
492 if (scache_dest_count || scache_endp_count || scache_sess_count) {
493 msg_info(
"statistics: max simultaneous domains=%d addresses=%d connection=%d",
494 scache_dest_count, scache_endp_count, scache_sess_count);
495 scache_dest_count = 0;
496 scache_endp_count = 0;
497 scache_sess_count = 0;
504 static void scache_status_update(
int unused_event,
void *context)
506 scache_status_dump((
char *) 0, (
char **) 0);
512 static void post_jail_init(
char *unused_name,
char **unused_argv)
528 #ifdef CANT_WRITE_BEFORE_SENDING_FD
549 int main(
int argc,
char **argv)
#define SCACHE_REQ_SAVE_DEST
int main(int argc, char **argv)
#define scache_find_dest(scache, dest_label, dest_prop, endp_prop)
MAIL_VERSION_STAMP_DECLARE
#define CA_MAIL_SERVER_EXIT(v)
#define RECV_ATTR_INT(name, val)
#define VAR_SCACHE_STAT_TIME
NORETURN multi_server_main(int, char **, MULTI_SERVER_FN,...)
#define SCACHE_REQ_FIND_ENDP
#define CA_MAIL_SERVER_POST_INIT(v)
#define VAR_SCACHE_TTL_LIM
SCACHE * scache_multi_create(void)
#define DEF_SCACHE_STAT_TIME
#define CANT_WRITE_BEFORE_SENDING_FD
#define read_wait(fd, timeout)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
#define scache_save_endp(scache, ttl, endp_label, endp_prop, fd)
#define MAIL_VERSION_STAMP_ALLOCATE
#define SCACHE_REQ_FIND_DEST
#define CA_MAIL_SERVER_TIME_TABLE(v)
#define SEND_ATTR_INT(name, val)
#define SCACHE_REQ_SAVE_ENDP
NORETURN msg_fatal(const char *fmt,...)
#define MUST_READ_AFTER_SENDING_FD
int vstream_fflush(VSTREAM *stream)
#define scache_find_endp(scache, endp_label, endp_prop)
#define DEF_SCACHE_TTL_LIM
time_t event_request_timer(EVENT_NOTIFY_TIME_FN callback, void *context, int delay)
#define CA_MAIL_SERVER_SOLITARY
#define vstream_fileno(vp)
#define scache_save_dest(scache, ttl, dest_label, dest_prop, endp_label)
#define scache_size(scache, stats)
#define SEND_ATTR_STR(name, val)
#define RECV_ATTR_STR(name, val)
void msg_info(const char *fmt,...)