📄 jk_jnicb.c
字号:
(*env)->SetObjectArrayElement(env, envbuf, 11, (*env)->NewStringUTF(env, ps->server_software)); jk_log(pl, JK_LOG_DEBUG, "---> server_software: %s\n", ps->server_software); } if(ps->is_ssl) { if(ps->ssl_cert) { (*env)->SetObjectArrayElement(env, envbuf, 12, (*env)->NewStringUTF(env, ps->ssl_cert)); jk_log(pl, JK_LOG_DEBUG, "---> ssl_cert: %s\n", ps->ssl_cert); } if(ps->ssl_cipher) { (*env)->SetObjectArrayElement(env, envbuf, 13, (*env)->NewStringUTF(env, ps->ssl_cipher)); jk_log(pl, JK_LOG_DEBUG, "---> ssl_cipher: %s\n", ps->ssl_cipher); } if(ps->ssl_session) { (*env)->SetObjectArrayElement(env, envbuf, 14, (*env)->NewStringUTF(env, ps->ssl_session)); jk_log(pl, JK_LOG_DEBUG, "---> ssl_session: %s\n", ps->ssl_session); } } jk_log(pl, JK_LOG_DEBUG, "Done JNIConnectionHandler::readEnvironment\n"); return JK_TRUE;}/* * Class: org_apache_tomcat_modules_server_JNIConnectionHandler * Method: readHeaders * Signature: (JJ[Ljava/lang/String;[Ljava/lang/String;)I */JNIEXPORT jint JNICALL Java_org_apache_tomcat_modules_server_JNIConnectionHandler_readHeaders (JNIEnv *env, jobject o, jlong s, jlong l, jobjectArray hnames, jobjectArray hvalues){ jk_ws_service_t *ps = (jk_ws_service_t *)(int)s; jk_logger_t *pl = (jk_logger_t *)(int)l; unsigned i; jk_log(pl, JK_LOG_DEBUG, "Into JNIConnectionHandler::readHeaders\n"); if(!ps) { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::readHeaders, NULL ws service object\n"); return JK_FALSE; } jk_log(pl, JK_LOG_DEBUG, "In JNIConnectionHandler::readHeaders, %d headers follow --->\n", ps->num_headers); for(i = 0 ; i < ps->num_headers ; i++) { (*env)->SetObjectArrayElement(env, hnames, i, (*env)->NewStringUTF(env, ps->headers_names[i])); (*env)->SetObjectArrayElement(env, hvalues, i, (*env)->NewStringUTF(env, ps->headers_values[i])); jk_log(pl, JK_LOG_DEBUG, "---> %s = %s\n", ps->headers_names[i], ps->headers_values[i]); } jk_log(pl, JK_LOG_DEBUG, "Done JNIConnectionHandler::readHeaders\n"); return JK_TRUE;}/* * Class: org_apache_tomcat_modules_server_JNIConnectionHandler * Method: startReasponse * Signature: (JJILjava/lang/String;[Ljava/lang/String;[Ljava/lang/String;I)I */JNIEXPORT jint JNICALL Java_org_apache_tomcat_modules_server_JNIConnectionHandler_startReasponse (JNIEnv *env, jobject o, jlong s, jlong l, jint sc, jstring msg, jobjectArray hnames, jobjectArray hvalues, jint hcnt){ jk_ws_service_t *ps = (jk_ws_service_t *)(int)s; jk_logger_t *pl = (jk_logger_t *)(int)l; const char *nmsg = NULL; char **nhnames = NULL; char **nhvalues = NULL; jstring *shnames = NULL; jstring *shvalues = NULL; int i = 0; int ok = JK_TRUE; jk_log(pl, JK_LOG_DEBUG, "Into JNIConnectionHandler::startReasponse\n"); if(!ps) { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::startReasponse, NULL ws service object\n"); return JK_FALSE; } jk_log(pl, JK_LOG_DEBUG, "In JNIConnectionHandler::startReasponse, %d headers follow --->\n", hcnt); if(hcnt) { ok = JK_FALSE; nhnames = (char **)jk_pool_alloc(ps->pool, hcnt * sizeof(char *)); nhvalues = (char **)jk_pool_alloc(ps->pool, hcnt * sizeof(char *)); shnames = (jstring *)jk_pool_alloc(ps->pool, hcnt * sizeof(jstring)); shvalues = (jstring *)jk_pool_alloc(ps->pool, hcnt * sizeof(jstring)); if(nhvalues && nhnames && shnames && shnames) { for( ; i < hcnt ; i++) { jboolean iscommit; shvalues[i] = shnames[i] = NULL; nhnames[i] = nhvalues[i] = NULL; shnames[i] = (*env)->GetObjectArrayElement(env, hnames, i); shvalues[i] = (*env)->GetObjectArrayElement(env, hvalues, i); if(!shvalues[i] || !shnames[i]) { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::startReasponse, GetObjectArrayElement error\n"); break; } nhnames[i] = (char *)(*env)->GetStringUTFChars(env, shnames[i], &iscommit); nhvalues[i] = (char *)(*env)->GetStringUTFChars(env, shvalues[i], &iscommit); if(!nhvalues[i] || !nhnames[i]) { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::startReasponse, GetStringUTFChars error\n"); break; } jk_log(pl, JK_LOG_DEBUG, "---> %s=%s\n", nhnames[i], nhvalues[i]); } if(i == hcnt) { ok = JK_TRUE; jk_log(pl, JK_LOG_DEBUG, "In JNIConnectionHandler::startReasponse. ----- End headers.\n", hcnt); } } else { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::startReasponse, memory allocation error\n"); } } if(msg && ok) { jboolean iscommit; nmsg = (*env)->GetStringUTFChars(env, msg, &iscommit); if(!nmsg) { ok = JK_FALSE; } } if(ok) { if(!ps->start_response(ps, sc, nmsg, (const char**)nhnames, (const char**)nhvalues, hcnt)) { ok = JK_FALSE; jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::startReasponse, servers startReasponse failed\n"); } } if(nmsg) { (*env)->ReleaseStringUTFChars(env, msg, nmsg); } if(i < hcnt) { i++; } if(nhvalues) { int j; for(j = 0 ; j < i ; j++) { if(nhvalues[j]) { (*env)->ReleaseStringUTFChars(env, shvalues[j], nhvalues[j]); } } } if(nhnames) { int j; for(j = 0 ; j < i ; j++) { if(nhnames[j]) { (*env)->ReleaseStringUTFChars(env, shnames[j], nhnames[j]); } } } jk_log(pl, JK_LOG_DEBUG, "Done JNIConnectionHandler::startReasponse.\n"); return ok;}/* * Class: org_apache_tomcat_modules_server_JNIConnectionHandler * Method: write * Signature: (JJ[BII)I */JNIEXPORT jint JNICALL Java_org_apache_tomcat_modules_server_JNIConnectionHandler_write (JNIEnv *env, jobject o, jlong s, jlong l, jbyteArray buf, jint from, jint cnt){ jk_ws_service_t *ps = (jk_ws_service_t *)(int)s; jk_logger_t *pl = (jk_logger_t *)(int)l; jint rc = JK_FALSE; jboolean iscommit; jbyte *nbuf; unsigned nfrom = (unsigned)from; unsigned ncnt = (unsigned)cnt; jk_log(pl, JK_LOG_DEBUG, "In JNIConnectionHandler::write\n"); if(!ps) { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::write, NULL ws service object\n"); return JK_FALSE; } nbuf = (*env)->GetByteArrayElements(env, buf, &iscommit); if(!nbuf) { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::write, GetByteArrayElements error\n"); return JK_FALSE; } if(!ps->write(ps, nbuf + nfrom, ncnt)) { jk_log(pl, JK_LOG_ERROR, "In JNIConnectionHandler::write, failed to write to the web server\n"); } else { rc = (jint)JK_TRUE; } (*env)->ReleaseByteArrayElements(env, buf, nbuf, JNI_ABORT); return rc; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -