jk_util.c
来自「以便Apache与其他服务进行整合 Mod_JK安装」· C语言 代码 · 共 1,959 行 · 第 1/4 页
C
1,959 行
} if (0 == strcasecmp(level, JK_LOG_INFO_VERB)) { return JK_LOG_INFO_LEVEL; } if (0 == strcasecmp(level, JK_LOG_WARN_VERB)) { return JK_LOG_WARNING_LEVEL; } if (0 == strcasecmp(level, JK_LOG_ERROR_VERB)) { return JK_LOG_ERROR_LEVEL; } if (0 == strcasecmp(level, JK_LOG_EMERG_VERB)) { return JK_LOG_EMERG_LEVEL; } return JK_LOG_DEF_LEVEL;}int jk_open_file_logger(jk_logger_t **l, const char *file, int level){ if (l && file) { jk_logger_t *rc = (jk_logger_t *)malloc(sizeof(jk_logger_t)); jk_file_logger_t *p = (jk_file_logger_t *) malloc(sizeof(jk_file_logger_t)); if (rc && p) { rc->log = log_to_file; rc->level = level; jk_set_time_fmt(rc, NULL); rc->logger_private = p;#if defined(AS400) && !defined(AS400_UTF8) p->logfile = fopen(file, "a+, o_ccsid=0");#else p->logfile = fopen(file, "a+");#endif if (p->logfile) { *l = rc; jk_log(rc, JK_LOG_DEBUG, "log time stamp format is '%s'", rc->log_fmt); return JK_TRUE; } } if (rc) { free(rc); } if (p) { free(p); } *l = NULL; } return JK_FALSE;}int jk_close_file_logger(jk_logger_t **l){ if (l && *l) { jk_file_logger_t *p = (*l)->logger_private; if (p) { fflush(p->logfile); fclose(p->logfile); free(p); } free(*l); *l = NULL; return JK_TRUE; } return JK_FALSE;}int jk_log(jk_logger_t *l, const char *file, int line, const char *funcname, int level, const char *fmt, ...){ int rc = 0; /* * Need to reserve space for terminating zero byte * and platform specific line endings added during the call * to the output routing. */ static int usable_size = HUGE_BUFFER_SIZE - 3; if (!l || !file || !fmt) { return -1; } if ((l->level <= level) || (level == JK_LOG_REQUEST_LEVEL)) {#ifdef NETWARE /* On NetWare, this can get called on a thread that has a limited stack so */ /* we will allocate and free the temporary buffer in this function */ char *buf;#else char buf[HUGE_BUFFER_SIZE];#endif char *f = (char *)(file + strlen(file) - 1); va_list args; int used = 0; while (f != file && '\\' != *f && '/' != *f) { f--; } if (f != file) { f++; }#ifdef NETWARE buf = (char *)malloc(HUGE_BUFFER_SIZE); if (NULL == buf) return -1;#endif used = set_time_str(buf, usable_size, l); if (line) { /* line==0 only used for request log item */ /* Log [pid:threadid] for all levels except REQUEST. */ /* This information helps to correlate lines from different logs. */ /* Performance is no issue, because with production log levels */ /* we only call it often, if we have a lot of errors */ rc = snprintf(buf + used, usable_size - used, "[%" JK_PID_T_FMT ":%" JK_UINT32_T_FMT "] ", getpid(), jk_gettid()); used += rc; if (rc < 0 ) { return 0; } rc = (int)strlen(jk_level_verbs[level]); if (usable_size - used >= rc) { strncpy(buf + used, jk_level_verbs[level], rc); used += rc; } else { return 0; /* [V] not sure what to return... */ } if (funcname) { rc = (int)strlen(funcname); if (usable_size - used >= rc + 2) { strncpy(buf + used, funcname, rc); used += rc; strncpy(buf + used, "::", 2); used += 2; } else { return 0; /* [V] not sure what to return... */ } } rc = (int)strlen(f); if (usable_size - used >= rc) { strncpy(buf + used, f, rc); used += rc; } else { return 0; /* [V] not sure what to return... */ } rc = snprintf(buf + used, usable_size - used, " (%d): ", line); used += rc; if (rc < 0 || usable_size - used < 0) { return 0; /* [V] not sure what to return... */ } } va_start(args, fmt); rc = vsnprintf(buf + used, usable_size - used, fmt, args); va_end(args); if ( rc <= usable_size - used ) { used += rc; } else { used = usable_size; } l->log(l, level, used, buf);#ifdef NETWARE free(buf);#endif } return rc;}const char *jk_get_worker_type(jk_map_t *m, const char *wname){ char buf[1024]; if (!m || !wname) { return NULL; } MAKE_WORKER_PARAM(TYPE_OF_WORKER); return jk_map_get_string(m, buf, DEFAULT_WORKER_TYPE);}const char *jk_get_worker_route(jk_map_t *m, const char *wname, const char *def){ char buf[1024]; const char *v; if (!m || !wname) { return NULL; } MAKE_WORKER_PARAM(ROUTE_OF_WORKER); v = jk_map_get_string(m, buf, NULL); if (v) { return v; } /* Try old jvm_route directive */ MAKE_WORKER_PARAM(JVM_ROUTE_OF_WORKER_DEPRECATED); return jk_map_get_string(m, buf, def);}const char *jk_get_worker_domain(jk_map_t *m, const char *wname, const char *def){ char buf[1024]; if (!m || !wname) { return NULL; } MAKE_WORKER_PARAM(DOMAIN_OF_WORKER); return jk_map_get_string(m, buf, def);}const char *jk_get_worker_redirect(jk_map_t *m, const char *wname, const char *def){ char buf[1024]; if (!m || !wname) { return NULL; } MAKE_WORKER_PARAM(REDIRECT_OF_WORKER); return jk_map_get_string(m, buf, def);}const char *jk_get_worker_secret(jk_map_t *m, const char *wname){ char buf[1024]; if (!m || !wname) { return NULL; } MAKE_WORKER_PARAM(SECRET_OF_WORKER); return jk_map_get_string(m, buf, NULL);}/* [V] I suggest that the following general purpose functions be used. *//* More should be added (double etc.), but now these were enough for me. *//* Functions that can be simulated with these should be "deprecated". */int jk_get_worker_str_prop(jk_map_t *m, const char *wname, const char *pname, const char **prop){ char buf[1024]; if (m && prop && wname && pname) { MAKE_WORKER_PARAM(pname); *prop = jk_map_get_string(m, buf, NULL); if (*prop) { return JK_TRUE; } } return JK_FALSE;}int jk_get_worker_int_prop(jk_map_t *m, const char *wname, const char *pname, int *prop){ char buf[1024]; if (m && prop && wname && pname) { int i; MAKE_WORKER_PARAM(pname); i = jk_map_get_int(m, buf, -1); if (-1 != i) { *prop = i; return JK_TRUE; } } return JK_FALSE;}const char *jk_get_worker_host(jk_map_t *m, const char *wname, const char *def){ char buf[1024]; if (!m || !wname) { return NULL; } MAKE_WORKER_PARAM(HOST_OF_WORKER); return jk_map_get_string(m, buf, def);}int jk_get_worker_port(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(PORT_OF_WORKER); return jk_map_get_int(m, buf, def);}static int def_cache_size = -1;int jk_get_worker_def_cache_size(int protocol){ if (def_cache_size < 1) { if (protocol == AJP14_PROTO) def_cache_size = AJP14_DEF_CACHE_SZ; else def_cache_size = AJP13_DEF_CACHE_SZ; } return def_cache_size;}void jk_set_worker_def_cache_size(int sz){ def_cache_size = sz;}int jk_get_worker_cache_size(jk_map_t *m, const char *wname, int def){ char buf[1024]; int rv; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(CACHE_OF_WORKER); if ((rv = jk_map_get_int(m, buf, -1)) >= 0) return rv; MAKE_WORKER_PARAM(CACHE_OF_WORKER_DEPRECATED); return jk_map_get_int(m, buf, def);}int jk_get_worker_cache_size_min(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(CACHE_OF_WORKER_MIN); return jk_map_get_int(m, buf, def);}int jk_get_worker_socket_timeout(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(SOCKET_TIMEOUT_OF_WORKER); return jk_map_get_int(m, buf, def);}int jk_get_worker_recover_timeout(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(WORKER_RECOVER_TIME); return jk_map_get_int(m, buf, def);}int jk_get_worker_max_reply_timeouts(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(MAX_REPLY_TIMEOUTS_OF_WORKER); return jk_map_get_int(m, buf, def);}int jk_get_worker_socket_buffer(jk_map_t *m, const char *wname, int def){ char buf[1024]; int i; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(SOCKET_BUFFER_OF_WORKER); i = jk_map_get_int(m, buf, 0); if (i > 0 && i < def) i = def; return i;}int jk_get_worker_socket_keepalive(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(SOCKET_KEEPALIVE_OF_WORKER); return jk_map_get_bool(m, buf, def);}int jk_get_worker_cache_timeout(jk_map_t *m, const char *wname, int def){ char buf[1024]; int rv; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(CACHE_TIMEOUT_OF_WORKER); if ((rv = jk_map_get_int(m, buf, -1)) >= 0) return rv; MAKE_WORKER_PARAM(CACHE_TIMEOUT_DEPRECATED); return jk_map_get_int(m, buf, def);}int jk_get_worker_connect_timeout(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(CONNECT_TIMEOUT_OF_WORKER); return jk_map_get_int(m, buf, def);}int jk_get_worker_prepost_timeout(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(PREPOST_TIMEOUT_OF_WORKER); return jk_map_get_int(m, buf, def);}int jk_get_worker_reply_timeout(jk_map_t *m, const char *wname, int def){ char buf[1024]; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(REPLY_TIMEOUT_OF_WORKER); return jk_map_get_int(m, buf, def);}int jk_get_worker_recycle_timeout(jk_map_t *m, const char *wname, int def){ return def;}int jk_get_worker_retries(jk_map_t *m, const char *wname, int def){ char buf[1024]; int rv; if (!m || !wname) { return -1; } MAKE_WORKER_PARAM(RETRIES_OF_WORKER); rv = jk_map_get_int(m, buf, def);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?