diff --git a/plugins/jvm/jvm.h b/plugins/jvm/jvm.h deleted file mode 100644 index 02deb536..00000000 --- a/plugins/jvm/jvm.h +++ /dev/null @@ -1,34 +0,0 @@ -#include "../../uwsgi.h" -#include - -struct uwsgi_jvm { - - struct uwsgi_string_list *classpath; - - JNIEnv *env; - char *class; - jclass main_class; - - jclass str_class; - jclass ht_class; - jclass fd_class; -}; - - -jmethodID uwsgi_jvm_get_method_id(jclass, char *, char *); -jmethodID uwsgi_jvm_get_static_method_id(jclass, char *, char *); -jclass uwsgi_jvm_get_class(char *); -jclass uwsgi_jvm_get_object_class(jobject); -int uwsgi_jvm_exception(void); - -jobject uwsgi_jvm_str_new(char *, int ); -jobject uwsgi_jvm_str(char *); - -jobject uwsgi_jvm_array_get(jobject , int ); -jobject uwsgi_jvm_ht_new(void); -jobject uwsgi_jvm_ht_put(jobject, jobject, jobject); - -jobject uwsgi_jvm_fd(int); - -char *uwsgi_jvm_str2c(jobject); -int uwsgi_jvm_strlen2c(jobject); diff --git a/plugins/jvm/jvm_plugin.c b/plugins/jvm/jvm_plugin.c deleted file mode 100644 index 0444bf12..00000000 --- a/plugins/jvm/jvm_plugin.c +++ /dev/null @@ -1,210 +0,0 @@ -#include "jvm.h" - -/* - -with javap -s -p -you can get method signatures - -This plugin is the core for all of the JVM-based ones - -*/ - -struct uwsgi_jvm ujvm; - -struct uwsgi_option uwsgi_jvm_options[] = { - {"jvm-main-class", required_argument, 0, "load the specified class", uwsgi_opt_set_str, &ujvm.class, 0}, - {"jvm-classpath", required_argument, 0, "add the specified directory to the classpath", uwsgi_opt_add_string_list, &ujvm.classpath, 0}, - {0, 0, 0, 0}, -}; - -int uwsgi_jvm_exception(void) { - - if ((*ujvm.env)->ExceptionOccurred(ujvm.env)) { - (*ujvm.env)->ExceptionDescribe(ujvm.env); - (*ujvm.env)->ExceptionClear(ujvm.env); - return 1; - } - - return 0; -} - -jclass uwsgi_jvm_get_object_class(jobject obj) { - return (*ujvm.env)->GetObjectClass(ujvm.env, obj); -} - -jclass uwsgi_jvm_get_class(char *name) { - - jclass my_class = (*ujvm.env)->FindClass(ujvm.env, name); - - if (uwsgi_jvm_exception()) { - return NULL; - } - - return my_class; -} - -jmethodID uwsgi_jvm_get_method_id(jclass cls, char *name, char *signature) { - - jmethodID mid; - - mid = (*ujvm.env)->GetMethodID(ujvm.env, cls, name, signature); - - return mid; -} - -jmethodID uwsgi_jvm_get_static_method_id(jclass cls, char *name, char *signature) { - - jmethodID mid; - - mid = (*ujvm.env)->GetStaticMethodID(ujvm.env, cls, name, signature); - - return mid; -} - -jobject uwsgi_jvm_str_new(char *str, int len) { - - jbyteArray ba; - static jmethodID str_new_mid = 0; - - if (!str_new_mid) { - str_new_mid = uwsgi_jvm_get_method_id(ujvm.str_class, "", "([BLjava/lang/String;)V"); - } - - ba = (*ujvm.env)->NewByteArray(ujvm.env, len); - (*ujvm.env)->SetByteArrayRegion(ujvm.env, ba, 0, len, (jbyte *) str); - return (*ujvm.env)->NewObject(ujvm.env, ujvm.str_class, str_new_mid, ba, - (*ujvm.env)->NewStringUTF(ujvm.env, "UTF-8")); -} - -jobject uwsgi_jvm_str(char *str) { - return (*ujvm.env)->NewStringUTF(ujvm.env, str); -} - - -int jvm_init(void) { - - jint res; - JavaVM *jvm; - JavaVMInitArgs vm_args; - JavaVMOption options[1]; - jmethodID mmid; - - char *old_cp = NULL ; - - - vm_args.version = JNI_VERSION_1_2; - - JNI_GetDefaultJavaVMInitArgs(&vm_args); - - options[0].optionString = "-Djava.class.path=."; - - struct uwsgi_string_list *cp = ujvm.classpath; - while(cp) { - if (old_cp) { - options[0].optionString = uwsgi_concat3(old_cp, ":", cp->value); - free(old_cp); - } - else { - options[0].optionString = uwsgi_concat3(options[0].optionString, ":", cp->value); - } - old_cp = options[0].optionString ; - cp = cp->next; - } - - vm_args.options = options; - vm_args.nOptions = 1; - - res = JNI_CreateJavaVM(&jvm, (void **) &ujvm.env, &vm_args); - - if (res) { - uwsgi_log("unable to initialize JVM\n"); - exit(1); - } - - uwsgi_log("JVM initialized\n"); - - if (ujvm.class) { - ujvm.main_class = uwsgi_jvm_get_class(ujvm.class); - if (!ujvm.main_class) { - exit(1); - } - - mmid = uwsgi_jvm_get_static_method_id(ujvm.main_class, "main", "([Ljava/lang/String;)V"); - if (mmid) { - (*ujvm.env)->CallStaticVoidMethod(ujvm.env, ujvm.main_class, mmid); - uwsgi_jvm_exception(); - } - } - - ujvm.str_class = uwsgi_jvm_get_class("java/lang/String"); - ujvm.ht_class = uwsgi_jvm_get_class("java/util/Hashtable"); - ujvm.fd_class = uwsgi_jvm_get_class("java/io/FileDescriptor"); - - return 1; - -} - -jobject uwsgi_jvm_array_get(jobject obj, int index) { - return (*ujvm.env)->GetObjectArrayElement(ujvm.env, obj, index); -} - -jobject uwsgi_jvm_ht_new() { - static jmethodID htimid = 0; - - if (!htimid) { - htimid = uwsgi_jvm_get_method_id(ujvm.ht_class, "", "()V"); - } - - return (*ujvm.env)->NewObject(ujvm.env, ujvm.ht_class, htimid); -} - -jobject uwsgi_jvm_ht_put(jobject obj, jobject key, jobject val) { - - static jmethodID htpmid = 0 ; - - if (!htpmid) { - htpmid = uwsgi_jvm_get_method_id(ujvm.ht_class, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); - } - - return (*ujvm.env)->CallObjectMethod(ujvm.env, obj, htpmid, key, val); -} - -jobject uwsgi_jvm_fd(int fd) { - - jobject fd_obj; - static jmethodID fd_mid = 0; - static jfieldID fd_field = 0 ; - - if (!fd_mid) { - fd_mid = uwsgi_jvm_get_method_id( ujvm.fd_class, "", "()V"); - } - - fd_obj = (*ujvm.env)->NewObject(ujvm.env, ujvm.fd_class, fd_mid); - - if (!fd_field) { - fd_field = (*ujvm.env)->GetFieldID(ujvm.env, ujvm.fd_class, "fd", "I"); - } - - (*ujvm.env)->SetIntField(ujvm.env, fd_obj, fd_field, fd); - - return fd_obj; -} - -char *uwsgi_jvm_str2c(jobject obj) { - - return (char *) (*ujvm.env)->GetStringUTFChars(ujvm.env, obj, NULL); -} - -int uwsgi_jvm_strlen2c(jobject obj) { - - return (*ujvm.env)->GetStringUTFLength(ujvm.env, obj); -} - -struct uwsgi_plugin jvm_plugin = { - - .name = "jvm", - .init = jvm_init, - .options = uwsgi_jvm_options, -}; - - diff --git a/plugins/jvm/uwsgiplugin.py b/plugins/jvm/uwsgiplugin.py deleted file mode 100644 index 8bb06c3c..00000000 --- a/plugins/jvm/uwsgiplugin.py +++ /dev/null @@ -1,47 +0,0 @@ -import os,sys - -NAME='jvm' - -# Snow Leopard -#JVM_INCPATH = "/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Headers/" -#JVM_LIBPATH = "/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Libraries/ -framework JavaVM" - -# FreeBSD openjdk7 example -# env UWSGICONFIG_JVM_INCPATH="/usr/local/openjdk7/include -I/usr/local/openjdk7/include/freebsd/" UWSGICONFIG_JVM_LIBPATH="/usr/local/openjdk7/jre/lib/amd64/server" python uwsgiconfig.py --plugin plugins/jvm - -# NexentaOS example -# UWSGICONFIG_JVM_INCPATH="/usr/java/include -I /usr/java/include/solaris" UWSGICONFIG_JVM_LIBPATH="/usr/java/jre/lib/i386/" python uwsgiconfig.py --plugin plugins/jvm - -# Ubuntu -JVM_INCPATH = "/usr/lib/jvm/java-6-openjdk/include/ -I/usr/lib/jvm/java-6-openjdk/include/linux" -JVM_LIBPATH = "/usr/lib/jvm/java-6-openjdk/jre/lib/amd64/server/" - -try: - JVM_INCPATH = os.environ['UWSGICONFIG_JVM_INCPATH'] -except: - pass - -try: - JVM_LIBPATH = os.environ['UWSGICONFIG_JVM_LIBPATH'] -except: - pass - -try: - JVM_INCPATH = os.environ['UWSGICONFIG_JVM_INCPATH'] -except: - pass - -try: - JVM_LIBPATH = os.environ['UWSGICONFIG_JVM_LIBPATH'] -except: - pass - -CFLAGS = ['-I' + JVM_INCPATH] -LDFLAGS = ['-L' + JVM_LIBPATH] -LIBS = ['-ljvm'] -GCC_LIST = ['jvm_plugin'] - -if os.environ.has_key('LD_RUN_PATH'): - os.environ['LD_RUN_PATH'] += ':' + JVM_LIBPATH -else: - os.environ['LD_RUN_PATH'] = JVM_LIBPATH diff --git a/plugins/jwsgi/jwsgi_plugin.c b/plugins/jwsgi/jwsgi_plugin.c deleted file mode 100644 index 57cb555f..00000000 --- a/plugins/jwsgi/jwsgi_plugin.c +++ /dev/null @@ -1,117 +0,0 @@ -#include "../jvm/jvm.h" - -extern struct uwsgi_server uwsgi; -extern struct uwsgi_jvm ujvm; - -void uwsgi_jwsgi_init(void) { - - -} - -int uwsgi_jwsgi_request(struct wsgi_request *wsgi_req) { - - jmethodID jmid; - int i; - jobject env; - jobject hkey, hval; - jobject response; - - jobject status; - jobject headers, header; - jobject body; - - jclass hc; - - jmethodID hh_size, hh_get; - int hlen; - - if (!wsgi_req->uh.pktsize) { - uwsgi_log("Invalid JWSGI request. skip.\n"); - return -1; - } - - - if (uwsgi_parse_vars(wsgi_req)) { - uwsgi_log("Invalid JWSGI request. skip.\n"); - return -1; - } - - - jmid = uwsgi_jvm_get_static_method_id(ujvm.main_class, "jwsgi", "(Ljava/util/Hashtable;)[Ljava/lang/Object;"); - - uwsgi_log("jwsgi method id = %d\n", jmid); - - env = uwsgi_jvm_ht_new(); - uwsgi_jvm_exception(); - - for(i=0;ivar_cnt;i++) { - - uwsgi_jvm_ht_put(env, - uwsgi_jvm_str_new(wsgi_req->hvec[i].iov_base, wsgi_req->hvec[i].iov_len), - uwsgi_jvm_str_new(wsgi_req->hvec[i+1].iov_base, wsgi_req->hvec[i+1].iov_len) - ); - - // check if something is going wrong during hashtable fill - uwsgi_jvm_exception(); - - i++; - } - - uwsgi_log("env created\n"); - - uwsgi_jvm_ht_put(env, uwsgi_jvm_str("jwsgi.input"), uwsgi_jvm_fd(wsgi_req->poll.fd)); - - uwsgi_log("jwsgi.input created\n"); - - response = (*ujvm.env)->CallObjectMethod(ujvm.env, ujvm.main_class, jmid, env); - uwsgi_jvm_exception(); - - uwsgi_log("RESPONSE SIZE %d\n", (*ujvm.env)->GetArrayLength(ujvm.env, response)); - - status = uwsgi_jvm_array_get(response, 0); - uwsgi_jvm_exception(); - - wsgi_req->headers_size += write(wsgi_req->poll.fd, wsgi_req->protocol, wsgi_req->protocol_len); - wsgi_req->headers_size += write(wsgi_req->poll.fd, " ", 1); - wsgi_req->headers_size += write(wsgi_req->poll.fd, uwsgi_jvm_str2c(status), uwsgi_jvm_strlen2c(status)); - wsgi_req->headers_size += write(wsgi_req->poll.fd, "\r\n", 2); - - - headers = uwsgi_jvm_array_get(response, 1); - hc = uwsgi_jvm_get_object_class(headers); - hh_size = uwsgi_jvm_get_method_id(hc, "size","()I"); - hh_get = uwsgi_jvm_get_method_id(hc, "get","(I)Ljava/lang/Object;"); - - hlen = (*ujvm.env)->CallIntMethod(ujvm.env, headers, hh_size); - - for(i=0;iCallObjectMethod(ujvm.env, headers, hh_get, i); - hkey = uwsgi_jvm_array_get(header, 0); - hval = uwsgi_jvm_array_get(header, 1); - - wsgi_req->headers_size += write(wsgi_req->poll.fd, uwsgi_jvm_str2c(hkey), uwsgi_jvm_strlen2c(hkey)); - wsgi_req->headers_size += write(wsgi_req->poll.fd, ": ", 2); - wsgi_req->headers_size += write(wsgi_req->poll.fd, uwsgi_jvm_str2c(hval), uwsgi_jvm_strlen2c(hval)); - wsgi_req->headers_size += write(wsgi_req->poll.fd, "\r\n", 2); - } - - wsgi_req->headers_size += write(wsgi_req->poll.fd, "\r\n", 2); - - body = uwsgi_jvm_array_get(response, 2); - - wsgi_req->response_size = write(wsgi_req->poll.fd, (*ujvm.env)->GetStringUTFChars(ujvm.env, body, NULL), (*ujvm.env)->GetStringUTFLength(ujvm.env, body)); - - return 1; -} - -void uwsgi_jwsgi_after_request(struct wsgi_request *wsgi_req) { - log_request(wsgi_req); -} - -struct uwsgi_plugin jwsgi_plugin = { - - .name = "jwsgi", - .modifier1 = 8, - .request = uwsgi_jwsgi_request, - .after_request = uwsgi_jwsgi_after_request, -}; diff --git a/plugins/jwsgi/uwsgiplugin.py b/plugins/jwsgi/uwsgiplugin.py deleted file mode 100644 index 0ca9b080..00000000 --- a/plugins/jwsgi/uwsgiplugin.py +++ /dev/null @@ -1,22 +0,0 @@ -import os,sys - -NAME='jwsgi' - -# Snow Leopard -#JVM_INCPATH = "/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Headers/" -#JVM_LIBPATH = "/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Libraries/ -framework JavaVM" - -# Ubuntu -JVM_INCPATH = "/usr/lib/jvm/java-6-sun-1.6.0.15/include/ -I/usr/lib/jvm/java-6-sun-1.6.0.15/include/linux" -JVM_LIBPATH = "/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/i386/server/" - - -CFLAGS = ['-I' + JVM_INCPATH] -LDFLAGS = ['-L' + JVM_LIBPATH] -LIBS = ['-ljvm'] -GCC_LIST = ['jwsgi_plugin'] - -if os.environ.has_key('LD_RUN_PATH'): - os.environ['LD_RUN_PATH'] += ':' + JVM_LIBPATH -else: - os.environ['LD_RUN_PATH'] = JVM_LIBPATH