source: mediastreamer2/p2pproxy/launcher/src/p2pproxy.c @ 76:8cc401d0f0c6

Last change on this file since 76:8cc401d0f0c6 was 75:73fe56a52a5b, checked in by jehan <jehan@…>, 5 years ago

add native test ++

git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@78 3f6dc0c8-ddfe-455d-9043-3cd528dc4637

File size: 6.4 KB
Line 
1#include <stdio.h>
2#include <jni.h>
3#include "p2pproxy.h"
4
5#ifndef P2PPROXY_JMX_PORT
6        #define P2PPROXY_JMX_PORT "5678"
7#endif
8#ifndef P2PPROXY_INSTALLDIR
9        #define P2PPROXY_INSTALLDIR "/usr/local/share/java"
10#endif
11#ifndef P2PPROXY_BUILDDIR
12        #define P2PPROXY_BUILDDIR "../antbuild/dist/p2pproxy_0.1"
13#endif
14#define NUMBER_OF_OPTION 7
15JNIEnv* p2pproxy_application_jnienv = 0;
16JavaVM* p2pproxy_application_jvm = 0;
17jclass  p2pproxy_proxy_main_class = 0;
18
19int p2pproxy_application_start(int argc, char **argv) {
20
21        JavaVMInitArgs args;
22        JavaVMOption options[NUMBER_OF_OPTION];
23        jint res=-1;
24        jmethodID mainMethod;
25        jobjectArray applicationArgsList;
26        jstring applicationArg;
27        int i=0;
28        int optioncount=0;
29
30        if (p2pproxy_application_jnienv != 0) {
31                fprintf(stderr,"p2pproxy already started");
32                return P2PPROXY_ERROR_APPLICATION_ALREADY_STARTED;
33        }
34        args.version = JNI_VERSION_1_4;
35       
36        /*options[optioncount++].optionString = "-verbose:jni";*/
37        /*options[optioncount++].optionString = "-verbose:class";*/
38        /*options[optioncount++].optionString = "-verbose:class";*/
39        options[optioncount++].optionString = "-Djava.class.path="P2PPROXY_BUILDDIR"/p2pproxy.jar:"\
40                                                                P2PPROXY_INSTALLDIR"/p2pproxy.jar:"\
41                                                                P2PPROXY_BUILDDIR"/log4j.jar:"\
42                                                                P2PPROXY_INSTALLDIR"/log4j.jar";
43
44
45
46        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote";
47        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.port="P2PPROXY_JMX_PORT;
48        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.authenticate=false";
49        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.ssl=false";
50        options[optioncount++].optionString = "-Dorg.linphone.p2pproxy.install.dir="P2PPROXY_INSTALLDIR;
51        options[optioncount++].optionString = "-Dorg.linphone.p2pproxy.build.dir="P2PPROXY_BUILDDIR;
52
53        args.nOptions = NUMBER_OF_OPTION;
54        args.options = options;
55        args.ignoreUnrecognized = JNI_FALSE;
56
57        res = JNI_CreateJavaVM(&p2pproxy_application_jvm, (void **)&p2pproxy_application_jnienv, &args);
58        if (res < 0) {
59                fprintf(stderr,"cannot start p2pproxy vm [%i]",res);
60                return P2PPROXY_ERROR;
61        }
62
63        p2pproxy_proxy_main_class = (*p2pproxy_application_jnienv)->FindClass(p2pproxy_application_jnienv, "org/linphone/p2pproxy/core/P2pProxyMain");
64
65        if (p2pproxy_proxy_main_class == 0) {
66                fprintf(stderr,"cannot load class org/linphone/p2pproxy/core/P2pProxyMain\n");
67                return P2PPROXY_ERROR;
68        }
69        mainMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "main", "([Ljava/lang/String;)V");
70
71        applicationArgsList = (*p2pproxy_application_jnienv)->NewObjectArray(p2pproxy_application_jnienv, argc, (*p2pproxy_application_jnienv)->FindClass(p2pproxy_application_jnienv, "java/lang/String"), NULL);
72       
73        for (i=0;i<argc;i++) {
74                applicationArg = (*p2pproxy_application_jnienv)->NewStringUTF(p2pproxy_application_jnienv, argv[i]);
75                (*p2pproxy_application_jnienv)->SetObjectArrayElement(p2pproxy_application_jnienv, applicationArgsList, 0, applicationArg);
76
77        }
78
79        (*p2pproxy_application_jnienv)->CallStaticVoidMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, mainMethod, applicationArgsList);
80
81        return P2PPROXY_NO_ERROR;
82}
83
84
85const char* p2pproxy_status_string(int status_code) {
86        return 0;
87}
88
89
90int p2pproxy_accountmgt_createAccount(const char* user_name) {
91        jmethodID createAccountMethod;
92        jstring applicationArg; 
93       
94        createAccountMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "createAccount", "([java/lang/String;)I");
95        applicationArg = (*p2pproxy_application_jnienv)->NewStringUTF(p2pproxy_application_jnienv, user_name);
96        return (*p2pproxy_application_jnienv)->CallStaticIntMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, createAccountMethod, applicationArg);
97}
98
99int p2pproxy_accountmgt_isValidAccount(const char* user_name) {
100        jmethodID isValidAccountMethod;
101        jstring applicationArg; 
102       
103        isValidAccountMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "isValidAccount", "([java/lang/String;)I");
104        applicationArg = (*p2pproxy_application_jnienv)->NewStringUTF(p2pproxy_application_jnienv, user_name);
105        return (*p2pproxy_application_jnienv)->CallStaticIntMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, isValidAccountMethod, applicationArg);
106}
107
108int p2pproxy_accountmgt_deleteAccount(const char* user_name) {
109        jmethodID deleteAccountMethod;
110        jstring applicationArg; 
111       
112        deleteAccountMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "deleteAccount", "([java/lang/String;)I");
113        applicationArg = (*p2pproxy_application_jnienv)->NewStringUTF(p2pproxy_application_jnienv, user_name);
114        return (*p2pproxy_application_jnienv)->CallStaticIntMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, deleteAccountMethod, applicationArg);
115}
116
117int p2pproxy_resourcelocation_get_sip_proxyregistrar_uri(char* aStringArray, size_t aSize) {
118        jmethodID getSipProxyRegistrarUriMethod;
119        jstring lJStringResult; 
120        const jbyte* lString;
121        jboolean  lIsCopy;
122       
123        getSipProxyRegistrarUriMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "getSipProxyRegistrarUriMethod", "()[java/lang/String;");
124        lJStringResult = (*p2pproxy_application_jnienv)->CallStaticObjectMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, getSipProxyRegistrarUriMethod);
125        if (lJStringResult == 0) {
126                return P2PPROXY_ERROR_RESOURCELOCATOR_SERVER_NOT_FOUND;
127        }
128        lString =  (*p2pproxy_application_jnienv)->GetStringUTFChars(p2pproxy_application_jnienv, lJStringResult, &lIsCopy);
129        memcpy(aStringArray,lString,aSize);
130        (*p2pproxy_application_jnienv)->ReleaseStringUTFChars(p2pproxy_application_jnienv, lJStringResult, lString);
131        return P2PPROXY_NO_ERROR;
132}
133
134int p2pproxy_application_get_state() {
135        jmethodID stateMethod;
136       
137        stateMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "getState", "()I");
138        return (*p2pproxy_application_jnienv)->CallStaticIntMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, stateMethod);
139       
140}
141void p2pproxy_application_stop() {
142        jmethodID stopMethod;
143       
144        stopMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "stop", "()V");
145        (*p2pproxy_application_jnienv)->CallStaticVoidMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, stopMethod);
146        return;
147
148}
149
150
Note: See TracBrowser for help on using the repository browser.