From 5cc9c8405a3474ab8f473f2ee9ae1fa24bcbb7bf Mon Sep 17 00:00:00 2001 From: Unbit Date: Tue, 5 Mar 2013 13:56:30 +0100 Subject: [PATCH] completed uwsgi_jvm_consume_input_stream --- plugins/corerouter/cr.h | 3 ++- plugins/jvm/jvm_plugin.c | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/plugins/corerouter/cr.h b/plugins/corerouter/cr.h index 4bccbc59..9f5f8913 100644 --- a/plugins/corerouter/cr.h +++ b/plugins/corerouter/cr.h @@ -298,7 +298,8 @@ struct corerouter_session { char client_address[INET_ADDRLEN]; #endif - char client_port[6]; + // use 11 bytes to be snprintf friendly + char client_port[11]; }; void uwsgi_opt_corerouter(char *, char *, void *); diff --git a/plugins/jvm/jvm_plugin.c b/plugins/jvm/jvm_plugin.c index 60559dd2..c26a9352 100644 --- a/plugins/jvm/jvm_plugin.c +++ b/plugins/jvm/jvm_plugin.c @@ -160,6 +160,14 @@ long uwsgi_jvm_number2c(jobject o) { return -1; } +size_t uwsgi_jvm_array_len(jobject o) { + jsize len = (*ujvm_env)->GetArrayLength(ujvm_env, o); + if (uwsgi_jvm_exception()) { + return 0; + } + return len; +} + int uwsgi_jvm_consume_input_stream(struct wsgi_request *wsgi_req, size_t chunk, jobject o) { int ret = 0; jclass c = uwsgi_jvm_class_from_object(o); @@ -190,14 +198,23 @@ int uwsgi_jvm_consume_input_stream(struct wsgi_request *wsgi_req, size_t chunk, break; } // get the body of the array - uint8_t *buf = (*ujvm_env)->GetByteArrayElements(ujvm_env, byte_buffer, JNI_FALSE); - if (!buf) { ret = -1; break } + size_t buf_len = uwsgi_jvm_array_len(byte_buffer); + char *buf = (char *) (*ujvm_env)->GetByteArrayElements(ujvm_env, byte_buffer, JNI_FALSE); + if (!buf) { ret = -1; break; } //send + if (uwsgi_response_write_body_do(wsgi_req, buf, buf_len)) { + (*ujvm_env)->ReleaseByteArrayElements(ujvm_env, byte_buffer, (jbyte *) buf, 0); + ret = -1; break; + } // release + (*ujvm_env)->ReleaseByteArrayElements(ujvm_env, byte_buffer, (jbyte *) buf, 0); } uwsgi_jvm_local_unref(byte_buffer); // close the inputstream + if (uwsgi_jvm_call(o, mid_close)) { + return -1; + } return ret; }