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

📄 jk_jni_aprimpl.c

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 C
📖 第 1 页 / 共 2 页
字号:
/**/JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_jkSetAttribute  (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong componentP, jstring nameJ, jstring valueJ ){    jk_env_t *env=(jk_env_t *)(void *)(long)xEnv;    jk_bean_t *component=(jk_bean_t *)(void *)(long)componentP;        char *name=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, nameJ, 0);    char *value=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, valueJ, 0);    int rc=JK_OK;        /* XXX need to find a way how to set this to channel:jni component     * instead of global variable.     */    if(env == NULL || component == NULL) {        if (strcmp(name, "channel:jni") == 0) {            if (strcmp(value, "starting") == 0)                jk_jni_status_code = JNI_TOMCAT_STARTING;            else if (strcmp(value, "done") == 0)               jk_jni_status_code = JNI_TOMCAT_STARTED;        }    } else {        if( component->setAttribute!=NULL ) {            rc=component->setAttribute( env, component, name,                                        component->pool->pstrdup( env, component->pool, value ) );        }    }    (*jniEnv)->ReleaseStringUTFChars(jniEnv, nameJ, name);    (*jniEnv)->ReleaseStringUTFChars(jniEnv, valueJ, value);        return rc;}/**/JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_jkInit  (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong componentP ){    jk_env_t *env=(jk_env_t *)(void *)(long)xEnv;    jk_bean_t *component=(jk_bean_t *)(void *)(long)componentP;    int rc;    if( component->init ==NULL )        return JK_OK;        rc=component->init( env, component );    return rc;}/**/JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_jkDestroy  (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong componentP ){    jk_env_t *env=(jk_env_t *)(void *)(long)xEnv;    jk_bean_t *component=(jk_bean_t *)(void *)(long)componentP;    int rc;        if( component->destroy ==NULL )        return JK_OK;        rc=component->destroy( env, component );    /* XXX component->pool->reset( env, component->pool ); */        return rc;}/**/JNIEXPORT jstring JNICALL Java_org_apache_jk_apr_AprImpl_jkGetAttribute  (JNIEnv *jniEnv, jobject o, jlong xEnv, jlong componentP, jstring nameJ){    jk_env_t *env=(jk_env_t *)(void *)(long)xEnv;    jk_bean_t *component=(jk_bean_t *)(void *)(long)componentP;    char *name=(char *)(*jniEnv)->GetStringUTFChars(jniEnv, nameJ, 0);    char *value;    jstring valueJ=NULL;        if( component->getAttribute !=NULL ){           value=component->getAttribute( env, component, name );        if( value!=NULL ) {            valueJ=(*jniEnv)->NewStringUTF(jniEnv, value);        }    }        (*jniEnv)->ReleaseStringUTFChars(jniEnv, nameJ, name);        return valueJ;}/**/JNIEXPORT jint JNICALL Java_org_apache_jk_apr_AprImpl_jkInvoke  (JNIEnv *jniEnv, jobject o, jlong envJ, jlong componentP, jlong endpointP, jint code,   jbyteArray data, jint off, jint len,   jint raw){    jk_env_t *env = (jk_env_t *)(void *)(long)envJ;    jk_bean_t *compCtx=(jk_bean_t *)(void *)(long)endpointP;    void *target=(void *)(long)componentP;    jk_bean_t *bean=(jk_bean_t *)target;    jk_endpoint_t *ep;    jbyte *nbuf=NULL;    jboolean iscopy;    int cnt=0;    jint rc = 0;    unsigned acc = 0;    unsigned char *oldBuf;    if( compCtx==NULL || data==NULL ) {        env->l->jkLog(env, env->l, JK_LOG_ERROR,"jni.jkInvoke() NPE\n");        return JK_ERR;    }    ep = compCtx->object;    if( ep==NULL || ep->reply==NULL) {        env->l->jkLog(env, env->l, JK_LOG_ERROR,"jni.jkInvoke() NPE ep==null\n");        return JK_ERR;    }                if( arrayAccessMethod == JK_GET_BYTE_ARRAY_ELEMENTS ) {        nbuf = (*jniEnv)->GetByteArrayElements(jniEnv, data, &iscopy);        if( iscopy )            env->l->jkLog(env, env->l, JK_LOG_INFO,                          "aprImpl.jkInvoke() get java bytes iscopy %d\n", iscopy);                if(nbuf==NULL) {            env->l->jkLog(env, env->l, JK_LOG_ERROR,                           "jkInvoke() NullPointerException 2\n");            return -1;        }        if( raw==0 ) {            ep->reply->reset(env, ep->reply);        }        oldBuf=ep->reply->buf;        ep->reply->buf = (unsigned char *)nbuf;    } else if ( arrayAccessMethod == JK_GET_REGION ) {        (*jniEnv)->GetByteArrayRegion( jniEnv, data, off, len, (jbyte *)ep->reply->buf );    }                if( raw == 0 ) {        rc=ep->reply->checkHeader( env, ep->reply, ep );    } else {        ep->reply->len = len;        ep->reply->pos= off;    }    /* ep->reply->dump( env, ep->reply ,"MESSAGE"); */    if( rc < 0  ) {        env->l->jkLog(env, env->l, JK_LOG_ERROR,                      "jkInvoke() invalid data\n");        /* we just can't recover, unset recover flag */        if( arrayAccessMethod == JK_GET_BYTE_ARRAY_ELEMENTS ) {            (*jniEnv)->ReleaseByteArrayElements(jniEnv, data, ep->reply->buf, 0);            ep->reply->buf=oldBuf;        }        return JK_ERR;    }    if( bean->debug > 0 )         env->l->jkLog(env, env->l, JK_LOG_INFO,                      "jkInvoke() component dispatch %d %d \n", rc, code );        if( bean->invoke != NULL ) {        env->l->jkLog(env, env->l, JK_LOG_INFO,                      "jkInvoke() invoke %#lx \n", bean->invoke );        rc=bean->invoke( env, bean, ep, code, ep->reply, raw );    } else {        /* NOT USED. Backward compat for AJP13 messages, where the code is used to         locate a handler. Deprecated, use the invoke() method  ! */        env->l->jkLog(env, env->l, JK_LOG_INFO,                      "jkInvoke() component dispatch2 %d %d %#lx\n", rc, code, bean->invoke);        rc=workerEnv->dispatch( env, workerEnv, target, ep, code, ep->reply );     }    /* Copy back the response, if any */    if( arrayAccessMethod == JK_GET_BYTE_ARRAY_ELEMENTS ) {        if( rc == JK_INVOKE_WITH_RESPONSE ) {            /* env->l->jkLog(env, env->l, JK_LOG_INFO, */            /*               "jkInvoke() release byte array elements %d %d %#lx\n", */            /*                ep->reply->pos, ep->reply->len , ep->reply->buf ); */            ep->reply->end( env, ep->reply );            (*jniEnv)->ReleaseByteArrayElements(jniEnv, data, nbuf, JNI_ABORT );            rc=JK_OK;        } else {            (*jniEnv)->ReleaseByteArrayElements(jniEnv, data, nbuf, 0);        }        ep->reply->buf=oldBuf;    } else if ( arrayAccessMethod == JK_GET_REGION ) {        if( rc == JK_INVOKE_WITH_RESPONSE ) {            /*env->l->jkLog(env, env->l, JK_LOG_INFO, */            /*              "jkInvoke() release %d %d %#lx\n", */            /*              ep->reply->pos, ep->reply->len , ep->reply->buf ); */            ep->reply->end( env, ep->reply );            (*jniEnv)->SetByteArrayRegion( jniEnv, data, 0, ep->reply->len, (jbyte *)ep->reply->buf );            rc=JK_OK;        }    }     if( (*jniEnv)->ExceptionCheck( jniEnv ) ) {        env->l->jkLog(env, env->l, JK_LOG_INFO,                      "jkInvoke() component dispatch %d %d %#lx\n", rc, code, bean->invoke);        (*jniEnv)->ExceptionDescribe( jniEnv );        /* Not needed if Describe is used.            (*jniEnv)->ExceptionClear( jniEnv ) */    }        return rc;}static JNINativeMethod org_apache_jk_apr_AprImpl_native_methods[] = {    {         "initialize", "()I",         Java_org_apache_jk_apr_AprImpl_initialize     },    {         "terminate", "()I",        Java_org_apache_jk_apr_AprImpl_terminate    },    {         "getJkEnv", "()J",        Java_org_apache_jk_apr_AprImpl_getJkEnv    },    {        "releaseJkEnv", "(J)V",        Java_org_apache_jk_apr_AprImpl_releaseJkEnv    },    {         "getJkHandler", "(JLjava/lang/String;)J",        Java_org_apache_jk_apr_AprImpl_getJkHandler    },    {        "createJkHandler", "(JLjava/lang/String;)J",        Java_org_apache_jk_apr_AprImpl_createJkHandler    },    {        "jkSetAttribute", "(JJLjava/lang/String;Ljava/lang/String;)I",        Java_org_apache_jk_apr_AprImpl_jkSetAttribute    },    {        "jkGetAttribute", "(JJLjava/lang/String;)Ljava/lang/String;",        Java_org_apache_jk_apr_AprImpl_jkGetAttribute    },    {        "jkInit", "(JJ)I",        Java_org_apache_jk_apr_AprImpl_jkInit    },    {        "jkDestroy", "(JJ)I",        Java_org_apache_jk_apr_AprImpl_jkDestroy    },    {        "jkInvoke", "(JJJI[BIII)I",        Java_org_apache_jk_apr_AprImpl_jkInvoke    },    {        "jkRecycle", "(JJ)V",        Java_org_apache_jk_apr_AprImpl_jkRecycle    },};/*  Register Native methods returning the total number of  native functions*/jint jk_jni_aprImpl_registerNatives(JNIEnv *jniEnv, jclass bridgeClass){     return (*jniEnv)->RegisterNatives(jniEnv, bridgeClass,                        org_apache_jk_apr_AprImpl_native_methods,                        sizeof(org_apache_jk_apr_AprImpl_native_methods) /                         sizeof(JNINativeMethod));}#endif /* HAVE_JNI */

⌨️ 快捷键说明

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