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

📄 jk_config.c

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    if( strcmp( name, "info" ) == 0 ) {        /* do nothing, this is a comment */        return JK_OK;    }    if( (mbean == cfg->mbean) &&        (strcmp( name, "file" ) == 0 ) &&        cfg->file != NULL ) {        /* 'file' property on ourself, avoid rec.         */        if( cfg->mbean->debug > 0 )            env->l->jkLog(env, env->l, JK_LOG_DEBUG,                          "config.setAttribute() ignore %s %s %s\n", mbean->name, name, val );                return JK_OK;    }        if(mbean->setAttribute) {        int rc= mbean->setAttribute( env, mbean, name, val );        if( rc != JK_OK ) {            env->l->jkLog(env, env->l, JK_LOG_INFO,                          "config.setAttribute() Error setting %s %s %s\n", mbean->name, name, val );        }        if( cfg->mbean->debug > 0 )             env->l->jkLog(env, env->l, JK_LOG_DEBUG,                          "config.setAttribute() %d setting %s %s %s\n",                          cfg->mbean->debug, mbean->name, name, val );        return rc;    }    return JK_ERR;}int jk2_config_setPropertyString(jk_env_t *env, jk_config_t *cfg,                                 char *name, char *value){    jk_bean_t *mbean;    jk_workerEnv_t *wEnv=cfg->workerEnv;    jk_map_t *initData=cfg->map;    int status;    char *objName=NULL;    char *propName=NULL;        /* fprintf( stderr, "setPropertyString %s %s \n", name, value ); */    status=jk2_config_processBeanPropertyString(env, cfg, name, &objName, &propName );    if( status!=JK_OK ) {        /* Unknown properties ends up in our config, as 'unclaimed' or global */        cfg->setProperty( env, cfg, cfg->mbean, name, value );        return status;    }    /** Replace properties in the object name */    objName = jk2_config_replaceProperties(env, cfg->map, cfg->map->pool, objName);    mbean=env->getBean( env, objName );    if( mbean==NULL ) {        mbean=env->createBean( env, cfg->pool, objName );    }    if( mbean == NULL ) {        /* Can't create it, save the value in our map */        cfg->setProperty( env, cfg, cfg->mbean, name, value );        return JK_ERR;    }    if( mbean->settings == NULL )        jk2_map_default_create(env, &mbean->settings, cfg->pool);        return cfg->setProperty( env, cfg, mbean, propName, value );}/** *  Replace $(property) in value. *  */char *jk2_config_replaceProperties(jk_env_t *env, jk_map_t *m,                                   struct jk_pool *resultPool,                                    char *value){    char *rc;    char *env_start;    int rec = 0;    int didReplace=JK_FALSE;    rc = value;    env_start = value;    while(env_start = strstr(env_start, "${")) {        char *env_end = strstr(env_start, "}");        if( rec++ > 20 ) return rc;        if(env_end) {            char env_name[LENGTH_OF_LINE + 1] = "";             char *env_value;            strncpy(env_name, env_start + 2, (env_end-env_start)-2);            env_value = m->get(env, m, env_name);	    if(env_value == NULL ) {	      env_value=getenv( env_name );	    }            /* fprintf(stderr, "XXXjk_map %s %s \n", env_name, env_value ); */            if(env_value != NULL ) {                int offset=0;                /* tmp allocations in tmpPool */                char *new_value = env->tmpPool->calloc(env, env->tmpPool,                                                        (strlen(rc) + strlen(env_value)));                if(!new_value) {                    break;                }                if( env_start == rc ) {                    new_value[0]='\0';                } else {                    strncpy(new_value, rc, env_start-rc);                }                /* fprintf(stderr, "XXX %s %s %s\n", new_value, env_value, env_end + 1 ); */                strcat(new_value, env_value);                strcat(new_value, env_end + 1);		offset= env_start - rc + strlen( env_value );                rc = new_value;		/* Avoid recursive subst */                env_start = rc + offset;                didReplace=JK_TRUE;            } else {                env_start = env_end;            }        } else {            break;        }    }        if( didReplace && resultPool!=NULL && resultPool != env->tmpPool ) {        /* Make sure the result is allocated in the right mempool.           tmpPool will be reset for each request.        */        rc=resultPool->pstrdup( env, resultPool, rc );    }    return rc;}/* -------------------- Reconfiguration -------------------- *//** cfgData has component names as keys and a map of attributes as value. *  We'll create the beans and call the setters. *  If this is not firstTime, we create new componens and modify those *  with a lower 'ver'. * *  Note that _no_ object can be ever destroyed. You can 'disable' them, *  but _never_ remove/destroy it. We work in a multithreaded environment, *  and any removal may have disastrous consequences. Using critical *  sections would drastically affect the performance. */int jk2_config_processConfigData(jk_env_t *env, jk_config_t *cfg,int firstTime ){    int i;    int rc;        for( i=0; i<cfg->cfgData->size( env, cfg->cfgData ); i++ ) {        char *name=cfg->cfgData->nameAt(env, cfg->cfgData, i);        rc=cfg->processNode(env, cfg , name, firstTime);    }    return rc;}int jk2_config_processNode(jk_env_t *env, jk_config_t *cfg, char *name, int firstTime ){    int j;           jk_map_t *prefNode=cfg->cfgData->get(env, cfg->cfgData, name);    jk_bean_t *bean;    int ver;    char *verString;    if( cfg->mbean->debug > 5 )     env->l->jkLog(env, env->l, JK_LOG_DEBUG,                   "config.setConfig():  process %s\n", name );        bean=env->getBean( env, name );    if( bean==NULL ) {        if( cfg->mbean->debug > 0 ) {            env->l->jkLog(env, env->l, JK_LOG_DEBUG,                           "config.setConfig():  Creating %s\n", name );        }        bean=env->createBean( env, cfg->pool, name );    }    if( bean == NULL ) {        /* Can't create it, save the value in our map */        env->l->jkLog(env, env->l, JK_LOG_ERROR,                      "config.update(): Can't create %s\n", name );        return JK_ERR;    }    verString= prefNode->get( env, prefNode, "ver" );    if( !firstTime ) {        if( verString == NULL ) {            return JK_OK;        }        ver=atoi( verString );                if( ver <= bean->ver) {            /* Object didn't change             */            return JK_OK;        }    }        if( !firstTime )        env->l->jkLog(env, env->l, JK_LOG_INFO,                      "config.update(): Updating %s\n", name );        /* XXX Maybe we shoud destroy/init ? */        for( j=0; j<prefNode->size( env, prefNode ); j++ ) {        char *pname=prefNode->nameAt(env, prefNode, j);        char *pvalue=prefNode->valueAt(env, prefNode, j);        cfg->setProperty( env, cfg, bean, pname, pvalue );    }    return JK_OK;}

⌨️ 快捷键说明

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