diff --git a/p2pproxy/Makefile.am b/p2pproxy/Makefile.am index 412b19bbb448eb9ed3fe7328ebd5760c604e0db6..fb4500f0299b596471b5e38a9c754d3817cc4541 100644 --- a/p2pproxy/Makefile.am +++ b/p2pproxy/Makefile.am @@ -1,11 +1,19 @@ EXTRA_DIST=dependencies dependencies-src src test-src -SUBDIRS=launcher +SUBDIRS=launcher plugin-src -antbuild/dist/p2pproxy_0.1/p2pproxy.jar: src/org/linphone/p2pproxy/*/*.java +ALL_JARS= \ + antbuild/dist/p2pproxy_0.1/bcprov-jdk14.jar antbuild/dist/p2pproxy_0.1/log4j.jar \ + antbuild/dist/p2pproxy_0.1/javax.servlet.jar antbuild/dist/p2pproxy_0.1/org.mortbay.jetty.jar \ + antbuild/dist/p2pproxy_0.1/jstun-0.7.0.jar antbuild/dist/p2pproxy_0.1/p2pproxy.jar \ + antbuild/dist/p2pproxy_0.1/junit-4.3.1.jar antbuild/dist/p2pproxy_0.1/sip.jar + +$(ALL_JARS): src/org/linphone/p2pproxy/*/*.java $(ANT) dist jarsdir=$(datadir)/java/fonis -jars_DATA=antbuild/dist/p2pproxy_0.1/p2pproxy.jar antbuild/dist/p2pproxy_0.1/*.jar +jars_DATA=$(ALL_JARS) +clean-local: + $(ANT) clean diff --git a/p2pproxy/configure.ac b/p2pproxy/configure.ac index 65539a1370518f75914a4d745cc02de665c1f752..5d290f7a190fabca077c9cedaf5796a2e544c0ac 100644 --- a/p2pproxy/configure.ac +++ b/p2pproxy/configure.ac @@ -16,8 +16,7 @@ AC_ARG_ENABLE(strict, dnl Checks for programs. AC_PROG_CC AC_PROG_LIBTOOL -AC_ENABLE_SHARED(yes) -AC_ENABLE_STATIC(no) +AC_DISABLE_STATIC CFLAGS="$CFLAGS -Wall" @@ -59,6 +58,11 @@ fi AC_DEFINE_UNQUOTED(P2PPROXY_INSTALLDIR,"$jarsdir",[path of jars]) +PKG_CHECK_MODULES(LIBLINPHONE, linphone >= 3.0.0) + +LINPHONE_PLUGINS_DIR="\$(libdir)/liblinphone/plugins/" +AC_SUBST(LINPHONE_PLUGINS_DIR) + dnl ################################################## dnl # Check for ESP Packager dnl ################################################## @@ -124,4 +128,5 @@ AC_OUTPUT( Makefile launcher/Makefile launcher/src/Makefile +plugin-src/Makefile ) diff --git a/p2pproxy/launcher/src/Makefile.am b/p2pproxy/launcher/src/Makefile.am index d4dd27952d1ae482469fb910a2623d7add9e4993..0b920ff7537b96f861bdef670abcf55ecb2921de 100644 --- a/p2pproxy/launcher/src/Makefile.am +++ b/p2pproxy/launcher/src/Makefile.am @@ -5,19 +5,19 @@ JAVA_LDFLAGS=\ -Wl,-rpath,$(javadir)/jre/lib/amd64 -Wl,-rpath,$(javadir)/jre/lib/i386 \ -Wl,-rpath,$(javadir)/jre/lib/amd64/server -Wl,-rpath,$(javadir)/jre/lib/i386/server -lib_LTLIBRARIES=libfonis.la +noinst_LTLIBRARIES=libfonisc.la -libfonis_la_SOURCES=p2pproxy.c p2pproxy.h +libfonisc_la_SOURCES=p2pproxy.c p2pproxy.h -libfonis_la_LIBADD=$(JAVA_LIBS) +libfonisc_la_LIBADD=$(JAVA_LIBS) -libfonis_la_LDFLAGS=$(JAVA_LDFLAGS) +libfonisc_la_LDFLAGS=$(JAVA_LDFLAGS) noinst_PROGRAMS=launcher-tester launcher_tester_SOURCES=launcher-tester.c -launcher_tester_LDADD=libfonis.la $(JAVA_LIBS) +launcher_tester_LDADD=libfonisc.la $(JAVA_LIBS) launcher_tester_LDFLAGS=$(JAVA_LDFLAGS) diff --git a/p2pproxy/launcher/src/p2pproxy.c b/p2pproxy/launcher/src/p2pproxy.c index fa0ea46f0223c677b618f7ac55c40a3ff6e44253..a383806c78015879e3e850114b46bf9330cc0343 100644 --- a/p2pproxy/launcher/src/p2pproxy.c +++ b/p2pproxy/launcher/src/p2pproxy.c @@ -139,7 +139,7 @@ int p2pproxy_accountmgt_deleteAccount(const char* user_name) { return lResult; } -int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, char* domaine) { +int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, const char* domain) { jmethodID lLookupSipProxyUriMethod; jstring lJStringResult; const char* lString; @@ -149,7 +149,7 @@ int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, char* dom GET_JNI_ENV - applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, domaine); + applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, domain); lLookupSipProxyUriMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "lookupSipProxyUri", "(Ljava/lang/String;)Ljava/lang/String;"); lJStringResult = (*lJniEnv)->CallStaticObjectMethod(lJniEnv, lMainClass, lLookupSipProxyUriMethod, applicationArg); if (lJStringResult == 0) { @@ -162,7 +162,7 @@ int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, char* dom return P2PPROXY_NO_ERROR; } -int p2pproxy_resourcemgt_revoke_sip_proxy(char* proxy_uri) { +int p2pproxy_resourcemgt_revoke_sip_proxy(const char* proxy_uri) { jmethodID revokeProxyMethod; jstring applicationArg; GET_JNI_ENV @@ -213,7 +213,7 @@ void p2pproxy_resourcemgt_delete_resource_list(p2pproxy_resourcemgt_resource_lis free(resource_list); } -int p2pproxy_resourcemgt_lookup_media_resource(p2pproxy_resourcemgt_resource_list_t* resource_list, char* domaine) { +int p2pproxy_resourcemgt_lookup_media_resource(p2pproxy_resourcemgt_resource_list_t* resource_list, const char* domain) { jmethodID lLookupMediaResourceMethod; jarray lJStringResults; jstring lResourceInstance; @@ -227,7 +227,7 @@ int p2pproxy_resourcemgt_lookup_media_resource(p2pproxy_resourcemgt_resource_lis GET_JNI_ENV - applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, domaine); + applicationArg = (*lJniEnv)->NewStringUTF(lJniEnv, domain); lLookupMediaResourceMethod = (*lJniEnv)->GetStaticMethodID(lJniEnv, lMainClass, "lookupMediaServerAddress", "(Ljava/lang/String;)[Ljava/lang/String;"); lJStringResults = (*lJniEnv)->CallStaticObjectMethod(lJniEnv, lMainClass, lLookupMediaResourceMethod, applicationArg); if (lJStringResults == 0) { @@ -248,7 +248,7 @@ int p2pproxy_resourcemgt_lookup_media_resource(p2pproxy_resourcemgt_resource_lis (*p2pproxy_application_jvm)->DetachCurrentThread(p2pproxy_application_jvm); return P2PPROXY_NO_ERROR; } -int p2pproxy_resourcemgt_revoke_media_resource(char* resource_uri) { +int p2pproxy_resourcemgt_revoke_media_resource(const char* resource_uri) { jmethodID revokeMediaResourceMethod; jstring applicationArg; GET_JNI_ENV diff --git a/p2pproxy/launcher/src/p2pproxy.h b/p2pproxy/launcher/src/p2pproxy.h index 15eb54cd6c79c4280fa7117ed776b03cf7106f00..aa0434a08103aa925a7c800279c5c94f02062fb4 100644 --- a/p2pproxy/launcher/src/p2pproxy.h +++ b/p2pproxy/launcher/src/p2pproxy.h @@ -127,27 +127,27 @@ void p2pproxy_resourcemgt_delete_resource_list(p2pproxy_resourcemgt_resource_lis * @param [in] domaine name * @return status code P2PPROXY_NO_ERROR, P2PPROXY_ERROR_RESOURCELOCATOR_SERVER_NOT_FOUND */ -int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, char* domaine) ; +int p2pproxy_resourcemgt_lookup_sip_proxy(char* proxy_uri,size_t size, const char* domain) ; /** * access a media ressource addresses for a given domaine name * @param [out] p2pproxy_resourcemgt_resource_list_t allocated by the user (size = 0) * @param [in] domaine name * @return status code P2PPROXY_NO_ERROR, P2PPROXY_ERROR_RESOURCELOCATOR_SERVER_NOT_FOUND */ -int p2pproxy_resourcemgt_lookup_media_resource(p2pproxy_resourcemgt_resource_list_t* resource_list, char* domaine) ; +int p2pproxy_resourcemgt_lookup_media_resource(p2pproxy_resourcemgt_resource_list_t* resource_list, const char* domain) ; /* * notify the library at a given proxy is no longuer reachable * @param [in] proxy sip uri * @return status code P2PPROXY_NO_ERROR */ -int p2pproxy_resourcemgt_revoke_sip_proxy(char* proxy_uri); +int p2pproxy_resourcemgt_revoke_sip_proxy(const char* proxy_uri); /* * notify the library at a given Media resoure is no longuer reachable * @param [in] media resource uri (udp://hostname:port) * @return status code P2PPROXY_NO_ERROR */ -int p2pproxy_resourcemgt_revoke_media_resource(char* resource_uri); +int p2pproxy_resourcemgt_revoke_media_resource(const char* resource_uri); #endif /*SWIG*/ diff --git a/p2pproxy/plugin-src/Makefile.am b/p2pproxy/plugin-src/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..5b8495a2761929160261602c9c0989c0f29cc4c2 --- /dev/null +++ b/p2pproxy/plugin-src/Makefile.am @@ -0,0 +1,19 @@ +#plugin to enable fonis into linphone + +JAVA_LDFLAGS=\ + -Wl,-rpath,$(javadir)/jre/lib/amd64 -Wl,-rpath,$(javadir)/jre/lib/i386 \ + -Wl,-rpath,$(javadir)/jre/lib/amd64/server -Wl,-rpath,$(javadir)/jre/lib/i386/server + +pluginsdir=$(LINPHONE_PLUGINS_DIR) + +plugins_LTLIBRARIES=libfonisprovider.la + +libfonisprovider_la_SOURCES=fonis.c + +libfonisprovider_la_LIBADD=$(top_builddir)/launcher/src/libfonisc.la + +libfonisprovider_la_LDFLAGS=$(JAVA_LDFLAGS) + +AM_CFLAGS= $(LIBLINPHONE_CFLAGS) + +INCLUDES=-I$(top_srcdir)/launcher/src \ No newline at end of file diff --git a/p2pproxy/plugin-src/fonis.c b/p2pproxy/plugin-src/fonis.c new file mode 100644 index 0000000000000000000000000000000000000000..a35228e4531ea1127e67ea939b1f218b2cc727b4 --- /dev/null +++ b/p2pproxy/plugin-src/fonis.c @@ -0,0 +1,110 @@ +/* +linphone +Copyright (C) 2000 Simon MORLAT (simon.morlat@linphone.org) + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + + +#include "sipsetup.h" +#include "p2pproxy.h" + +typedef struct _FonisContext{ + int toto; +}FonisContext; + +static ms_thread_t fonis_thread; + + +static void *fonis_thread_func(void *arg){ + if (p2pproxy_application_start(0,NULL)!=0){ + ms_error("Fail to start fonis thread !"); + } + return NULL; +} + +static bool_t fonis_init(void){ + static bool_t initd=FALSE; + if (!initd){ + ms_thread_create(&fonis_thread,NULL,fonis_thread_func,NULL); + initd=TRUE; + } + sleep(4); + return TRUE; +} + + +static int fonis_create_account(const char *uri, const char *passwd){ + int err=p2pproxy_accountmgt_createAccount(uri); + if (err<0) return -1; + return 0; +} + +static int fonis_login_account(SipSetupContext * ctx,const char *uri, const char *passwd){ + if (p2pproxy_accountmgt_isValidAccount(uri)==P2PPROXY_ACCOUNTMGT_USER_EXIST) { + return 0; + } + else return -1; +} + +static int fonis_get_proxy(SipSetupContext *ctx, const char *domain, char *proxy, size_t sz){ + int err=p2pproxy_resourcemgt_lookup_sip_proxy(proxy,sz,(char*)domain); + if (err==0) return 0; + else return -1; +} + +static int fonis_get_stun_servers(SipSetupContext *ctx, char *stun1, char *stun2, size_t size){ + FonisContext *fc=(FonisContext*)ctx->data; + int ret=-1; + p2pproxy_resourcemgt_resource_list_t* l=p2pproxy_resourcemgt_new_resource_list(); + if (p2pproxy_resourcemgt_lookup_media_resource(l,ctx->domain)==0){ + if (l->size>0) strncpy(stun1,l->resource_uri[0],size); + if (l->size>1) strncpy(stun2,l->resource_uri[1],size); + ret=0; + } + p2pproxy_resourcemgt_delete_resource_list(l); + return ret; +} + +static int fonis_get_relay(SipSetupContext *ctx, char *relay, size_t size){ + FonisContext *fc=(FonisContext*)ctx->data; + int ret=-1; + p2pproxy_resourcemgt_resource_list_t* l=p2pproxy_resourcemgt_new_resource_list(); + if (p2pproxy_resourcemgt_lookup_media_resource(l,ctx->domain)==0){ + if (l->size>0) strncpy(relay,l->resource_uri[0],size); + ret=0; + } + p2pproxy_resourcemgt_delete_resource_list(l); + return ret; +} + + +static SipSetup fonis_sip_setup={ + .capabilities=SIP_SETUP_CAP_PROXY_PROVIDER|SIP_SETUP_CAP_STUN_PROVIDER| + SIP_SETUP_CAP_RELAY_PROVIDER|SIP_SETUP_CAP_ACCOUNT_MANAGER, + .name="fonis", + .init=fonis_init, + .create_account=fonis_create_account, + .login_account=fonis_login_account, + .get_proxy=fonis_get_proxy, + .get_stun_servers=fonis_get_stun_servers, + .get_relay=fonis_get_relay, + .exit=p2pproxy_application_stop +}; + +void libfonisprovider_init(void){ + sip_setup_register(&fonis_sip_setup); +} +