Merge branch 'master' into dev_multicall

This commit is contained in:
Simon Morlat 2010-05-03 14:54:53 +02:00
commit 2027bef314
20 changed files with 206 additions and 46 deletions

1
NEWS
View file

@ -7,6 +7,7 @@ linphone-3.3.0 -- ?????????
* new tabbed ui
* be nat friendly using OPTIONS request and using received,rport from
responses.
* use stun guessed ports even if symmetric is detected (works with freeboxes)
* improve bitrate usage of speex codec
* allow speex to run with vbr (variable bit rate) mode
* add speex/32000 (ultra wide band speex codec)

View file

@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT([linphone],[3.2.99.5],[linphone-developers@nongnu.org])
AC_INIT([linphone],[3.2.99.7],[linphone-developers@nongnu.org])
AC_CANONICAL_SYSTEM
dnl Source packaging numbers

View file

@ -382,8 +382,8 @@ static void register_success(SalOp *op, bool_t registered){
LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op));
LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)sal_op_get_user_pointer(op);
char *msg;
gstate_new_state(lc, GSTATE_REG_OK, NULL);
cfg->registered=registered;
gstate_new_state(lc, GSTATE_REG_OK, NULL);
if (cfg->registered) msg=ms_strdup_printf(_("Registration on %s successful."),sal_op_get_proxy(op));
else msg=ms_strdup_printf(_("Unregistration on %s done."),sal_op_get_proxy(op));
if (lc->vtable.display_status)

View file

@ -28,6 +28,49 @@
* @verbinclude COPYING
*/
/**
* @defgroup tutorial_liblinphone Tutorial: Placing and receiving calls with liblinphone
*
<H1>Initialize liblinphone</H1>
The first thing to do is to initialize the library passing it a set of callbacks functions to receive
various notifications: incoming calls, progress of calls etc...
These callbacks are all grouped in the LinphoneCoreVTable structure.
All are optionnals (use NULL if you don't need them).
The following code shows how initialize liblinphone:
<PRE>
##include <linphonecore.h>
//callback function for notification of incoming calls
static void on_invite_recv(LinphoneCore *lc, const char *from){
printf("Receiving a call from %s\n",from);
}
//callback function for notification end of calls (by remote)
static void on_bye_recv(LinphoneCore *lc, const char *from){
printf("Remote end hangup\n");
}
/
static void on_display_status(LinphoneCore *lc, const char *msg){
printf("%s",msg);
}
int main(int argc, char *argv[]){
LinphoneCoreVTable vtable;
memset(&vtable,0,sizeof(vtable));
vtable.inv_recv=&on_invite_recv;
vtable.bye_recv=&on_bye_recv;
vtable.display_status=&on_display_status;
}
</PRE>
/**
* @defgroup initializing Initialization and destruction

View file

@ -879,6 +879,7 @@ static void linphone_core_init (LinphoneCore * lc, const LinphoneCoreVTable *vta
linphone_core_assign_payload_type(&payload_type_speex_uwb,112,"vbr=on");
linphone_core_assign_payload_type(&payload_type_telephone_event,101,"0-11");
linphone_core_assign_payload_type(&payload_type_ilbc,113,"mode=30");
linphone_core_assign_payload_type(&payload_type_amr,114,"octet-align=1");
#ifdef ENABLE_NONSTANDARD_GSM
{

View file

@ -352,16 +352,38 @@ extern "C" void Java_org_linphone_core_LinphoneProxyConfigImpl_setIdentity(JNIEn
linphone_proxy_config_set_identity((LinphoneProxyConfig*)proxyCfg,identity);
env->ReleaseStringUTFChars(jidentity, identity);
}
extern "C" jstring Java_org_linphone_core_LinphoneProxyConfigImpl_getIdentity(JNIEnv* env,jobject thiz,jlong proxyCfg) {
const char* identity = linphone_proxy_config_get_identity((LinphoneProxyConfig*)proxyCfg);
if (identity) {
return env->NewStringUTF(identity);
} else {
return NULL;
}
}
extern "C" int Java_org_linphone_core_LinphoneProxyConfigImpl_setProxy(JNIEnv* env,jobject thiz,jlong proxyCfg,jstring jproxy) {
const char* proxy = env->GetStringUTFChars(jproxy, NULL);
int err=linphone_proxy_config_set_server_addr((LinphoneProxyConfig*)proxyCfg,proxy);
env->ReleaseStringUTFChars(jproxy, proxy);
return err;
}
extern "C" jstring Java_org_linphone_core_LinphoneProxyConfigImpl_getProxy(JNIEnv* env,jobject thiz,jlong proxyCfg) {
const char* proxy = linphone_proxy_config_get_addr((LinphoneProxyConfig*)proxyCfg);
if (proxy) {
return env->NewStringUTF(proxy);
} else {
return NULL;
}
}
extern "C" void Java_org_linphone_core_LinphoneProxyConfigImpl_enableRegister(JNIEnv* env,jobject thiz,jlong proxyCfg,jboolean enableRegister) {
linphone_proxy_config_enable_register((LinphoneProxyConfig*)proxyCfg,enableRegister);
}
extern "C" jboolean Java_org_linphone_core_LinphoneProxyConfigImpl_isRegistered(JNIEnv* env,jobject thiz,jlong proxyCfg) {
return linphone_proxy_config_is_registered((LinphoneProxyConfig*)proxyCfg);
}
extern "C" jboolean Java_org_linphone_core_LinphoneProxyConfigImpl_isRegisterEnabled(JNIEnv* env,jobject thiz,jlong proxyCfg) {
return linphone_proxy_config_register_enabled((LinphoneProxyConfig*)proxyCfg);
}
extern "C" void Java_org_linphone_core_LinphoneProxyConfigImpl_edit(JNIEnv* env,jobject thiz,jlong proxyCfg) {
linphone_proxy_config_edit((LinphoneProxyConfig*)proxyCfg);
}

View file

@ -567,6 +567,10 @@ void linphone_core_run_stun_tests(LinphoneCore *lc, LinphoneCall *call){
}
}
}
if ((ac->addr[0]!='\0' && vc->addr[0]!='\0' && strcmp(ac->addr,vc->addr)==0)
|| sock2==-1){
strcpy(call->localdesc->addr,ac->addr);
}
close_socket(sock1);
if (sock2>=0) close_socket(sock2);
}

View file

@ -0,0 +1,32 @@
/*
CallDirection.java
Copyright (C) 2010 Belledonne Communications, Grenoble, France
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.
*/
package org.linphone.core;
public class CallDirection {
public static CallDirection Outgoing = new CallDirection("CallOutgoing");
public static CallDirection Incoming = new CallDirection("Callincoming");
private String mStringValue;
private CallDirection(String aStringValue) {
mStringValue = aStringValue;
}
public String toString() {
return mStringValue;
}
}

