From f43e79b983cc534e3b6af794ca03aa105335c25c Mon Sep 17 00:00:00 2001 From: jehan 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 49212745e..d4307deff 100644 --- a/p2pproxy/.classpath +++ b/p2pproxy/.classpath @@ -11,6 +11,7 @@ + diff --git a/p2pproxy/.project b/p2pproxy/.project index 67cec9a6f..fbea50776 100644 --- a/p2pproxy/.project +++ b/p2pproxy/.project @@ -14,4 +14,11 @@ org.eclipse.jdt.core.javanature + + + jni_src + 2 + jni_src + + diff --git a/p2pproxy/build.xml b/p2pproxy/build.xml index 530f12192..3baab9453 100644 --- a/p2pproxy/build.xml +++ b/p2pproxy/build.xml @@ -17,6 +17,7 @@ + @@ -44,7 +45,16 @@ - + + + + + + + + + + diff --git a/p2pproxy/launcher/Debug/src/p2pproxy_wrap.d b/p2pproxy/launcher/Debug/src/p2pproxy_wrap.d new file mode 100644 index 000000000..d37522418 --- /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 839cd1d90..6246aeb1d 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 eacba8d21..eca006137 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 2aeb8ea9a..509d7c80f 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 6f404893d..ecb143992 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