7 #ifndef P2PPROXY_JMX_PORT
8 #define P2PPROXY_JMX_PORT "5678"
10 #ifndef P2PPROXY_INSTALLDIR
11 #define P2PPROXY_INSTALLDIR "/usr/share/java/fonis"
13 #ifndef P2PPROXY_BUILDDIR
14 #define P2PPROXY_BUILDDIR "../antbuild/dist/p2pproxy_0.1"
16 #define NUMBER_OF_OPTION 7
17 JavaVM *p2pproxy_application_jvm = 0;
22 jclass lMainClass = 0;\
23 if (p2pproxy_application_jvm==0) return P2PPROXY_ERROR_APPLICATION_NOT_STARTED; \
24 lResult = (*p2pproxy_application_jvm)->AttachCurrentThread(p2pproxy_application_jvm,(void**)&lJniEnv,NULL);\
26 fprintf(stderr,"cannot attach VM\n");\
27 return P2PPROXY_ERROR;\
29 lMainClass = (*lJniEnv)->FindClass(lJniEnv, "org/linphone/p2pproxy/core/P2pProxyMain");\
30 if (lMainClass == 0) { \
31 fprintf(stderr,"cannot load class org/linphone/p2pproxy/core/P2pProxyMain\n");\
32 return P2PPROXY_ERROR; \
36 int p2pproxy_application_start(int argc, char **argv) {
38 jclass lMainClass = 0;
40 JavaVMOption options[NUMBER_OF_OPTION];
43 jobjectArray applicationArgsList;
44 jstring applicationArg;
48 if (p2pproxy_application_jvm != 0) {
49 fprintf(stderr,"p2pproxy already started");
50 return P2PPROXY_ERROR_APPLICATION_ALREADY_STARTED;
52 args.version = JNI_VERSION_1_4;
54 /*options[optioncount++].optionString = "-verbose:jni";*/
55 /*options[optioncount++].optionString = "-verbose:class";*/
56 /*options[optioncount++].optionString = "-verbose:class";*/
57 options[optioncount++].optionString = "-Djava.class.path="P2PPROXY_BUILDDIR"/p2pproxy.jar:"\
58 P2PPROXY_INSTALLDIR"/p2pproxy.jar:"\
59 P2PPROXY_BUILDDIR"/log4j.jar:"\
60 P2PPROXY_INSTALLDIR"/log4j.jar";
64 options[optioncount++].optionString = "-Dcom.sun.management.jmxremote";
65 options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.port="P2PPROXY_JMX_PORT;
66 options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.authenticate=false";
67 options[optioncount++].optionString = "-Dcom.sun.management.jmxremote.ssl=false";
68 options[optioncount++].optionString = "-Dorg.linphone.p2pproxy.install.dir="P2PPROXY_INSTALLDIR;
69 options[optioncount++].optionString = "-Dorg.linphone.p2pproxy.build.dir="P2PPROXY_BUILDDIR;
71 args.nOptions = NUMBER_OF_OPTION;
72 args.options = options;
73 args.ignoreUnrecognized = JNI_FALSE;
76 res = JNI_CreateJavaVM(&p2pproxy_application_jvm, (void**)& lJniEnv, &args);
78 fprintf(stderr,"cannot start p2pproxy vm [%i]",res);
79 return P2PPROXY_ERROR;
81 lMainClass = (*lJniEnv)->FindClass(lJniEnv, "org/linphone/p2pproxy/core/P2pProxyMain");
83 if (lMainClass == 0) {
84 fprintf(stderr,"cannot load class org/linphone/p2pproxy/core/P2pProxyMain\n");
85 return P2PPROXY_ERROR;
87 mainMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "main", "([Ljava/lang/String;)V");
89 applicationArgsList = (*lJniEnv)->NewObjectArray(lJniEnv, argc, (*lJniEnv)->FindClass(lJniEnv, "java/lang/String"), NULL);
91 for (i=0;i<argc;i++) {
92 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, argv[i]);
93 (*lJniEnv)->SetObjectArrayElement(lJniEnv, applicationArgsList, i, applicationArg);
97 (*lJniEnv)->CallStaticVoidMethod(lJniEnv, lMainClass, mainMethod, applicationArgsList);
98 (*p2pproxy_application_jvm)->DestroyJavaVM(p2pproxy_application_jvm);
99 p2pproxy_application_jvm = 0;
100 return P2PPROXY_NO_ERROR;
105 const char* p2pproxy_status_string(int status_code) {
110 int p2pproxy_accountmgt_createAccount(const char* user_name) {
111 jmethodID createAccountMethod;
112 jstring applicationArg;
114 createAccountMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "createAccount", "(Ljava/lang/String;)I");
115 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, user_name);
116 lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, createAccountMethod, applicationArg);
117 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
121 int p2pproxy_accountmgt_isValidAccount(const char* user_name) {
122 jmethodID isValidAccountMethod;
123 jstring applicationArg;
125 isValidAccountMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "isValidAccount", "(Ljava/lang/String;)I");
126 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, user_name);
127 lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, isValidAccountMethod, applicationArg);
128 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
132 int p2pproxy_accountmgt_deleteAccount(const char* user_name) {
133 jmethodID deleteAccountMethod;
134 jstring applicationArg;
136 deleteAccountMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "deleteAccount", "(Ljava/lang/String;)I");
137 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, user_name);
138 lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, deleteAccountMethod, applicationArg);
139 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
143 int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, const char* domain) {
144 jmethodID lLookupSipProxyUriMethod;
145 jstring lJStringResult;
148 jstring applicationArg;
153 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, domain);
154 lLookupSipProxyUriMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "lookupSipProxyUri", "(Ljava/lang/String;)Ljava/lang/String;");
155 lJStringResult = (*lJniEnv)->CallStaticObjectMethod(lJniEnv, lMainClass, lLookupSipProxyUriMethod, applicationArg);
156 if (lJStringResult == 0) {
157 return P2PPROXY_RESOURCEMGT_SERVER_NOT_FOUND;
159 lString = (*lJniEnv)->GetStringUTFChars(lJniEnv, lJStringResult, &lIsCopy);
160 memcpy(proxy_uri,lString,size);
161 (*lJniEnv)->ReleaseStringUTFChars(lJniEnv, lJStringResult, lString);
162 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
163 return P2PPROXY_NO_ERROR;
166 int p2pproxy_resourcemgt_revoke_sip_proxy(const char* proxy_uri) {
167 jmethodID revokeProxyMethod;
168 jstring applicationArg;
171 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, proxy_uri);
172 revokeProxyMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "revokeSipProxy", "(Ljava/lang/String;)I");
173 lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, revokeProxyMethod,applicationArg);
174 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
178 int p2pproxy_application_get_state() {
179 jmethodID stateMethod;
181 stateMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "getState", "()I");
182 if (stateMethod==NULL) {
183 lResult=P2PPROXY_ERROR_APPLICATION_NOT_STARTED;
186 lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, stateMethod);
189 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
194 int p2pproxy_application_stop() {
195 jmethodID stopMethod = 0;
198 stopMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "stop", "()V");
199 (*lJniEnv)->CallStaticVoidMethod(lJniEnv, lMainClass, stopMethod);
200 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
205 p2pproxy_resourcemgt_resource_list_t* p2pproxy_resourcemgt_new_resource_list() {
206 p2pproxy_resourcemgt_resource_list_t* resource_list = malloc(sizeof (p2pproxy_resourcemgt_resource_list_t));
207 resource_list->size = 0;
208 return resource_list;
211 void p2pproxy_resourcemgt_delete_resource_list(p2pproxy_resourcemgt_resource_list_t* resource_list) {
213 if (resource_list == 0 ) {
216 for (i=0;i<resource_list->size;i++) {
217 free(resource_list->resource_uri[i]);
219 resource_list->size = 0;
223 int p2pproxy_resourcemgt_lookup_media_resource(p2pproxy_resourcemgt_resource_list_t* resource_list, const char* domain) {
224 jmethodID lLookupMediaResourceMethod;
225 jarray lJStringResults;
226 jstring lResourceInstance;
229 jstring applicationArg;
237 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, domain);
238 lLookupMediaResourceMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "lookupMediaServerAddress", "(Ljava/lang/String;)[Ljava/lang/String;");
239 lJStringResults = (*lJniEnv)->CallStaticObjectMethod(lJniEnv, lMainClass, lLookupMediaResourceMethod, applicationArg);
240 if (lJStringResults == 0) {
241 return P2PPROXY_RESOURCEMGT_SERVER_NOT_FOUND;
244 lArraySize = (*lJniEnv)->GetArrayLength(lJniEnv, lJStringResults);
245 for (i=0;i<lArraySize & i<P2PPROXY_MAX_RESOURCE_LIST_SIZE; i++) {
246 lResourceInstance = (*lJniEnv)->GetObjectArrayElement(lJniEnv,lJStringResults, i);
247 lString = (*lJniEnv)->GetStringUTFChars(lJniEnv, lResourceInstance, &lIsCopy);
248 lStringSize = (*lJniEnv)->GetStringLength(lJniEnv, lResourceInstance);
249 resource_list->resource_uri[i] = malloc(lStringSize);
250 strcpy(resource_list->resource_uri[i],lString);
251 resource_list->size=i;
252 (*lJniEnv)->ReleaseStringUTFChars(lJniEnv, lResourceInstance, lString);
255 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);
256 return P2PPROXY_NO_ERROR;
258 int p2pproxy_resourcemgt_revoke_media_resource(const char* resource_uri) {
259 jmethodID revokeMediaResourceMethod;
260 jstring applicationArg;
263 applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, resource_uri);
264 revokeMediaResourceMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "revokeMediaServer", "(Ljava/lang/String;)I");
265 lResult = (*lJniEnv)->CallStaticIntMethod(lJniEnv, lMainClass, revokeMediaResourceMethod,applicationArg);
266 (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm);