⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod_jk.c

📁 jboss与apache集成的中间件,详情请参看文档说明.
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * JkWorkersFile Directive Handling * * JkWorkersFile file */static const char *jk_set_worker_file(cmd_parms * cmd,                                      void *dummy, const char *worker_file){    server_rec *s = cmd->server;    struct stat statbuf;    jk_server_conf_t *conf =        (jk_server_conf_t *) ap_get_module_config(s->module_config,                                                  &jk_module);    /* we need an absolut path (ap_server_root_relative does the ap_pstrdup) */    conf->worker_file = ap_server_root_relative(cmd->pool, worker_file);    if (conf->worker_file == NULL)        return "JkWorkersFile file_name invalid";    if (stat(conf->worker_file, &statbuf) == -1)        return "Can't find the workers file specified";    return NULL;}/* * JkMountFile Directive Handling * * JkMountFile file */static const char *jk_set_mount_file(cmd_parms * cmd,                                     void *dummy, const char *mount_file){    server_rec *s = cmd->server;    struct stat statbuf;    jk_server_conf_t *conf =        (jk_server_conf_t *) ap_get_module_config(s->module_config,                                                  &jk_module);    /* we need an absolut path (ap_server_root_relative does the ap_pstrdup) */    conf->mount_file = ap_server_root_relative(cmd->pool, mount_file);    if (conf->mount_file == NULL)        return "JkMountFile file name invalid";    if (stat(conf->mount_file, &statbuf) == -1)        return "Can't find the mount file specified";    return NULL;}/* * JkLogFile Directive Handling * * JkLogFile file */static const char *jk_set_log_file(cmd_parms * cmd,                                   void *dummy, const char *log_file){    server_rec *s = cmd->server;    jk_server_conf_t *conf =        (jk_server_conf_t *) ap_get_module_config(s->module_config,                                                  &jk_module);    /* we need an absolute path */    if (*log_file != '|')        conf->log_file = ap_server_root_relative(cmd->pool, log_file);    else        conf->log_file = apr_pstrdup(cmd->pool, log_file);    if (conf->log_file == NULL)        return "JkLogFile file_name invalid";    return NULL;}/* * JkShmFile Directive Handling * * JkShmFile file */static const char *jk_set_shm_file(cmd_parms * cmd,                                   void *dummy, const char *shm_file){    /* we need an absolute path */    jk_shm_file = ap_server_root_relative(cmd->pool, shm_file);    if (jk_shm_file == NULL)        return "JkShmFile file name invalid";    return NULL;}/* * JkShmSize Directive Handling * * JkShmSize size in kilobytes */static const char *jk_set_shm_size(cmd_parms * cmd,                                   void *dummy, const char *shm_size){    int sz = 0;    /* we need an absolute path */    sz = atoi(shm_size) * 1024;    if (sz < JK_SHM_DEF_SIZE)        sz = JK_SHM_DEF_SIZE;    else        sz = JK_SHM_ALIGN(sz);    jk_shm_size = (size_t)sz;    return NULL;}/* * JkLogLevel Directive Handling * * JkLogLevel debug/info/error/emerg */static const char *jk_set_log_level(cmd_parms * cmd,                                    void *dummy, const char *log_level){    server_rec *s = cmd->server;    jk_server_conf_t *conf =        (jk_server_conf_t *) ap_get_module_config(s->module_config,                                                  &jk_module);    conf->log_level = jk_parse_log_level(log_level);    return NULL;}/* * JkLogStampFormat Directive Handling * * JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " */static const char *jk_set_log_fmt(cmd_parms * cmd,                                  void *dummy, const char *log_format){    jk_set_log_format(log_format);    return NULL;}/* * JkAutoAlias Directive Handling * * JkAutoAlias application directory */static const char *jk_set_auto_alias(cmd_parms * cmd,                                     void *dummy, char *directory){    server_rec *s = cmd->server;    jk_server_conf_t *conf =        (jk_server_conf_t *) ap_get_module_config(s->module_config,                                                  &jk_module);    conf->alias_dir = directory;    if (conf->alias_dir == NULL)        return "JkAutoAlias directory invalid";    return NULL;}/***************************************************************** * * Actually logging. */typedef const char *(*item_key_func) (request_rec *, char *);typedef struct{    item_key_func func;    char *arg;} request_log_format_item;static const char *process_item(request_rec * r,                                request_log_format_item * item){    const char *cp;    cp = (*item->func) (r, item->arg);    return cp ? cp : "-";}static void request_log_transaction(request_rec * r, jk_server_conf_t * conf){    request_log_format_item *items;    char *str, *s;    int i;    int len = 0;    const char **strs;    int *strl;    apr_array_header_t *format = conf->format;    strs = apr_palloc(r->pool, sizeof(char *) * (format->nelts));    strl = apr_palloc(r->pool, sizeof(int) * (format->nelts));    items = (request_log_format_item *) format->elts;    for (i = 0; i < format->nelts; ++i) {        strs[i] = process_item(r, &items[i]);    }    for (i = 0; i < format->nelts; ++i) {        len += strl[i] = strlen(strs[i]);    }    str = apr_palloc(r->pool, len + 1);    for (i = 0, s = str; i < format->nelts; ++i) {        memcpy(s, strs[i], strl[i]);        s += strl[i];    }    *s = 0;    jk_log(conf->log, JK_LOG_REQUEST, "%s", str);}/***************************************************************** * * Parsing the log format string */static char *format_integer(apr_pool_t * p, int i){    return apr_psprintf(p, "%d", i);}static char *pfmt(apr_pool_t * p, int i){    if (i <= 0) {        return "-";    }    else {        return format_integer(p, i);    }}static const char *constant_item(request_rec * dummy, char *stuff){    return stuff;}static const char *log_worker_name(request_rec * r, char *a){    return apr_table_get(r->notes, JK_WORKER_ID);}static const char *log_request_duration(request_rec * r, char *a){    return apr_table_get(r->notes, JK_DURATION);}static const char *log_request_line(request_rec * r, char *a){    /* NOTE: If the original request contained a password, we     * re-write the request line here to contain XXXXXX instead:     * (note the truncation before the protocol string for HTTP/0.9 requests)     * (note also that r->the_request contains the unmodified request)     */    return (r->parsed_uri.password) ? apr_pstrcat(r->pool, r->method, " ",                                                  apr_uri_unparse(r->pool,                                                                  &r->                                                                  parsed_uri,                                                                  0),                                                  r->                                                  assbackwards ? NULL : " ",                                                  r->protocol, NULL)        : r->the_request;}/* These next two routines use the canonical name:port so that log * parsers don't need to duplicate all the vhost parsing crud. */static const char *log_virtual_host(request_rec * r, char *a){    return r->server->server_hostname;}static const char *log_server_port(request_rec * r, char *a){    return apr_psprintf(r->pool, "%u",                        r->server->port ? r->server->                        port : ap_default_port(r));}/* This respects the setting of UseCanonicalName so that * the dynamic mass virtual hosting trick works better. */static const char *log_server_name(request_rec * r, char *a){    return ap_get_server_name(r);}static const char *log_request_uri(request_rec * r, char *a){    return r->uri;}static const char *log_request_method(request_rec * r, char *a){    return r->method;}static const char *log_request_protocol(request_rec * r, char *a){    return r->protocol;}static const char *log_request_query(request_rec * r, char *a){    return (r->args != NULL) ? apr_pstrcat(r->pool, "?", r->args, NULL)        : "";}static const char *log_status(request_rec * r, char *a){    return pfmt(r->pool, r->status);}static const char *clf_log_bytes_sent(request_rec * r, char *a){    if (!r->sent_bodyct) {        return "-";    }    else {        return apr_off_t_toa(r->pool, r->bytes_sent);    }}static const char *log_bytes_sent(request_rec * r, char *a){    if (!r->sent_bodyct) {        return "0";    }    else {        return apr_psprintf(r->pool, "%" APR_OFF_T_FMT, r->bytes_sent);    }}static struct log_item_list{    char ch;    item_key_func func;} log_item_keys[] = {    {    'T', log_request_duration}, {    'r', log_request_line}, {    'U', log_request_uri}, {    's', log_status}, {    'b', clf_log_bytes_sent}, {    'B', log_bytes_sent}, {    'V', log_server_name}, {    'v', log_virtual_host}, {    'p', log_server_port}, {    'H', log_request_protocol}, {    'm', log_request_method}, {    'q', log_request_query}, {    'w', log_worker_name}, {    '\0'}};static struct log_item_list *find_log_func(char k){    int i;    for (i = 0; log_item_keys[i].ch; ++i)        if (k == log_item_keys[i].ch) {            return &log_item_keys[i];        }    return NULL;}static char *parse_request_log_misc_string(apr_pool_t * p,                                           request_log_format_item * it,                                           const char **sa){    const char *s;    char *d;    it->func = constant_item;    s = *sa;    while (*s && *s != '%') {        s++;    }    /*     * This might allocate a few chars extra if there's a backslash     * escape in the format string.     */    it->arg = apr_palloc(p, s - *sa + 1);    d = it->arg;    s = *sa;    while (*s && *s != '%') {        if (*s != '\\') {            *d++ = *s++;        }        else {            s++;            switch (*s) {            case '\\':                *d++ = '\\';                s++;                break;            case 'n':                *d++ = '\n';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -