completed uwsgi_jvm_consume_input_stream

This commit is contained in:
Unbit
2013-03-05 13:56:30 +01:00
parent 990028697b
commit 5cc9c8405a
2 changed files with 21 additions and 3 deletions
+2 -1
View File
@@ -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 *);
+19 -2
View File
@@ -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;
}