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

📄 mod_jk2.c

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 C
📖 第 1 页 / 共 2 页
字号:
                              void *overridesv){    jk_uriEnv_t *base = (jk_uriEnv_t *) basev;    jk_uriEnv_t *overrides = (jk_uriEnv_t *)overridesv;        fprintf(stderr,  "Merging workerEnv \n" );        /* The 'mountcopy' option should be implemented in common.     */    return overrides;}/** Standard apache callback, initialize jk. This is called after all    the settings took place. */static int jk2_init(server_rec *s, ap_pool *pconf){    jk_uriEnv_t *serverEnv=(jk_uriEnv_t *)        ap_get_module_config(s->module_config, &jk2_module);        jk_env_t *env=workerEnv->globalEnv;    ap_pool *gPool=NULL;    void *data=NULL;    int rc=JK_OK;    env->l->jkLog(env, env->l, JK_LOG_INFO, "mod_jk child init\n" );        if(s->is_virtual)         return OK;        if(!workerEnv->was_initialized) {        workerEnv->was_initialized = JK_TRUE;                env->l->jkLog(env, env->l, JK_LOG_INFO,                      "mod_jk.post_config() init worker env\n");        workerEnv->parentInit(env, workerEnv );        workerEnv->init(env, workerEnv );                workerEnv->server_name   = (char *)ap_get_server_version();#if MODULE_MAGIC_NUMBER >= 19980527        /* Tell apache we're here */        ap_add_version_component(JK_EXPOSED_VERSION);#endif    }    return OK;}/* ========================================================================= *//* The JK module handlers                                                    *//* ========================================================================= *//** Main service method, called to forward a request to tomcat */static int jk2_handler(request_rec *r){       jk_logger_t      *l=NULL;    int              rc;    jk_worker_t *worker=NULL;    jk_endpoint_t *end = NULL;    jk_uriEnv_t *uriEnv;    jk_env_t *env;    uriEnv=ap_get_module_config( r->request_config, &jk2_module );    /* If this is a proxy request, we'll notify an error */    if(r->proxyreq) {        return HTTP_INTERNAL_SERVER_ERROR;    }    /* not for me, try next handler */    if(uriEnv==NULL || strcmp(r->handler,JK_HANDLER)!= 0 )        return DECLINED;        /* Get an env instance */    env = workerEnv->globalEnv->getEnv( workerEnv->globalEnv );    /* Set up r->read_chunked flags for chunked encoding, if present */    if(rc = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK)) {        env->l->jkLog(env, env->l, JK_LOG_INFO,                      "mod_jk.handler() Can't setup client block %d\n", rc);        workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );        return rc;    }    if( uriEnv == NULL ) {        /* SetHandler case - per_dir config should have the worker*/        worker =  workerEnv->defaultWorker;        env->l->jkLog(env, env->l, JK_LOG_INFO,                       "mod_jk.handler() Default worker for %s %s\n",                      r->uri, worker->mbean->name);     } else {        worker=uriEnv->worker;        env->l->jkLog(env, env->l, JK_LOG_INFO,                       "mod_jk.handler() per dir worker for %#lx %#lx\n",                      worker, uriEnv );                if( worker==NULL && uriEnv->workerName != NULL ) {            worker=env->getByName( env,uriEnv->workerName);            env->l->jkLog(env, env->l, JK_LOG_INFO,                           "mod_jk.handler() finding worker for %s %#lx %#lx\n",                          uriEnv->workerName, worker, uriEnv );            uriEnv->worker=worker;        }    }    if(worker==NULL ) {        env->l->jkLog(env, env->l, JK_LOG_ERROR,                       "mod_jk.handle() No worker for %s\n", r->uri);         workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );        return 500;    }    {        jk_ws_service_t sOnStack;        jk_ws_service_t *s=&sOnStack;        jk_pool_t *rPool=NULL;        int rc1;        /* Get a pool for the request XXX move it in workerEnv to           be shared with other server adapters */        rPool= worker->rPoolCache->get( env, worker->rPoolCache );        if( rPool == NULL ) {            rPool=worker->mbean->pool->create( env, worker->mbean->pool, HUGE_POOL_SIZE );            env->l->jkLog(env, env->l, JK_LOG_INFO,                          "mod_jk.handler(): new rpool\n");        }        jk2_service_apache13_init(env, s);        s->pool = rPool;        s->init( env, s, worker, r );                s->is_recoverable_error = JK_FALSE;        s->uriEnv = uriEnv;        env->l->jkLog(env, env->l, JK_LOG_INFO,                       "modjk.handler() Calling %s %#lx\n", worker->mbean->name, uriEnv);         rc = worker->service(env, worker, s);                s->afterRequest(env, s);        rPool->reset(env, rPool);                rc1=worker->rPoolCache->put( env, worker->rPoolCache, rPool );        if( rc1 == JK_OK ) {            rPool=NULL;        } else {            rPool->close(env, rPool);        }    }    if(rc==JK_OK) {        workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );        return OK;    /* NOT r->status, even if it has changed. */    }    env->l->jkLog(env, env->l, JK_LOG_ERROR,             "mod_jk.handler() Error connecting to tomcat %d\n", rc);    workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );    return 500;}/** Use the internal mod_jk mappings to find if this is a request for *    tomcat and what worker to use.  */static int jk2_translate(request_rec *r){    jk_uriEnv_t *uriEnv;    jk_env_t *env;                if(r->proxyreq) {        return DECLINED;    }        /* Check JkMount directives, if any *//*     if( workerEnv->uriMap->size == 0 ) *//*         return DECLINED; */        /* get_env() */    env = workerEnv->globalEnv->getEnv( workerEnv->globalEnv );            uriEnv = workerEnv->uriMap->mapUri(env, workerEnv->uriMap,                                       ap_get_server_name(r),                                       ap_get_server_port(r),                                       r->uri);        if(uriEnv==NULL || uriEnv->workerName==NULL) {        workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );        return DECLINED;    }    ap_set_module_config( r->request_config, &jk2_module, uriEnv );    r->handler=JK_HANDLER;    env->l->jkLog(env, env->l, JK_LOG_INFO,                   "mod_jk.translate(): uriMap %s %s\n",                  r->uri, uriEnv->workerName);    workerEnv->globalEnv->releaseEnv( workerEnv->globalEnv, env );    return OK;}static const handler_rec jk2_handlers[] ={    { JK_MAGIC_TYPE, jk2_handler },    { JK_HANDLER, jk2_handler },        NULL};module MODULE_VAR_EXPORT jk2_module = {    STANDARD_MODULE_STUFF,    jk2_init,             /* module initializer */    NULL,                       /* per-directory config creator */    NULL,                       /* dir config merger */    jk2_create_config,           /* server config creator */    jk2_merge_config,            /* server config merger */    jk2_cmds,                    /* command table */    jk2_handlers,                /* [7] list of handlers */    jk2_translate,               /* [2] filename-to-URI translation */    NULL,                       /* [5] check/validate user_id */    NULL,                       /* [6] check user_id is valid *here* */    NULL,                       /* [4] check access by host address */    NULL,                       /* XXX [7] MIME type checker/setter */    NULL,                       /* [8] fixups */    NULL,                       /* [10] logger */    NULL,                       /* [3] header parser */    NULL,                    /* apache child process initializer */    NULL,  /* exit_handler, */               /* apache child process exit/cleanup */    NULL                        /* [1] post read_request handling */#ifdef X_EAPI    /*     * Extended module APIs, needed when using SSL.     * STDC say that we do not have to have them as NULL but     * why take a chance     */    ,NULL,                      /* add_module */    NULL,                       /* remove_module */    NULL,                       /* rewrite_command */    NULL,                       /* new_connection */    NULL                       /* close_connection */#endif /* EAPI */};#ifdef WIN32BOOL WINAPI DllMain(HINSTANCE hInst,        // Instance Handle of the DLL                    ULONG ulReason,         // Reason why NT called this DLL                    LPVOID lpReserved)      // Reserved parameter for future use{    GetModuleFileName( hInst, file_name, sizeof(file_name));    return TRUE;}#endif

⌨️ 快捷键说明

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