diff --git a/configure.ac b/configure.ac
index a8114f18b..4e586d32d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -49,6 +49,8 @@ AM_PROG_CC_C_O
AC_CHECK_PROGS(MD5SUM,[md5sum md5])
AM_CONDITIONAL(HAVE_MD5SUM,test -n $MD5SUM)
+ios_found=no
+
case $target in
*mingw32ce)
CFLAGS="$CFLAGS -D_WIN32_WCE -DORTP_STATIC -D_WIN32_WINNT=0x0501"
@@ -68,7 +70,9 @@ case $target in
;;
armv6-apple-darwin|armv7-apple-darwin|i386-apple-darwin|armv7s-apple-darwin)
CFLAGS="$CFLAGS -DTARGET_OS_IPHONE=1 "
+ LIBS="$LIBS -framework CoreFoundation -framework AudioToolbox -framework CoreAudio -framework Foundation -framework QuartzCore -framework OpenGLES -framework UIKit -framework AVFoundation"
ios_found=yes
+ AC_PROG_OBJC
;;
x86_64-apple-darwin*|i686-apple-darwin*)
MSPLUGINS_CFLAGS=""
@@ -79,8 +83,7 @@ case $target in
esac
-
-
+AM_CONDITIONAL(BUILD_IOS, test x$ios_found = xyes)
AC_SUBST(ACLOCAL_MACOS_FLAGS)
AC_SUBST(CONSOLE_FLAGS)
diff --git a/tester/Makefile.am b/tester/Makefile.am
index 5c1f72239..b59c1e077 100644
--- a/tester/Makefile.am
+++ b/tester/Makefile.am
@@ -18,18 +18,24 @@ liblinphone_tester_SOURCES= liblinphone_tester.c liblinphone_tester.h\
remote_provisioning_tester.c
-#liblinphone_tester_CFLAGS=$(CUNIT_CFLAGS)
-
-#liblinphone_tester_LDFLAGS=$(CUNIT_LIBS)
-
-
AM_CPPFLAGS=-I$(top_srcdir)/include -I$(top_srcdir)/coreapi
LDADD=$(top_builddir)/coreapi/liblinphone.la $(BELLESIP_LIBS) $(LIBXML2_LIBS)
-AM_LDFLAGS=$(CUNIT_LIBS)
+AM_LDFLAGS = $(CUNIT_LIBS)
+
+AM_CFLAGS = $(STRICT_OPTIONS) -DIN_LINPHONE $(ORTP_CFLAGS) $(MEDIASTREAMER_CFLAGS) $(CUNIT_CFLAGS) $(BELLESIP_CFLAGS) $(LIBXML2_CFLAGS)
+AM_OBJCFLAGS = $(AM_CFLAGS) -DNO_XCODE
+
+liblinphone_tester_LDFLAGS=
+
+if BUILD_IOS
+liblinphone_tester_SOURCES += liblinphonetester_ios.m liblinphonetester_ios.h
+liblinphone_tester_LDFLAGS += -framework CoreFoundation -framework AudioToolbox -framework CoreAudio -framework Foundation -framework QuartzCore -framework OpenGLES -framework UIKit -framework AVFoundation
+# we have to force the linker to use c-style link when mixing Obj-C and C sources, otherwise the Obj-C linker is used, which gives strange errors (UTF8?)
+liblinphone_tester_LINK = $(LINK)
+endif
-AM_CFLAGS=$(STRICT_OPTIONS) -DIN_LINPHONE $(ORTP_CFLAGS) $(MEDIASTREAMER_CFLAGS) $(CUNIT_CFLAGS) $(BELLESIP_CFLAGS) $(LIBXML2_CFLAGS)
test: liblinphone_tester
./liblinphone_tester --config $(abs_srcdir)
diff --git a/tester/liblinphone_tester.c b/tester/liblinphone_tester.c
index 2cb84fca0..0f55ea131 100644
--- a/tester/liblinphone_tester.c
+++ b/tester/liblinphone_tester.c
@@ -1,20 +1,20 @@
/*
- liblinphone_tester - liblinphone test suite
- Copyright (C) 2013 Belledonne Communications SARL
+ 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 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.
+ 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 .
-*/
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
#include
#include "CUnit/Basic.h"
@@ -35,6 +35,9 @@ static int nb_test_suites = 0;
static unsigned char curses = 0;
#endif
+#if TARGET_OS_IPHONE
+#include "liblinphonetester_ios.h"
+#endif
const char* test_domain="sipopen.example.org";
@@ -45,13 +48,11 @@ const char* test_route="sip2.linphone.org";
#if WINAPI_FAMILY_PHONE_APP
const char *liblinphone_tester_file_prefix="Assets";
-#else
-#ifdef __QNX__
+#elif defined(__QNX__)
const char *liblinphone_tester_file_prefix="./app/native/assets/";
#else
const char *liblinphone_tester_file_prefix=".";
#endif
-#endif
const char *userhostsfile = "tester_hosts";
@@ -78,8 +79,8 @@ LinphoneAddress * create_linphone_address(const char * domain) {
static void auth_info_requested(LinphoneCore *lc, const char *realm, const char *username, const char *domain) {
stats* counters;
ms_message("Auth info requested for user id [%s] at realm [%s]\n"
- ,username
- ,realm);
+ ,username
+ ,realm);
counters = get_stats(lc);
counters->number_of_auth_info_requested++;
}
@@ -146,9 +147,9 @@ bool_t wait_for_list(MSList* lcs,int* counter,int value,int timeout_ms) {
int retry=0;
MSList* iterator;
while ((counter==NULL || *counternext) {
- linphone_core_iterate((LinphoneCore*)(iterator->data));
- }
+ for (iterator=lcs;iterator!=NULL;iterator=iterator->next) {
+ linphone_core_iterate((LinphoneCore*)(iterator->data));
+ }
ms_usleep(100000);
}
if(counter && *counternext) {
- linphone_core_enable_payload_type(lc,(PayloadType*)codecs_it->data,0);
+ linphone_core_enable_payload_type(lc,(PayloadType*)codecs_it->data,0);
}
if((pt = linphone_core_find_payload_type(lc,type,rate,1))) {
linphone_core_enable_payload_type(lc,pt, enable);
@@ -202,7 +203,7 @@ LinphoneCoreManager* linphone_core_manager_new2(const char* rc_file, int check_f
mgr->v_table.notify_received=linphone_notify_received;
mgr->v_table.publish_state_changed=linphone_publish_state_changed;
mgr->v_table.configuring_status=linphone_configuration_status;
-
+
reset_counters(&mgr->stat);
if (rc_file) rc_path = ms_strdup_printf("rcfiles/%s", rc_file);
mgr->lc=configure_lc_from(&mgr->v_table, liblinphone_tester_file_prefix, rc_path, mgr);
@@ -413,12 +414,12 @@ void linphone_android_log_handler(int prio, const char *fmt, va_list args) {
static void linphone_android_ortp_log_handler(OrtpLogLevel lev, const char *fmt, va_list args) {
int prio;
switch(lev){
- case ORTP_DEBUG: prio = ANDROID_LOG_DEBUG; break;
- case ORTP_MESSAGE: prio = ANDROID_LOG_INFO; break;
- case ORTP_WARNING: prio = ANDROID_LOG_WARN; break;
- case ORTP_ERROR: prio = ANDROID_LOG_ERROR; break;
- case ORTP_FATAL: prio = ANDROID_LOG_FATAL; break;
- default: prio = ANDROID_LOG_DEFAULT; break;
+ case ORTP_DEBUG: prio = ANDROID_LOG_DEBUG; break;
+ case ORTP_MESSAGE: prio = ANDROID_LOG_INFO; break;
+ case ORTP_WARNING: prio = ANDROID_LOG_WARN; break;
+ case ORTP_ERROR: prio = ANDROID_LOG_ERROR; break;
+ case ORTP_FATAL: prio = ANDROID_LOG_FATAL; break;
+ default: prio = ANDROID_LOG_DEFAULT; break;
}
linphone_android_log_handler(prio, fmt, args);
}
@@ -430,6 +431,7 @@ static void liblinphone_tester_qnx_log_handler(OrtpLogLevel lev, const char *fmt
}
#endif /* __QNX__ */
+
void helper(const char *name) {
fprintf(stderr,"%s \t--help\n"
"\t\t\t--verbose\n"
@@ -449,13 +451,21 @@ void helper(const char *name) {
}
#define CHECK_ARG(argument, index, argc) \
- if(index >= argc) { \
- fprintf(stderr, "Missing argument for \"%s\"\n", argument); \
- return -1; \
- } \
+if(index >= argc) { \
+fprintf(stderr, "Missing argument for \"%s\"\n", argument); \
+return -1; \
+} \
#ifndef WINAPI_FAMILY_PHONE_APP
-int main (int argc, char *argv[]) {
+
+
+#if TARGET_OS_IPHONE
+int ios_tester_main(int argc, char * argv[])
+#else
+int main (int argc, char *argv[])
+#endif
+
+{
int i,j;
int ret;
const char *suite_name=NULL;
@@ -465,6 +475,8 @@ int main (int argc, char *argv[]) {
linphone_core_set_log_handler(linphone_android_ortp_log_handler);
#elif defined(__QNX__)
linphone_core_set_log_handler(liblinphone_tester_qnx_log_handler);
+#elif TARGET_OS_IPHONE
+ linphone_core_set_log_handler(liblinphone_tester_ios_log_handler);
#else
linphone_core_set_log_file(NULL);
#endif
diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h
index edf51e1fb..1f8640063 100644
--- a/tester/liblinphone_tester.h
+++ b/tester/liblinphone_tester.h
@@ -223,5 +223,6 @@ const char *liblinphone_tester_get_notify_content(void);
void liblinphone_tester_chat_message_state_change(LinphoneChatMessage* msg,LinphoneChatMessageState state,void* ud);
void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreManager* callee);
+
#endif /* LIBLINPHONE_TESTER_H_ */
diff --git a/tester/liblinphonetester_ios.h b/tester/liblinphonetester_ios.h
new file mode 100644
index 000000000..a3b6177c3
--- /dev/null
+++ b/tester/liblinphonetester_ios.h
@@ -0,0 +1,24 @@
+/*
+ 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 .
+ */
+
+
+#include "ortp/ortp.h"
+
+int apple_start_tests(int argc, char* argv[]);
+
+void liblinphone_tester_ios_log_handler(OrtpLogLevel level, const char* fmt, va_list args);
\ No newline at end of file
diff --git a/tester/liblinphonetester_ios.m b/tester/liblinphonetester_ios.m
new file mode 100644
index 000000000..0d4e7e37f
--- /dev/null
+++ b/tester/liblinphonetester_ios.m
@@ -0,0 +1,52 @@
+/*
+ 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 .
+ */
+
+#include "liblinphonetester_ios.h"
+
+#include
+#import
+#import
+
+extern int ios_tester_main(int argc, char * argv[]);
+
+int g_argc;
+char** g_argv;
+
+static void* apple_main(void* data) {
+ ios_tester_main(g_argc,g_argv);
+ return NULL;
+}
+
+int apple_start_tests(int argc, char* argv[])
+{
+ pthread_t main_thread;
+ g_argc=argc;
+ g_argv=argv;
+ return (int)pthread_create(&main_thread,NULL,apple_main,NULL);
+}
+
+void liblinphone_tester_ios_log_handler(OrtpLogLevel level, const char* fmt, va_list args)
+{
+ NSLogv([NSString stringWithUTF8String:fmt], args);
+}
+
+#ifdef NO_XCODE /* when compiling under xcode the main is elsewhere */
+int main( int argc, char* argv[]){
+ return ios_tester_main(argc, argv);
+}
+#endif
\ No newline at end of file