Commit 5c30c2a3 authored by Sylvain Berfini's avatar Sylvain Berfini 🎩

Merge remote-tracking branch 'origin/belle-sip' into wp

Conflicts:
	coreapi/bellesip_sal/sal_impl.c
	coreapi/misc.c
	tester/call_tester.c
	tester/liblinphone_tester.c
parents ed4ef8a7 d4a36148
......@@ -419,8 +419,6 @@ AC_DEFINE_UNQUOTED(PACKAGE_SOUND_DIR, "${package_prefix}/${DATADIRNAME}/sounds/l
dnl check if we have the getifaddrs() sytem call
AC_CHECK_FUNCS(getifaddrs)
dnl check for osip2
LP_CHECK_OSIP2
dnl conditionnal build for ssl
AC_ARG_ENABLE(ssl,
......@@ -436,8 +434,6 @@ AC_ARG_ENABLE(ssl,
if test "$build_ssl" = "true"; then
PKG_CHECK_MODULES(OPENSSL, libssl >= 0.9.8)
fi
dnl setup flags for exosip library
LP_SETUP_EXOSIP
dnl check exosip support of DSCP in exosip
AC_MSG_CHECKING([for DSCP support in exosip])
......@@ -685,6 +681,10 @@ if test $USE_BELLESIP_TRUE !='#' ; then
SIPSTACK_LIBS=$BELLESIP_LIBS
AC_DEFINE(USE_BELLESIP,1,[Defined when bellesip is used])
else
dnl check for osip2
LP_CHECK_OSIP2
dnl setup flags for exosip library
LP_SETUP_EXOSIP
SIPSTACK_CFLAGS=$EXOSIP_CFLAGS $OSIP_CFLAGS
SIPSTACK_LIBS=$EXOSIP_LIBS $OSIP_LIBS
fi
......
......@@ -244,6 +244,8 @@ static LPC_COMMAND commands[] = {
"'firewall none' : use direct connection.\n"
"'firewall nat' : use nat address given with the 'nat' command.\n"
"'firewall stun' : use stun server given with the 'stun' command.\n"
"'firewall ice' : use ice.\n"
"'firewall upnp' : use uPnP IGD.\n"
},
{ "call-logs", lpc_cmd_call_logs, "Calls history", NULL },
{ "friend", lpc_cmd_friend, "Manage friends",
......@@ -850,6 +852,10 @@ lpc_cmd_firewall(LinphoneCore *lc, char *args)
{
linphone_core_set_firewall_policy(lc,LinphonePolicyNoFirewall);
}
else if (strcmp(args,"upnp")==0)
{
linphone_core_set_firewall_policy(lc,LinphonePolicyUseUpnp);
}
else if (strcmp(args,"ice")==0)
{
setting = linphone_core_get_stun_server(lc);
......
......@@ -181,6 +181,9 @@ static void process_request_event(void *sal, const belle_sip_request_event_t *ev
sal_op_set_remote_ua(op,BELLE_SIP_MESSAGE(req));
}
if (!op->base.call_id) {
op->base.call_id=ms_strdup(belle_sip_header_call_id_get_call_id(BELLE_SIP_HEADER_CALL_ID(belle_sip_message_get_header_by_type(BELLE_SIP_MESSAGE(req), belle_sip_header_call_id_t))));
}
if (op->callbacks.process_request_event) {
op->callbacks.process_request_event(op,event);
} else {
......@@ -219,7 +222,9 @@ static void process_response_event(void *user_ctx, const belle_sip_response_even
if (!op->base.remote_ua) {
sal_op_set_remote_ua(op,BELLE_SIP_MESSAGE(response));
}
if (!op->base.call_id) {
op->base.call_id=ms_strdup(belle_sip_header_call_id_get_call_id(BELLE_SIP_HEADER_CALL_ID(belle_sip_message_get_header_by_type(BELLE_SIP_MESSAGE(response), belle_sip_header_call_id_t))));
}
if (op->callbacks.process_response_event) {
if (op->base.root->nat_helper_enabled) {
......@@ -378,7 +383,10 @@ Sal * sal_init(){
sal->nat_helper_enabled=TRUE;
snprintf(stack_string,sizeof(stack_string)-1,"(belle-sip/%s)",belle_sip_version_to_string());
sal->user_agent=belle_sip_header_user_agent_new();
belle_sip_header_user_agent_add_product(sal->user_agent, LINPHONE_PACKAGE_NAME "/" LINPHONE_VERSION);
#if defined(PACKAGE_NAME) && defined(LINPHONE_VERSION)
belle_sip_header_user_agent_add_product(sal->user_agent, PACKAGE_NAME "/" LINPHONE_VERSION);
#endif
belle_sip_header_user_agent_add_product(sal->user_agent,stack_string);
belle_sip_object_ref(sal->user_agent);
belle_sip_set_log_handler(_belle_sip_log);
......@@ -575,8 +583,8 @@ MSList * sal_get_pending_auths(Sal *sal){
/*misc*/
void sal_get_default_local_ip(Sal *sal, int address_family, char *ip, size_t iplen){
ms_fatal("sal_get_default_local_ip not implemented yet");
return ;
strncpy(ip,address_family==AF_INET6 ? "::1" : "127.0.0.1",iplen);
ms_error("Could not find default routable ip address !");
}
const char *sal_get_root_ca(Sal* ctx) {
......@@ -604,3 +612,9 @@ void sal_nat_helper_enable(Sal *sal,bool_t enable) {
bool_t sal_nat_helper_enabled(Sal *sal) {
return sal->nat_helper_enabled;
}
void sal_set_dns_timeout(Sal* sal,int timeout) {
belle_sip_stack_set_dns_timeout(sal->stack, timeout);
}
int sal_get_dns_timeout(const Sal* sal) {
return belle_sip_stack_get_dns_timeout(sal->stack);
}
......@@ -81,7 +81,14 @@ static int set_sdp_from_desc(belle_sip_message_t *msg, const SalMediaDescription
}
static void call_process_io_error(void *user_ctx, const belle_sip_io_error_event_t *event){
ms_error("call_process_io_error not implemented yet");
SalOp* op=(SalOp*)user_ctx;
if (!op->dialog) {
/*call terminated very early*/
op->base.root->callbacks.call_failure(op,SalErrorNoResponse,SalReasonUnknown,"Service Unavailable",503);
op->state=SalOpStateTerminated;
} else {
/*dialog will terminated shortly, nothing to do*/
}
}
static void process_dialog_terminated(void *ctx, const belle_sip_dialog_terminated_event_t *event) {
SalOp* op=(SalOp*)ctx;
......
......@@ -169,7 +169,7 @@ static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* req
}
int sal_op_send_request(SalOp* op, belle_sip_request_t* request) {
bool_t need_ack=FALSE;
bool_t need_contact=FALSE;
/*
Header field where proxy ACK BYE CAN INV OPT REG
___________________________________________________________
......@@ -179,9 +179,9 @@ int sal_op_send_request(SalOp* op, belle_sip_request_t* request) {
||strcmp(belle_sip_request_get_method(request),"REGISTER")==0
||strcmp(belle_sip_request_get_method(request),"SUBSCRIBE")==0
||strcmp(belle_sip_request_get_method(request),"OPTION")==0)
need_ack=TRUE;
need_contact=TRUE;
return _sal_op_send_request_with_contact(op, request,need_ack);
return _sal_op_send_request_with_contact(op, request,need_contact);
}
......
......@@ -47,11 +47,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <net/if.h>
#include <ifaddrs.h>
#endif
#if _MSC_VER
#define snprintf _snprintf
#define popen _popen
#define pclose _pclose
#include <math.h>
#if _MSC_VER
#define snprintf _snprintf
#define popen _popen
#define pclose _pclose
#endif
#if !defined(WIN32)
......@@ -253,7 +253,7 @@ static double get_audio_payload_bandwidth(LinphoneCore *lc, const PayloadType *p
}
void linphone_core_update_allocated_audio_bandwidth_in_call(LinphoneCall *call, const PayloadType *pt){
call->audio_bw=(int)(get_audio_payload_bandwidth(call->core,pt)/1000.0);
call->audio_bw=(int)(ceil(get_audio_payload_bandwidth(call->core,pt)/1000.0)); /*rounding codec bandwidth should be avoid, specially for AMR*/
ms_message("Audio bandwidth for this call is %i",call->audio_bw);
}
......
......@@ -313,10 +313,9 @@ int offer_answer_initiate_incoming(const SalMediaDescription *local_capabilities
}else ms_warning("Unknown protocol for mline %i, declining",i);
if (ls){
initiate_incoming(ls,rs,&result->streams[i],one_matching_codec);
result->n_active_streams++;
}
else {
/* create an inactive stream for the answer, as there where no matching stream a local capability */
if (result->streams[i].rtp_port!=0) result->n_active_streams++;
}else {
/* create an inactive stream for the answer, as there where no matching stream in local capabilities */
result->streams[i].dir=SalStreamInactive;
result->streams[i].rtp_port=0;
result->streams[i].type=rs->type;
......
......@@ -309,15 +309,14 @@ void linphone_upnp_context_destroy(UpnpContext *lupnp) {
ms_message("uPnP IGD: Wait all pending port bindings ...");
ms_cond_wait(&lupnp->empty_cond, &lupnp->mutex);
}
ms_mutex_unlock(&lupnp->mutex);
if(lupnp->upnp_igd_ctxt != NULL) {
// upnp_igd_destroy is synchronous so the callbacks will be called in the same thread.
// So release the mutex before upnp_igd_destroy call.
ms_mutex_unlock(&lupnp->mutex);
upnp_igd_destroy(lupnp->upnp_igd_ctxt);
ms_mutex_lock(&lupnp->mutex);
lupnp->upnp_igd_ctxt = NULL;
}
/* No more multi threading here */
/* Run one more time configuration update and proxy */
linphone_upnp_update_config(lupnp);
......@@ -345,8 +344,6 @@ void linphone_upnp_context_destroy(UpnpContext *lupnp) {
ms_list_for_each(lupnp->pending_bindings,(void (*)(void*))linphone_upnp_port_binding_release);
lupnp->pending_bindings = ms_list_free(lupnp->pending_bindings);
ms_mutex_unlock(&lupnp->mutex);
ms_mutex_destroy(&lupnp->mutex);
ms_cond_destroy(&lupnp->empty_cond);
......
......@@ -525,4 +525,7 @@ LINPHONE_PUBLIC void sal_set_recv_error(Sal *sal,int value);
/*enable contact fixing*/
void sal_nat_helper_enable(Sal *sal,bool_t enable);
bool_t sal_nat_helper_enabled(Sal *sal);
void sal_set_dns_timeout(Sal* sal,int timeout);
int sal_get_dns_timeout(const Sal* sal);
#endif
mediastreamer2 @ 8d85a5de
Subproject commit 7a11d31f5cab97ff0de373d617720bb651d19b7d
Subproject commit 8d85a5ded3b18e2d3d4ba22ee75e0f1ef9c0f739
......@@ -4,7 +4,7 @@ if BUILD_CUNIT_TESTS
noinst_PROGRAMS=liblinphone_tester
TESTS=$(noinst_PROGRAMS)
liblinphone_tester_SOURCES= liblinphone_tester.c register_tester.c message_tester.c call_tester.c presence_tester.c
liblinphone_tester_SOURCES= liblinphone_tester.c setup_tester.c register_tester.c message_tester.c call_tester.c presence_tester.c
#liblinphone_tester_CFLAGS=$(CUNIT_CFLAGS)
......
This diff is collapsed.
This diff is collapsed.
......@@ -21,6 +21,51 @@
#include "CUnit/Basic.h"
typedef void (*test_function_t)(void);
typedef int (*test_suite_function_t)(const char *name);
typedef struct {
const char *name;
test_function_t func;
} test_t;
typedef struct {
const char *name;
CU_InitializeFunc init_func;
CU_CleanupFunc cleanup_func;
int nb_tests;
test_t *tests;
} test_suite_t;
#ifdef __cplusplus
extern "C" {
#endif
extern test_suite_t setup_test_suite;
extern test_suite_t register_test_suite;
extern test_suite_t call_test_suite;
extern test_suite_t message_test_suite;
extern test_suite_t presence_test_suite;
extern int liblinphone_tester_nb_test_suites(void);
extern int liblinphone_tester_nb_tests(const char *suite_name);
extern const char * liblinphone_tester_test_suite_name(int suite_index);
extern const char * liblinphone_tester_test_name(const char *suite_name, int test_index);
extern void liblinphone_tester_init(void);
extern void liblinphone_tester_uninit(void);
extern int liblinphone_tester_run_tests(const char *suite_name, const char *test_name);
#ifdef __cplusplus
};
#endif
const char* test_domain;
const char* auth_domain;
const char* test_username;
......@@ -77,6 +122,7 @@ typedef struct _stats {
int number_of_IframeDecoded;
}stats;
typedef struct _LinphoneCoreManager {
LinphoneCoreVTable v_table;
LinphoneCore* lc;
......@@ -104,9 +150,7 @@ LinphoneAddress * create_linphone_address(const char * domain);
LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* file,int proxy_count);
bool_t wait_for(LinphoneCore* lc_1, LinphoneCore* lc_2,int* counter,int value);
bool_t wait_for_list(MSList* lcs,int* counter,int value,int timeout_ms);
int call_test_suite ();
int register_test_suite ();
int message_test_suite ();
int presence_test_suite ();
#endif /* LIBLINPHONE_TESTER_H_ */
......@@ -15,16 +15,19 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include "CUnit/Basic.h"
#include "linphonecore.h"
#include "private.h"
#include "liblinphone_tester.h"
void text_message_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from_address, const char *message) {
stats* counters = (stats*)linphone_core_get_user_data(lc);
counters->number_of_LinphoneMessageReceivedLegacy++;
}
void message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMessage* message) {
char* from=linphone_address_as_string(linphone_chat_message_get_from(message));
stats* counters;
......@@ -58,7 +61,7 @@ void linphone_chat_message_state_change(LinphoneChatMessage* msg,LinphoneChatMes
}
static void text_message() {
static void text_message(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("./tester/marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("./tester/pauline_rc");
char* to = linphone_address_as_string(marie->identity);
......@@ -70,7 +73,7 @@ static void text_message() {
linphone_core_manager_destroy(pauline);
}
static void text_message_with_ack() {
static void text_message_with_ack(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("./tester/marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("./tester/pauline_rc");
char* to = linphone_address_as_string(marie->identity);
......@@ -83,7 +86,8 @@ static void text_message_with_ack() {
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
static void text_message_with_external_body() {
static void text_message_with_external_body(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("./tester/marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("./tester/pauline_rc");
char* to = linphone_address_as_string(marie->identity);
......@@ -100,7 +104,7 @@ static void text_message_with_external_body() {
linphone_core_manager_destroy(pauline);
}
static void text_message_with_send_error() {
static void text_message_with_send_error(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("./tester/marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("./tester/pauline_rc");
char* to = linphone_address_as_string(pauline->identity);
......@@ -119,20 +123,19 @@ static void text_message_with_send_error() {
linphone_core_manager_destroy(pauline);
}
int message_test_suite () {
CU_pSuite pSuite = CU_add_suite("Message", NULL, NULL);
if (NULL == CU_add_test(pSuite, "text_message", text_message)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "text_message_with_ack", text_message_with_ack)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "text_message_with_send_error", text_message_with_send_error)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "text_message_with_external_body", text_message_with_external_body)) {
return CU_get_error();
}
return 0;
}
test_t message_tests[] = {
{ "Text message", text_message },
{ "Text message with ack", text_message_with_ack },
{ "Text message with send error", text_message_with_send_error },
{ "Text message with external body", text_message_with_external_body }
};
test_suite_t message_test_suite = {
"Message",
NULL,
NULL,
sizeof(message_tests) / sizeof(message_tests[0]),
message_tests
};
......@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include "CUnit/Basic.h"
#include "linphonecore.h"
......@@ -30,8 +31,8 @@ void new_subscribtion_request(LinphoneCore *lc, LinphoneFriend *lf, const char *
counters = (stats*)linphone_core_get_user_data(lc);
counters->number_of_NewSubscriptionRequest++;
linphone_core_add_friend(lc,lf); /*accept subscription*/
}
void notify_presence_received(LinphoneCore *lc, LinphoneFriend * lf) {
stats* counters;
char* from=linphone_address_as_string(linphone_friend_get_address(lf));
......@@ -41,7 +42,7 @@ void notify_presence_received(LinphoneCore *lc, LinphoneFriend * lf) {
counters->number_of_NotifyReceived++;
}
static void simple_publish() {
static void simple_publish(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("./tester/marie_rc");
LinphoneProxyConfig* proxy;
linphone_core_get_default_proxy(marie->lc,&proxy);
......@@ -52,8 +53,7 @@ static void simple_publish() {
linphone_core_manager_destroy(marie);
}
static void simple_subscribe() {
static void simple_subscribe(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("./tester/marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("./tester/pauline_rc");
const MSList* marie_friends = linphone_core_get_friend_list(marie->lc);
......@@ -72,7 +72,8 @@ static void simple_subscribe() {
linphone_core_manager_destroy(pauline);
}
static void unsubscribe_while_subscribing() {
static void unsubscribe_while_subscribing(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("./tester/marie_rc");
LinphoneFriend* friend = linphone_friend_new_with_addr("sip:toto@git.linphone.org"); /*any unexisting address*/
linphone_friend_edit(friend);
......@@ -81,19 +82,20 @@ static void unsubscribe_while_subscribing() {
linphone_core_add_friend(marie->lc,friend);
linphone_core_iterate(marie->lc);
linphone_core_manager_destroy(marie);
}
int presence_test_suite () {
CU_pSuite pSuite = CU_add_suite("Presence", NULL, NULL);
if (NULL == CU_add_test(pSuite, "simple_subscribe", simple_subscribe)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "simple_publish", simple_publish)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "unsubscribe_while_subscribing", unsubscribe_while_subscribing)) {
return CU_get_error();
}
return 0;
}
test_t presence_tests[] = {
{ "Simple Subscribe", simple_subscribe },
{ "Simple Publish", simple_publish },
{ "Unsubscribe while subscribing", unsubscribe_while_subscribing },
};
test_suite_t presence_test_suite = {
"Presence",
NULL,
NULL,
sizeof(presence_tests) / sizeof(presence_tests[0]),
presence_tests
};
......@@ -15,6 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include "CUnit/Basic.h"
#include "linphonecore.h"
......@@ -27,7 +28,6 @@ static LinphoneCore* create_lc() {
return create_lc_with_auth(0);
}
void registration_state_changed(struct _LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState cstate, const char *message){
stats* counters;
ms_message("New registration state %s for user id [%s] at proxy [%s]\n"
......@@ -46,6 +46,7 @@ void registration_state_changed(struct _LinphoneCore *lc, LinphoneProxyConfig *c
}
}
static void register_with_refresh_base_2(LinphoneCore* lc, bool_t refresh,const char* domain,const char* route,bool_t late_auth_info) {
int retry=0;
LCSipTransports transport = {5070,5070,0,5071};
......@@ -98,9 +99,11 @@ static void register_with_refresh_base_2(LinphoneCore* lc, bool_t refresh,const
CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0);
}
static void register_with_refresh_base(LinphoneCore* lc, bool_t refresh,const char* domain,const char* route) {
register_with_refresh_base_2(lc,refresh,domain,route,FALSE);
}
static void register_with_refresh(LinphoneCore* lc, bool_t refresh,const char* domain,const char* route) {
stats* counters = (stats*)linphone_core_get_user_data(lc);
register_with_refresh_base(lc,refresh,domain,route);
......@@ -130,6 +133,7 @@ static void register_with_refresh_with_send_error(void) {
CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0);
}
static void simple_register(){
LinphoneCore* lc = create_lc();
stats* counters = (stats*)linphone_core_get_user_data(lc);
......@@ -137,7 +141,6 @@ static void simple_register(){
CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,0);
}
/*take care of min expires configuration from server*/
static void simple_register_with_refresh() {
LinphoneCore* lc = create_lc();
......@@ -160,6 +163,7 @@ static void simple_tcp_register(){
lc = create_lc();
register_with_refresh(lc,FALSE,NULL,route);
}
static void simple_tls_register(){
char route[256];
LinphoneCore* lc;
......@@ -193,6 +197,7 @@ static void authenticated_register_with_no_initial_credentials(){
register_with_refresh(lc,FALSE,auth_domain,NULL);
CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,1);
}
static void auth_info_requested2(LinphoneCore *lc, const char *realm, const char *username) {
stats* counters;
ms_message("Auth info requested for user id [%s] at realm [%s]\n"
......@@ -294,48 +299,28 @@ static void io_recv_error(){
linphone_core_destroy(lc);
}
int register_test_suite () {
CU_pSuite pSuite = CU_add_suite("Register", NULL, NULL);
if (NULL == CU_add_test(pSuite, "simple_register", simple_register)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "tcp register tester", simple_tcp_register)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "tls register tester", simple_tls_register)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "simple_authenticated_register", simple_authenticated_register)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "register with digest auth tester without initial credentials", authenticated_register_with_no_initial_credentials)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "authenticated_register_with_late_credentials", authenticated_register_with_late_credentials)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "simple_register_with_refresh", simple_register_with_refresh)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "simple_auth_register_with_refresh", simple_auth_register_with_refresh)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "register_with_refresh_with_send_error", register_with_refresh_with_send_error)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "multi account", multiple_proxy)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "transport_change", transport_change)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "network_state_change", network_state_change)) {
return CU_get_error();
}
if (NULL == CU_add_test(pSuite, "io_recv_error_0", io_recv_error)) {
return CU_get_error();
}
test_t register_tests[] = {
{ "Simple register", simple_register },
{ "TCP register", simple_tcp_register },
{ "TLS register", simple_tls_register },
{ "Simple authenticated register", simple_authenticated_register },
{ "Digest auth without initial credentials", authenticated_register_with_no_initial_credentials },
{ "Authenticated register with late credentials", authenticated_register_with_late_credentials },
{ "Register with refresh", simple_register_with_refresh },
{ "Authenticated register with refresh", simple_auth_register_with_refresh },
{ "Register with refresh & send error", register_with_refresh_with_send_error },
{ "Multi account", multiple_proxy },
{ "Transport change", transport_change },
{ "Network state change", network_state_change },
{ "io_recv_error_0", io_recv_error }
};
test_suite_t register_test_suite = {
"Register",
NULL,
NULL,
sizeof(register_tests) / sizeof(register_tests[0]),
register_tests
};
return 0;
}
/*
belle-sip - SIP (RFC3261) library.
Copyright (C) 2010 Belledonne Communications SARL
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 3 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, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include "CUnit/Basic.h"
#include "linphonecore.h"
#include "private.h"
#include "liblinphone_tester.h"
static void core_init_test(void) {
LinphoneCoreVTable v_table;
memset (&v_table,0,sizeof(v_table));
LinphoneCore* lc = linphone_core_new(&v_table,NULL,NULL,NULL);
CU_ASSERT_PTR_NOT_NULL_FATAL(lc);
linphone_core_destroy(lc);
}
static void linphone_address_test(void) {
linphone_address_destroy(create_linphone_address(NULL));
}
test_t setup_tests[] = {
{ "Linphone Address", linphone_address_test },
{ "Linphone core init/uninit", core_init_test },
};
test_suite_t setup_test_suite = {
"Setup",
NULL,
NULL,
sizeof(setup_tests) / sizeof(setup_tests[0]),
setup_tests
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment