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,...)