View file

@ -28,39 +28,44 @@ public interface LinphoneCore {
* linphone core states
*/
static public class GeneralState {
/* states for GSTATE_GROUP_POWER */
static GeneralState GSTATE_POWER_OFF = new GeneralState(0); /* initial state */
static GeneralState GSTATE_POWER_STARTUP = new GeneralState(1);
static GeneralState GSTATE_POWER_ON = new GeneralState(2);
static GeneralState GSTATE_POWER_SHUTDOWN = new GeneralState(3);
/* states for GSTATE_GROUP_REG */
static GeneralState GSTATE_REG_NONE = new GeneralState(10); /* initial state */
static GeneralState GSTATE_REG_OK = new GeneralState(11);
static GeneralState GSTATE_REG_FAILED = new GeneralState(12);
/* states for GSTATE_GROUP_CALL */
static GeneralState GSTATE_CALL_IDLE = new GeneralState(20); /* initial state */
static GeneralState GSTATE_CALL_OUT_INVITE = new GeneralState(21);
static GeneralState GSTATE_CALL_OUT_CONNECTED = new GeneralState(22);
static GeneralState GSTATE_CALL_IN_INVITE = new GeneralState(23);
static GeneralState GSTATE_CALL_IN_CONNECTED = new GeneralState(24);
static GeneralState GSTATE_CALL_END = new GeneralState(25);
static GeneralState GSTATE_CALL_ERROR = new GeneralState(26);
static GeneralState GSTATE_INVALID = new GeneralState(27);
private final int mValue;
static private Vector values = new Vector();
private GeneralState(int value) {
mValue = value;
values.addElement(this);
}
public static GeneralState fromInt(int value) {
for (int i=0; i<values.size();i++) {
GeneralState state = (GeneralState) values.elementAt(i);
if (state.mValue == value) return state;
static private Vector values = new Vector();
/* states for GSTATE_GROUP_POWER */
static public GeneralState GSTATE_POWER_OFF = new GeneralState(0,"GSTATE_POWER_OFF"); /* initial state */
static public GeneralState GSTATE_POWER_STARTUP = new GeneralState(1,"GSTATE_POWER_STARTUP");
static public GeneralState GSTATE_POWER_ON = new GeneralState(2,"GSTATE_POWER_ON");
static public GeneralState GSTATE_POWER_SHUTDOWN = new GeneralState(3,"GSTATE_POWER_SHUTDOWN");
/* states for GSTATE_GROUP_REG */
static public GeneralState GSTATE_REG_NONE = new GeneralState(10,"GSTATE_REG_NONE"); /* initial state */
static public GeneralState GSTATE_REG_OK = new GeneralState(11,"GSTATE_REG_OK");
static public GeneralState GSTATE_REG_FAILED = new GeneralState(12,"GSTATE_REG_FAILED");
/* states for GSTATE_GROUP_CALL */
static public GeneralState GSTATE_CALL_IDLE = new GeneralState(20,"GSTATE_CALL_IDLE"); /* initial state */
static public GeneralState GSTATE_CALL_OUT_INVITE = new GeneralState(21,"GSTATE_CALL_OUT_INVITE");
static public GeneralState GSTATE_CALL_OUT_CONNECTED = new GeneralState(22,"GSTATE_CALL_OUT_CONNECTED");
static public GeneralState GSTATE_CALL_IN_INVITE = new GeneralState(23,"GSTATE_CALL_IN_INVITE");
static public GeneralState GSTATE_CALL_IN_CONNECTED = new GeneralState(24,"GSTATE_CALL_IN_CONNECTED");
static public GeneralState GSTATE_CALL_END = new GeneralState(25,"GSTATE_CALL_END");
static public GeneralState GSTATE_CALL_ERROR = new GeneralState(26,"GSTATE_CALL_ERROR");
static public GeneralState GSTATE_INVALID = new GeneralState(27,"GSTATE_INVALID");
private final int mValue;
private final String mStringValue;
private GeneralState(int value,String stringValue) {
mValue = value;
values.addElement(this);
mStringValue=stringValue;
}
public static GeneralState fromInt(int value) {
for (int i=0; i<values.size();i++) {
GeneralState state = (GeneralState) values.elementAt(i);
if (state.mValue == value) return state;
}
throw new RuntimeException("state not found ["+value+"]");
}
public String toString() {
return mStringValue;
}
throw new RuntimeException("sate not found ["+value+"]");
}
}
@ -99,7 +104,7 @@ public interface LinphoneCore {
*/
public void invite(String destination)throws LinphoneCoreException;
public void invite(LinphoneAddress to);
public void invite(LinphoneAddress to)throws LinphoneCoreException;
public void terminateCall();
/**

View file

@ -19,36 +19,36 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package org.linphone.core;
import java.io.IOException;
abstract public class LinphoneCoreFactory {
private static String defaulfFactory = "org.linphone.core.LinphoneCoreFactoryImpl";
private static String factoryName = "org.linphone.core.LinphoneCoreFactoryImpl";
static LinphoneCoreFactory theLinphoneCoreFactory;
/**
* Indicate the name of the class used by this factory
* @param pathName
*/
static void setFactoryClassName (String className) {
defaulfFactory = className;
public static void setFactoryClassName (String className) {
factoryName = className;
}
public static LinphoneCoreFactory instance() {
try {
if (theLinphoneCoreFactory == null) {
Class lFactoryClass = Class.forName(defaulfFactory);
Class lFactoryClass = Class.forName(factoryName);
theLinphoneCoreFactory = (LinphoneCoreFactory) lFactoryClass.newInstance();
}
} catch (Exception e) {
System.err.println("cannot instanciate factory ["+defaulfFactory+"]");
System.err.println("cannot instanciate factory ["+factoryName+"]");
}
return theLinphoneCoreFactory;
}
abstract public LinphoneAuthInfo createAuthInfo(String username,String password);
abstract public LinphoneAuthInfo createAuthInfo(String username,String password, String realm);
abstract public LinphoneCore createLinphoneCore(LinphoneCoreListener listener, String userConfig,String factoryConfig,Object userdata) throws IOException;
abstract public LinphoneCore createLinphoneCore(LinphoneCoreListener listener, String userConfig,String factoryConfig,Object userdata) throws LinphoneCoreException;
abstract public LinphoneAddress createLinphoneAddress(String username,String domain,String displayName);

View file

@ -0,0 +1,47 @@
/*
LinphoneCoreException.java
Copyright (C) 2010 Belledonne Communications, Grenoble, France
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.
*/
package org.linphone.core;
public class LinphoneCoreException extends Exception {
Throwable mE;
public LinphoneCoreException() {
super();
}
public LinphoneCoreException(String detailMessage) {
super(detailMessage);
}
public LinphoneCoreException(Throwable e) {
mE = e;
}
public LinphoneCoreException(String detailMessage,Throwable e) {
super(detailMessage);
mE = e;
}
public void printStackTrace() {
super.printStackTrace();
mE.printStackTrace();
}
}

View file

@ -22,14 +22,19 @@ package org.linphone.core;
public class LinphoneCoreException extends Exception {
public LinphoneCoreException() {
// TODO Auto-generated constructor stub
}
public LinphoneCoreException(String detailMessage) {
super(detailMessage);
// TODO Auto-generated constructor stub
}
public LinphoneCoreException(Throwable e) {
super(e);
}
public LinphoneCoreException(String detailMessage,Throwable e) {
super(detailMessage,e);
}
}

@ -1 +1 @@
Subproject commit b437bd3bcac6ce8f09218168ae75cc11e9a9255e
Subproject commit b340a76e998c7dd2670372212b0bf14d7c59b987