source: mediastreamer2/p2pproxy/launcher/src/p2pproxy.c @ 81:eb9fad69e486

Last change on this file since 81:eb9fad69e486 was 81:eb9fad69e486, checked in by jehan <jehan@…>, 5 years ago

add native test ++

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

File size: 7.0 KB
Line 
1#include <stdio.h>
2#include <jni.h>
3#include <string.h>
4#include "p2pproxy.h"
5
6#ifndef P2PPROXY_JMX_PORT
7        #define P2PPROXY_JMX_PORT "5678"
8#endif
9#ifndef P2PPROXY_INSTALLDIR
10        #define P2PPROXY_INSTALLDIR "/usr/local/share/java"
11#endif
12#ifndef P2PPROXY_BUILDDIR
13        #define P2PPROXY_BUILDDIR "../antbuild/dist/p2pproxy_0.1"
14#endif
15#define NUMBER_OF_OPTION 7
16JavaVM* p2pproxy_application_jvm = 0;
17
18#define GET_JNI_ENV \
19        jint lResut = 0 ;\
20        JNIEnv* lJniEnv = 0;\
21        jclass  lMainClass = 0;\
22        lResut = (*p2pproxy_application_jvm)->AttachCurrentThread(p2pproxy_application_jvm,&lJniEnv,NULL);\
23        if (lResut != 0) { \
24                fprintf(stderr,"cannot attach VM\n");\
25                return P2PPROXY_ERROR;\
26        }\
27        lMainClass = (*lJniEnv)->FindClass(lJniEnv, "org/linphone/p2pproxy/core/P2pProxyMain");\
28        if (lMainClass == 0) { \
29                fprintf(stderr,"cannot load class org/linphone/p2pproxy/core/P2pProxyMain\n");\
30                return P2PPROXY_ERROR; \
31        } \
32
33
34int p2pproxy_application_start(int argc, char **argv) {
35        JNIEnv* lJniEnv = 0;
36        jclass  lMainClass = 0;
37       
38        JavaVMInitArgs args;
39        JavaVMOption options[NUMBER_OF_OPTION];
40        jint res=-1;
41        jmethodID mainMethod;
42        jobjectArray applicationArgsList;
43        jstring applicationArg;
44        int i=0;
45        int optioncount=0;
46
47        if (p2pproxy_application_jvm != 0) {
48                fprintf(stderr,"p2pproxy already started");
49                return P2PPROXY_ERROR_APPLICATION_ALREADY_STARTED;
50        }
51        args.version = JNI_VERSION_1_4;
52       
53        /*options[optioncount++].optionString = "-verbose:jni";*/
54        /*options[optioncount++].optionString = "-verbose:class";*/
55        /*options[optioncount++].optionString = "-verbose:class";*/
56        options[optioncount++].optionString = "-Djava.class.path="P2PPROXY_BUILDDIR"/p2pproxy.jar:"\
57                                                                P2PPROXY_INSTALLDIR"/p2pproxy.jar:"\
58                                                                P2PPROXY_BUILDDIR"/log4j.jar:"\
59                                                                P2PPROXY_INSTALLDIR"/log4j.jar";
60
61
62
63        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote";
64        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.port="P2PPROXY_JMX_PORT;
65        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.authenticate=false";
66        options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.ssl=false";
67        options[optioncount++].optionString = "-Dorg.linphone.p2pproxy.install.dir="P2PPROXY_INSTALLDIR;
68        options[optioncount++].optionString = "-Dorg.linphone.p2pproxy.build.dir="P2PPROXY_BUILDDIR;
69
70        args.nOptions = NUMBER_OF_OPTION;
71        args.options = options;
72        args.ignoreUnrecognized = JNI_FALSE;    int lResult;
73       
74
75        res = JNI_CreateJavaVM(&p2pproxy_application_jvm, (void **)&lJniEnv, &args);
76        if (res < 0) {
77                fprintf(stderr,"cannot start p2pproxy vm [%i]",res);
78                return P2PPROXY_ERROR;
79        }
80
81        lMainClass = (*lJniEnv)->FindClass(lJniEnv, "org/linphone/p2pproxy/core/P2pProxyMain");
82
83        if (lMainClass == 0) {
84                fprintf(stderr,"cannot load class org/linphone/p2pproxy/core/P2pProxyMain\n");
85                return P2PPROXY_ERROR;
86        }
87        mainMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "main", "([Ljava/lang/String;)V");
88
89        applicationArgsList = (*lJniEnv)->NewObjectArray(lJniEnv, argc, (*lJniEnv)->FindClass(lJniEnv, "java/lang/String"), NULL);
90       
91        for (i=0;i<argc;i++) {
92                applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, argv[i]);
93                (*lJniEnv)->SetObjectArrayElement(lJniEnv, applicationArgsList, i, applicationArg);
94
95        }
96
97        (*lJniEnv)->CallStaticVoidMethod(lJniEnv, lMainClass, mainMethod, applicationArgsList);
98
99        return P2PPROXY_NO_ERROR;
100}
101        int lResult;
102
103
104const char* p2pproxy_status_string(int status_code) {
105        return 0;
106}
107
108
109int p2pproxy_accountmgt_createAccount(const char* user_name) {
110        jmethodID createAccountMethod;
111        jstring applicationArg;
112        GET_JNI_ENV
113        createAccountMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "createAccount", "(Ljava/lang/String;)I");
114        applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, user_name);
115        lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, createAccountMethod, applicationArg);
116        (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
117        return lResult;
118}
119
120int p2pproxy_accountmgt_isValidAccount(const char* user_name) {
121        jmethodID isValidAccountMethod;
122        jstring applicationArg; 
123        GET_JNI_ENV
124        isValidAccountMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "isValidAccount", "(Ljava/lang/String;)I");
125        applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, user_name);
126        lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, isValidAccountMethod, applicationArg);
127        (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
128        return lResult;
129}
130
131int p2pproxy_accountmgt_deleteAccount(const char* user_name) {
132        jmethodID deleteAccountMethod;
133        jstring applicationArg; 
134        GET_JNI_ENV
135        deleteAccountMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "deleteAccount", "(Ljava/lang/String;)I");
136        applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, user_name);
137        lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, deleteAccountMethod, applicationArg);
138        (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
139        return lResult;
140}
141
142int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, char* domaine) {
143        jmethodID lLookupSipProxyUriMethod;
144        jstring lJStringResult; 
145        const jbyte* lString;
146        jboolean  lIsCopy;
147        jstring applicationArg;
148       
149        GET_JNI_ENV
150         
151       
152        applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, domaine);
153        lLookupSipProxyUriMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "lookupSipProxyUri", "(Ljava/lang/String;)Ljava/lang/String;");
154        lJStringResult = (*lJniEnv)->CallStaticObjectMethod(lJniEnv, lMainClass, lLookupSipProxyUriMethod, applicationArg);
155        if (lJStringResult == 0) {
156                return P2PPROXY_RESOURCEMGT_SERVER_NOT_FOUND;
157        }
158        lString =  (*lJniEnv)->GetStringUTFChars(lJniEnv, lJStringResult, &lIsCopy);
159        memcpy(proxy_uri,lString,size);
160        (*lJniEnv)->ReleaseStringUTFChars(lJniEnv, lJStringResult, lString);
161        (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
162        return P2PPROXY_NO_ERROR;
163}
164
165int p2pproxy_resourcemgt_revoke_sip_proxy(char* proxy_uri) {
166        jmethodID revokeProxyMethod;
167        jstring lJStringResult; 
168        const jbyte* lString;
169        jboolean  lIsCopy;
170        GET_JNI_ENV
171       
172        revokeProxyMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "revokeSipProxy", "(Ljava/lang/String;)V");
173        (*lJniEnv)->CallStaticVoidMethod(lJniEnv, lMainClass, revokeProxyMethod);
174        if (lJStringResult == 0) {
175                return P2PPROXY_ERROR;
176        }
177        return P2PPROXY_NO_ERROR;
178}
179int p2pproxy_application_get_state() {
180        jmethodID stateMethod;
181        GET_JNI_ENV
182       
183        stateMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "getState", "()I");
184        lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, stateMethod);
185        (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
186        return lResult;
187       
188}
189void p2pproxy_application_stop() {
190        jmethodID stopMethod = 0;
191        GET_JNI_ENV
192       
193        stopMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "stop", "()V");
194        (*lJniEnv)->CallStaticVoidMethod(lJniEnv, lMainClass, stopMethod);
195        (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
196        (*p2pproxy_application_jvm)->DestroyJavaVM(p2pproxy_application_jvm);
197        p2pproxy_application_jvm = 0;
198        return;
199
200}
201
202
Note: See TracBrowser for help on using the repository browser.