From f43e79b983cc534e3b6af794ca03aa105335c25c Mon Sep 17 00:00:00 2001 From: jehan <jehan@3f6dc0c8-ddfe-455d-9043-3cd528dc4637> Date: Mon, 29 Sep 2008 14:42:09 +0000 Subject: [PATCH] implement account management c interface git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@57 3f6dc0c8-ddfe-455d-9043-3cd528dc4637 --- p2pproxy/.classpath | 1 + p2pproxy/.project | 7 ++++ p2pproxy/build.xml | 12 +++++- p2pproxy/launcher/Debug/src/p2pproxy_wrap.d | 7 ++++ p2pproxy/launcher/Debug/src/subdir.mk | 9 +++-- p2pproxy/launcher/src/p2pproxy.c | 40 +++++++++++-------- p2pproxy/launcher/src/p2pproxy.h | 13 +++++- .../linphone/p2pproxy/core/P2pProxyMain.java | 36 ++++++++++++++++- 8 files changed, 101 insertions(+), 24 deletions(-) create mode 100644 p2pproxy/launcher/Debug/src/p2pproxy_wrap.d diff --git a/p2pproxy/.classpath b/p2pproxy/.classpath index 49212745eb..d4307deff3 100644 --- a/p2pproxy/.classpath +++ b/p2pproxy/.classpath @@ -11,6 +11,7 @@ <classpathentry kind="src" path="dependencies-src/jxse-src-2.5/impl/src"/> <classpathentry kind="src" path="dependencies-src/jxse-src-2.5/api/src"/> <classpathentry kind="src" path="test-src"/> + <classpathentry kind="src" path="jni_src"/> <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/> <classpathentry kind="lib" path="dependencies/junit-4.3.1.jar"/> <classpathentry kind="output" path="eclipsebuild"/> diff --git a/p2pproxy/.project b/p2pproxy/.project index 67cec9a6f9..fbea507762 100644 --- a/p2pproxy/.project +++ b/p2pproxy/.project @@ -14,4 +14,11 @@ <natures> <nature>org.eclipse.jdt.core.javanature</nature> </natures> + <linkedResources> + <link> + <name>jni_src</name> + <type>2</type> + <locationURI>jni_src</locationURI> + </link> + </linkedResources> </projectDescription> diff --git a/p2pproxy/build.xml b/p2pproxy/build.xml index 530f12192e..3baab9453b 100644 --- a/p2pproxy/build.xml +++ b/p2pproxy/build.xml @@ -17,6 +17,7 @@ <property name="jxta-src" location="dependencies-src/jxse-src-2.5"/> <property name="jstun-src" location="dependencies-src/jstun-src-0.7.1"/> <property name="dist.dir" location="antbuild/dist/p2pproxy_${version}"/> + <property name="jni-src" location="antbuild/p2pproxy/jni_src/org/linphone/p2pproxy/launcher"/> <path id="p2pproxy.classpath"> <pathelement location="antbuild/p2pproxy"/> @@ -44,7 +45,16 @@ <target name="build" depends="build-subprojects,build-project"/> <target name="build-subprojects"/> - <target name="build-project" depends="init"> + <target name="jni-src" depends="init" > + <property name="p2pproxy-h" location="launcher/src/p2pproxy.h"/> + <mkdir dir="${jni-src}"/> + <exec failonerror="yes" executable="swig"> + <arg line=" -java -outdir ${jni-src} -package org.linphone.p2pproxy.launcher"/> + <arg line=" ${p2pproxy-h} "/> + </exec> + </target> + + <target name="build-project" depends="init"> <echo message="${ant.project.name}: ${ant.file}"/> <javac destdir="antbuild/p2pproxy" debug="true" debuglevel="${debuglevel}" source="${source}" target="${target}"> diff --git a/p2pproxy/launcher/Debug/src/p2pproxy_wrap.d b/p2pproxy/launcher/Debug/src/p2pproxy_wrap.d new file mode 100644 index 0000000000..d375224184 --- /dev/null +++ b/p2pproxy/launcher/Debug/src/p2pproxy_wrap.d @@ -0,0 +1,7 @@ +src/p2pproxy_wrap.d src/p2pproxy_wrap.o: ../src/p2pproxy_wrap.c \ + /usr/lib/jvm/java-6-openjdk/include/jni.h \ + /usr/lib/jvm/java-6-openjdk/include/jni_md.h + +/usr/lib/jvm/java-6-openjdk/include/jni.h: + +/usr/lib/jvm/java-6-openjdk/include/jni_md.h: diff --git a/p2pproxy/launcher/Debug/src/subdir.mk b/p2pproxy/launcher/Debug/src/subdir.mk index 839cd1d907..6246aeb1df 100644 --- a/p2pproxy/launcher/Debug/src/subdir.mk +++ b/p2pproxy/launcher/Debug/src/subdir.mk @@ -5,15 +5,18 @@ # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ ../src/launcher-tester.c \ -../src/p2pproxy.c +../src/p2pproxy.c \ +../src/p2pproxy_wrap.c OBJS += \ ./src/launcher-tester.o \ -./src/p2pproxy.o +./src/p2pproxy.o \ +./src/p2pproxy_wrap.o C_DEPS += \ ./src/launcher-tester.d \ -./src/p2pproxy.d +./src/p2pproxy.d \ +./src/p2pproxy_wrap.d # Each subdirectory must supply rules for building sources it contributes diff --git a/p2pproxy/launcher/src/p2pproxy.c b/p2pproxy/launcher/src/p2pproxy.c index eacba8d217..eca0061370 100644 --- a/p2pproxy/launcher/src/p2pproxy.c +++ b/p2pproxy/launcher/src/p2pproxy.c @@ -13,13 +13,14 @@ #endif JNIEnv* p2pproxy_application_jnienv = 0; JavaVM* p2pproxy_application_jvm = 0; +jclass p2pproxy_proxy_main_class = 0; int p2pproxy_application_start(int argc, char **argv) { JavaVMInitArgs args; JavaVMOption options[7]; jint res=-1; - jclass lP2pProxyMainClass; + jclass lP2pProxyMainClass=0; jmethodID mainMethod; jobjectArray applicationArgsList; jstring applicationArg; @@ -56,13 +57,13 @@ int p2pproxy_application_start(int argc, char **argv) { return P2PPROXY_ERROR; } - lP2pProxyMainClass = (*p2pproxy_application_jnienv)->FindClass(p2pproxy_application_jnienv, "org/linphone/p2pproxy/core/P2pProxyMain"); + p2pproxy_proxy_main_class = (*p2pproxy_application_jnienv)->FindClass(p2pproxy_application_jnienv, "org/linphone/p2pproxy/core/P2pProxyMain"); if (lP2pProxyMainClass == 0) { fprintf(stderr,"cannot find class org/linphone/p2pproxy/core/P2pProxyMain"); return P2PPROXY_ERROR; } - mainMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, lP2pProxyMainClass, "main", "([Ljava/lang/String;)V"); + mainMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "main", "([Ljava/lang/String;)V"); applicationArgsList = (*p2pproxy_application_jnienv)->NewObjectArray(p2pproxy_application_jnienv, argc, (*p2pproxy_application_jnienv)->FindClass(p2pproxy_application_jnienv, "java/lang/String"), NULL); @@ -72,7 +73,7 @@ int p2pproxy_application_start(int argc, char **argv) { } - (*p2pproxy_application_jnienv)->CallStaticVoidMethod(p2pproxy_application_jnienv, lP2pProxyMainClass, mainMethod, applicationArgsList); + (*p2pproxy_application_jnienv)->CallStaticVoidMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, mainMethod, applicationArgsList); return P2PPROXY_NO_ERROR; } @@ -84,27 +85,34 @@ const char* p2pproxy_status_string(int status_code) { int p2pproxy_accountmgt_createAccount(const char* user_name) { - return P2PPROXY_ERROR; + jmethodID createAccountMethod; + jstring applicationArg; + + createAccountMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "createAccount", "([java/lang/String;)I"); + applicationArg = (*p2pproxy_application_jnienv)->NewStringUTF(p2pproxy_application_jnienv, user_name); + return (*p2pproxy_application_jnienv)->CallStaticIntMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, createAccountMethod, applicationArg); } int p2pproxy_accountmgt_isValidAccount(const char* user_name) { - return P2PPROXY_ERROR; + jmethodID isValidAccountMethod; + jstring applicationArg; + + isValidAccountMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "isValidAccount", "([java/lang/String;)I"); + applicationArg = (*p2pproxy_application_jnienv)->NewStringUTF(p2pproxy_application_jnienv, user_name); + return (*p2pproxy_application_jnienv)->CallStaticIntMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, isValidAccountMethod, applicationArg); } int p2pproxy_accountmgt_deleteAccount(const char* user_name) { - return P2PPROXY_ERROR; -} - -jobject p2pproxy_get_accountmgt() { - jclass lP2pProxyMainClass; - jmethodID getAccountMgtMethod; - - lP2pProxyMainClass = (*p2pproxy_application_jnienv)->FindClass(p2pproxy_application_jnienv, "org/linphone/p2pproxy/core/P2pProxyMain"); - getAccountMgtMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, lP2pProxyMainClass, "getAccountManager", "(V)Lorg/linphone/p2pproxy/core/P2pProxyAccountManagementMBean"); - + jmethodID deleteAccountMethod; + jstring applicationArg; + deleteAccountMethod = (*p2pproxy_application_jnienv)->GetStaticMethodID(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, "deleteAccount", "([java/lang/String;)I"); + applicationArg = (*p2pproxy_application_jnienv)->NewStringUTF(p2pproxy_application_jnienv, user_name); + return (*p2pproxy_application_jnienv)->CallStaticIntMethod(p2pproxy_application_jnienv, p2pproxy_proxy_main_class, deleteAccountMethod, applicationArg); } + + diff --git a/p2pproxy/launcher/src/p2pproxy.h b/p2pproxy/launcher/src/p2pproxy.h index 2aeb8ea9a9..509d7c80fb 100644 --- a/p2pproxy/launcher/src/p2pproxy.h +++ b/p2pproxy/launcher/src/p2pproxy.h @@ -20,6 +20,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef P2PPROXY_LAUNCHER_H_ #define P2PPROXY_LAUNCHER_H_ +#ifdef SWIG +%module P2pProxylauncher +%javaconst(1); +%include "p2pproxy.h" +#endif /*SWIG*/ + #define P2PPROXY_ACCOUNTMGT_USER_EXIST 1 #define P2PPROXY_ACCOUNTMGT_USER_NOT_EXIST 0 @@ -33,6 +39,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define P2PPROXY_ERROR_ACCOUNTMGT_USER_ALREADY_EXIST -4 #define P2PPROXY_ERROR_ACCOUNTMGT_BAD_SIP_URI -5 +#ifndef SWIG /** * start p2pproxy application * blocking call @@ -46,7 +53,7 @@ int p2pproxy_application_start(int argc, char **argv); /** * return the status string corresponding to the status code */ -const char* p2pproxy_status_string(int status_code); +/*const char* p2pproxy_status_string(int status_code);*/ /************************/ /***account management***/ @@ -72,5 +79,7 @@ int p2pproxy_accountmgt_isValidAccount(const char* user_name); * @return P2PPROXY_NO_ERROR, P2PPROXY_ERROR_APPLICATIONNOTSTARTED */ int p2pproxy_accountmgt_deleteAccount(const char* user_name); - + +#endif /*SWIG*/ + #endif /*P2PPROXY_LAUNCHER_H_*/ diff --git a/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java b/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java index 6f404893d0..ecb143992f 100644 --- a/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java +++ b/p2pproxy/src/org/linphone/p2pproxy/core/P2pProxyMain.java @@ -38,9 +38,11 @@ import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.linphone.p2pproxy.api.P2pProxyException; import org.linphone.p2pproxy.api.P2pProxyManagement; +import org.linphone.p2pproxy.api.P2pProxyUserAlreadyExistException; import org.linphone.p2pproxy.core.media.rtprelay.RtpRelayService; import org.linphone.p2pproxy.core.sipproxy.SipProxyRegistrar; import org.zoolu.sip.provider.SipStack; +import org.linphone.p2pproxy.launcher.P2pProxylauncherConstants; public class P2pProxyMain implements P2pProxyMainMBean { private final static Logger mLog = Logger.getLogger(P2pProxyMain.class); @@ -366,7 +368,37 @@ public static void staticLoadTraceConfigFile() throws P2pProxyException { throw new P2pProxyException("enable to load traces",e); } } -public static P2pProxyAccountManagementMBean getAccountManager() { - return mP2pProxyAccountManagement; + +/* p2pproxy.h implementation*/ + +public static int createAccount(String aUserName) { + try { + mP2pProxyAccountManagement.createAccount(aUserName); + } catch (P2pProxyUserAlreadyExistException e) { + return P2pProxylauncherConstants.P2PPROXY_ACCOUNTMGT_USER_EXIST; + } catch (P2pProxyException e) { + return P2pProxylauncherConstants.P2PPROXY_ERROR; + } + return P2pProxylauncherConstants.P2PPROXY_NO_ERROR; +} +public static int deleteAccount(String aUserName) { + try { + mP2pProxyAccountManagement.deleteAccount(aUserName); + } catch (P2pProxyException e) { + return P2pProxylauncherConstants.P2PPROXY_ERROR; + } + return P2pProxylauncherConstants.P2PPROXY_NO_ERROR; + +} +public static int isValidAccount(String aUserName){ + try { + if (mP2pProxyAccountManagement.isValidAccount(aUserName)) { + return P2pProxylauncherConstants.P2PPROXY_ACCOUNTMGT_USER_EXIST; + } else { + return P2pProxylauncherConstants.P2PPROXY_ACCOUNTMGT_USER_NOT_EXIST; + } + } catch (P2pProxyException e) { + return P2pProxylauncherConstants.P2PPROXY_ERROR; + } } } \ No newline at end of file -- GitLab