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 + -
显示快捷键?