Add transport tests (tunnel only and tunnel + srtp)

parent b9c043bf
......@@ -13,7 +13,8 @@ common_SRC_FILES := \
flexisip_tester.c \
tester.c \
remote_provisioning_tester.c \
quality_reporting_tester.c
quality_reporting_tester.c \
transport_tester.c
common_C_INCLUDES += \
$(LOCAL_PATH) \
......
......@@ -105,6 +105,7 @@
<ClCompile Include="..\..\..\tester\setup_tester.c" />
<ClCompile Include="..\..\..\tester\stun_tester.c" />
<ClCompile Include="..\..\..\tester\tester.c" />
<ClCompile Include="..\..\..\tester\transport_tester.c" />
<ClCompile Include="linphone-tester-native.cpp">
<CompileAsWinRT>true</CompileAsWinRT>
</ClCompile>
......@@ -153,4 +154,4 @@
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsPhone\v$(TargetPlatformVersion)\Microsoft.Cpp.WindowsPhone.$(TargetPlatformVersion).targets" />
</Project>
\ No newline at end of file
</Project>
/*
buddy_status
Copyright (C) 2010 Belledonne Communications SARL
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
......@@ -73,7 +73,7 @@ static void new_subscription_requested (LinphoneCore *lc, LinphoneFriend *frien
* Registration state notification callback
*/
static void registration_state_changed(struct _LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState cstate, const char *message){
printf("New registration state %s for user id [%s] at proxy [%s]\n"
printf("New registration state %s for user id [%s] at proxy [%s]"
,linphone_registration_state_to_string(cstate)
,linphone_proxy_config_get_identity(cfg)
,linphone_proxy_config_get_addr(cfg));
......@@ -104,7 +104,7 @@ int main(int argc, char *argv[]){
#ifdef DEBUG
linphone_core_enable_logs(NULL); /*enable liblinphone logs.*/
#endif
/*
/*
Fill the LinphoneCoreVTable with application callbacks.
All are optional. Here we only use the both notify_presence_received and new_subscription_requested callbacks
in order to get notifications about friend status.
......
......@@ -55,6 +55,9 @@ static inline _LpConfig *config(LinphoneTunnel *tunnel){
void linphone_tunnel_destroy(LinphoneTunnel *tunnel){
delete tunnel->manager;
ms_list_free_with_data(tunnel->config_list, (void (*)(void *))linphone_tunnel_config_destroy);
ms_free(tunnel);
}
......@@ -100,12 +103,12 @@ static LinphoneTunnelConfig *linphone_tunnel_config_from_string(const char *str)
break;
case 3:
delay = atoi(pch);
break;
break;
default:
// Abort
pos = 0;
break;
}
++pos;
pch = strtok(NULL, ":");
......@@ -121,7 +124,7 @@ static LinphoneTunnelConfig *linphone_tunnel_config_from_string(const char *str)
if(pos == 4) {
linphone_tunnel_config_set_delay(tunnel_config, delay);
}
ms_free(dstr);
ms_free(dstr);
return tunnel_config;
}
......@@ -152,12 +155,12 @@ static void linphone_tunnel_save_config(LinphoneTunnel *tunnel) {
static void linphone_tunnel_add_server_intern(LinphoneTunnel *tunnel, LinphoneTunnelConfig *tunnel_config) {
if(linphone_tunnel_config_get_remote_udp_mirror_port(tunnel_config) == -1) {
bcTunnel(tunnel)->addServer(linphone_tunnel_config_get_host(tunnel_config),
bcTunnel(tunnel)->addServer(linphone_tunnel_config_get_host(tunnel_config),
linphone_tunnel_config_get_port(tunnel_config));
} else {
bcTunnel(tunnel)->addServer(linphone_tunnel_config_get_host(tunnel_config),
linphone_tunnel_config_get_port(tunnel_config),
linphone_tunnel_config_get_remote_udp_mirror_port(tunnel_config),
bcTunnel(tunnel)->addServer(linphone_tunnel_config_get_host(tunnel_config),
linphone_tunnel_config_get_port(tunnel_config),
linphone_tunnel_config_get_remote_udp_mirror_port(tunnel_config),
linphone_tunnel_config_get_delay(tunnel_config));
}
tunnel->config_list = ms_list_append(tunnel->config_list, tunnel_config);
......@@ -209,10 +212,10 @@ void linphone_tunnel_remove_server(LinphoneTunnel *tunnel, LinphoneTunnelConfig
MSList *elem = ms_list_find(tunnel->config_list, tunnel_config);
if(elem != NULL) {
tunnel->config_list = ms_list_remove(tunnel->config_list, tunnel_config);
linphone_tunnel_config_destroy(tunnel_config);
linphone_tunnel_config_destroy(tunnel_config);
linphone_tunnel_refresh_config(tunnel);
linphone_tunnel_save_config(tunnel);
}
}
}
const MSList *linphone_tunnel_get_servers(LinphoneTunnel *tunnel){
......@@ -221,11 +224,11 @@ const MSList *linphone_tunnel_get_servers(LinphoneTunnel *tunnel){
void linphone_tunnel_clean_servers(LinphoneTunnel *tunnel){
bcTunnel(tunnel)->cleanServers();
/* Free the list */
ms_list_for_each(tunnel->config_list, (void (*)(void *))linphone_tunnel_config_destroy);
tunnel->config_list = ms_list_free(tunnel->config_list);
ms_list_free_with_data(tunnel->config_list, (void (*)(void *))linphone_tunnel_config_destroy);
tunnel->config_list = NULL;
linphone_tunnel_save_config(tunnel);
}
......
......@@ -1563,7 +1563,11 @@ void linphone_call_init_audio_stream(LinphoneCall *call){
if (lc->rtptf){
RtpTransport *artp=lc->rtptf->audio_rtp_func(lc->rtptf->audio_rtp_func_data, call->media_ports[0].rtp_port);
RtpTransport *artcp=lc->rtptf->audio_rtcp_func(lc->rtptf->audio_rtcp_func_data, call->media_ports[0].rtcp_port);
rtp_session_set_transports(audiostream->ms.sessions.rtp_session,artp,artcp);
RtpTransport *meta_rtp;
RtpTransport *meta_rtcp;
meta_rtp_transport_new(&meta_rtp,TRUE,artp, 0);
meta_rtp_transport_new(&meta_rtcp,FALSE,artcp, 0);
rtp_session_set_transports(audiostream->ms.sessions.rtp_session,meta_rtp,meta_rtcp);
}
call->audiostream_app_evq = ortp_ev_queue_new();
......
mediastreamer2 @ 4d43eeed
Subproject commit a8c09957733d1504744ac5388ecedddd9f5575ac
Subproject commit 4d43eeedbcf715182325c27438106735593f4e8e
oRTP @ 509e8663
Subproject commit 7ad100e9f3b28e6a37f5472f70c49500ec15f49e
Subproject commit 509e86632b4a9544ff5d7ce57b66c89e3e384933
......@@ -21,7 +21,8 @@ liblinphonetester_la_SOURCES = tester.c \
flexisip_tester.c \
stun_tester.c \
remote_provisioning_tester.c \
quality_reporting_tester.c
quality_reporting_tester.c \
transport_tester.c
liblinphonetester_la_LDFLAGS= -no-undefined
liblinphonetester_la_LIBADD= ../coreapi/liblinphone.la $(CUNIT_LIBS)
......
......@@ -266,7 +266,7 @@ bool_t call(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr){
return call_with_params(caller_mgr,callee_mgr,NULL,NULL);
}
static void end_call(LinphoneCoreManager *m1, LinphoneCoreManager *m2){
void end_call(LinphoneCoreManager *m1, LinphoneCoreManager *m2){
linphone_core_terminate_all_calls(m1->lc);
CU_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m1->stat.number_of_LinphoneCallEnd,1));
CU_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m2->stat.number_of_LinphoneCallEnd,1));
......
......@@ -58,6 +58,7 @@ extern test_suite_t flexisip_test_suite;
extern test_suite_t stun_test_suite;
extern test_suite_t remote_provisioning_test_suite;
extern test_suite_t quality_reporting_test_suite;
extern test_suite_t transport_test_suite;
extern int liblinphone_tester_nb_test_suites(void);
......@@ -239,6 +240,7 @@ bool_t call_with_params(LinphoneCoreManager* caller_mgr
, const LinphoneCallParams *caller_params
, const LinphoneCallParams *callee_params);
bool_t call(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr);
void end_call(LinphoneCoreManager *m1, LinphoneCoreManager *m2);
stats * get_stats(LinphoneCore *lc);
LinphoneCoreManager *get_manager(LinphoneCore *lc);
const char *liblinphone_tester_get_subscribe_content(void);
......
......@@ -370,6 +370,7 @@ void liblinphone_tester_init(void) {
add_test_suite(&flexisip_test_suite);
add_test_suite(&remote_provisioning_test_suite);
add_test_suite(&quality_reporting_test_suite);
add_test_suite(&transport_test_suite);
}
void liblinphone_tester_uninit(void) {
......
/*
liblinphone_tester - liblinphone test suite
Copyright (C) 2013 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 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, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "CUnit/Basic.h"
#include "linphonecore.h"
#include "lpconfig.h"
#include "private.h"
#include "liblinphone_tester.h"
static void call_with_transport_base(bool_t use_tunnel, LinphoneMediaEncryption encryption) {
if (linphone_core_tunnel_available()){
/*enabling the tunnel cause another REGISTER to be made*/
int pauline_register_count_expected = use_tunnel ? 2 : 1;
char *tmp_char;
LinphoneCoreManager *pauline = linphone_core_manager_new( "pauline_rc");
LinphoneCoreManager *marie = linphone_core_manager_new( "marie_rc");
LinphoneCall *pauline_call;
/*tunnel works only in UDP mode*/
LinphoneProxyConfig *proxy = linphone_core_get_default_proxy_config(pauline->lc);
LinphoneAddress *server_addr = linphone_address_new(linphone_proxy_config_get_server_addr(proxy));
LinphoneAddress *route = linphone_address_new(linphone_proxy_config_get_route(proxy));
linphone_proxy_config_edit(proxy);
linphone_address_set_transport(server_addr, LinphoneTransportUdp);
linphone_address_set_transport(route, LinphoneTransportUdp);
tmp_char = linphone_address_as_string(server_addr);
linphone_proxy_config_set_server_addr(proxy, tmp_char);
ms_free(tmp_char);
tmp_char = linphone_address_as_string(route);
linphone_proxy_config_set_route(proxy, tmp_char);
ms_free(tmp_char);
linphone_core_set_media_encryption(pauline->lc, encryption);
if (use_tunnel){
LinphoneTunnel *tunnel = linphone_core_get_tunnel(pauline->lc);
LinphoneTunnelConfig *config = linphone_tunnel_config_new();
linphone_tunnel_enable(tunnel, TRUE);
linphone_tunnel_config_set_host(config, "tunnel.linphone.org");
linphone_tunnel_config_set_port(config, 443);
linphone_tunnel_add_server(tunnel, config);
}
linphone_proxy_config_done(proxy);
CU_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,pauline_register_count_expected));
CU_ASSERT_TRUE(wait_for(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk, 1));
CU_ASSERT_TRUE(call(pauline,marie));
pauline_call=linphone_core_get_current_call(pauline->lc);
CU_ASSERT_PTR_NOT_NULL(pauline_call);
if (pauline_call!=NULL){
CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(linphone_call_get_current_params(pauline_call)),
encryption);
}
end_call(pauline,marie);
linphone_address_destroy(server_addr);
linphone_address_destroy(route);
linphone_core_manager_destroy(pauline);
linphone_core_manager_destroy(marie);
}else{
ms_warning("Could not test %s because tunnel functionality is not available",__FUNCTION__);
}
}
static void call_with_tunnel(void) {
call_with_transport_base(TRUE,LinphoneMediaEncryptionNone);
}
static void call_with_tunnel_srtp(void) {
call_with_transport_base(TRUE,LinphoneMediaEncryptionSRTP);
}
test_t transport_tests[] = {
{ "Tunnel only", call_with_tunnel },
{ "Tunnel with SRTP", call_with_tunnel_srtp },
};
test_suite_t transport_test_suite = {
"Transport",
NULL,
NULL,
sizeof(transport_tests) / sizeof(transport_tests[0]),
transport_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