diff --git a/coreapi/chat.c b/coreapi/chat.c index 02dad2da0..645b0683d 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -389,7 +389,7 @@ void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatMessage } } else { SalOp *op = NULL; - LinphoneCall *call; + LinphoneCall *call=NULL; char *content_type; const char *identity = NULL; // add to transient list @@ -466,6 +466,16 @@ void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatMessage } linphone_chat_room_delete_composing_idle_timer(cr); linphone_chat_room_delete_composing_refresh_timer(cr); + + if (call && call->op == op) { + /*In this case, chat delivery status is not notified, so unrefing chat message right now*/ + /*Might be better fixed by delivering status, but too costly for now*/ + msg->chat_room->transient_messages = ms_list_remove(msg->chat_room->transient_messages, msg); + linphone_chat_message_unref(msg); + linphone_chat_message_unref(msg); + return; + } + } // if operation failed, we should not change message state diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 78c119d83..1893f705e 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -626,7 +626,7 @@ static void transfer_already_assigned_payload_types(SalMediaDescription *old, Sa static const char *linphone_call_get_bind_ip_for_stream(LinphoneCall *call, int stream_index){ const char *bind_ip = lp_config_get_string(call->core->config,"rtp","bind_address", - linphone_core_ipv6_enabled(call->core) ? "::0" : "0.0.0.0"); + call->af == AF_INET6 ? "::0" : "0.0.0.0"); if (stream_index<2 && call->media_ports[stream_index].multicast_ip[0]!='\0'){ if (call->dir==LinphoneCallOutgoing){ diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 001a83d09..e6cbdc451 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -7505,6 +7505,9 @@ void linphone_core_set_chat_database_path(LinphoneCore *lc, const char *path){ linphone_core_message_storage_init(lc); } } +const char* linphone_core_get_chat_database_path(const LinphoneCore *lc) { + return lc->chat_db_file; +} void linphone_core_enable_sdp_200_ack(LinphoneCore *lc, bool_t enable) { lp_config_set_int(lc->config,"sip","sdp_200_ack",lc->sip_conf.sdp_200_ack=enable); } diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 9b100e572..eafc3512d 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -1301,7 +1301,13 @@ typedef void (*LinphoneChatMessageCbsFileTransferProgressIndicationCb)(LinphoneC LINPHONE_PUBLIC void linphone_core_set_chat_database_path(LinphoneCore *lc, const char *path); - +/** + * Get path to the database file used for storing chat messages. + * @param lc the linphone core + * @return file path or NULL if not exist + **/ + +LINPHONE_PUBLIC const char *linphone_core_get_chat_database_path(const LinphoneCore *lc); /** * Get a chat room whose peer is the supplied address. If it does not exist yet, it will be created. * No reference is transfered to the application. The LinphoneCore keeps a reference on the chat room. diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index a55cdd634..161a9f322 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -83,7 +83,8 @@ int _linphone_sqlite3_open(const char *db_file, sqlite3 **db) { /*since we plug our vfs into sqlite, we convert to UTF-8. * On Windows, the filename has to be converted back to windows native charset.*/ char *utf8_filename = utf8_convert(db_file); - ret = sqlite3_open_v2(utf8_filename, db, flags, LINPHONE_SQLITE3_VFS); + //ret = sqlite3_open_v2(utf8_filename, db, flags, LINPHONE_SQLITE3_VFS); + ret = sqlite3_open_v2(utf8_filename, db, flags, NULL); // Do not use VFS until all issues are resolved ms_free(utf8_filename); if (ret != SQLITE_OK) return ret; diff --git a/coreapi/sqlite3_bctbx_vfs.c b/coreapi/sqlite3_bctbx_vfs.c index 316c1db8c..d9abfad10 100755 --- a/coreapi/sqlite3_bctbx_vfs.c +++ b/coreapi/sqlite3_bctbx_vfs.c @@ -61,17 +61,17 @@ static int sqlite3bctbx_Close(sqlite3_file *p){ /** - * Read count bytes from the open file given by p, starting at offset and puts them in + * Read count bytes from the open file given by p, starting at offset and puts them in * the buffer pointed by buf. * Calls bctbx_file_read. - * + * * @param p sqlite3_file file handle pointer. * @param buf buffer to write the read bytes to. * @param count number of bytes to read * @param offset file offset where to start reading - * @return SQLITE_OK if read bytes equals count, + * @return SQLITE_OK if read bytes equals count, * SQLITE_IOERR_SHORT_READ if the number of bytes read is inferior to count - * SQLITE_IOERR_READ if an error occurred. + * SQLITE_IOERR_READ if an error occurred. */ static int sqlite3bctbx_Read(sqlite3_file *p, void *buf, int count, sqlite_int64 offset){ int ret; @@ -83,10 +83,10 @@ static int sqlite3bctbx_Read(sqlite3_file *p, void *buf, int count, sqlite_int64 } else if( ret >= 0 ){ /*fill in unread portion of buffer, as requested by sqlite3 documentation*/ - memset(((uint8_t*)buf) + ret, 0, count-ret); + memset(((uint8_t*)buf) + ret, 0, count-ret); return SQLITE_IOERR_SHORT_READ; }else { - + return SQLITE_IOERR_READ; } } @@ -114,14 +114,14 @@ static int sqlite3bctbx_Write(sqlite3_file *p, const void *buf, int count, sqlit } return SQLITE_IOERR_WRITE; } - + /** * Saves the file size associated with the file handle p into the argument pSize. * @param p sqlite3_file file handle pointer. - * @return SQLITE_OK if read bytes equals count, - * SQLITE_IOERR_FSTAT if the file size returned is negative - * SQLITE_ERROR if an error occurred. + * @return SQLITE_OK if read bytes equals count, + * SQLITE_IOERR_FSTAT if the file size returned is negative + * SQLITE_ERROR if an error occurred. */ static int sqlite3bctbx_FileSize(sqlite3_file *p, sqlite_int64 *pSize){ @@ -135,7 +135,7 @@ static int sqlite3bctbx_FileSize(sqlite3_file *p, sqlite_int64 *pSize){ if (pSize){ *pSize = rc; return SQLITE_OK; - } + } } return SQLITE_ERROR; @@ -144,7 +144,7 @@ static int sqlite3bctbx_FileSize(sqlite3_file *p, sqlite_int64 *pSize){ /************************ PLACE HOLDER FUNCTIONS ***********************/ -/** These functions were implemented to please the SQLite VFS +/** These functions were implemented to please the SQLite VFS implementation. Some of them are just stubs, some do a very limited job. */ @@ -187,7 +187,7 @@ static int sqlite3bctbx_nolockCheckReservedLock(sqlite3_file *pUnused, int *pRes } /** - * The lock file mechanism is not used with this VFS : locking the file + * The lock file mechanism is not used with this VFS : locking the file * is always OK. * @param pUnused sqlite3_file file handle pointer. * @param unused unused @@ -290,7 +290,7 @@ static char* ConvertFromUtf8Filename(const char* fName){ * @param pVfs sqlite3_vfs VFS pointer. * @param fName filename * @param p file handle pointer - * @param flags db file access flags + * @param flags db file access flags * @param pOutFlags flags used by SQLite * @return SQLITE_CANTOPEN on error, SQLITE_OK on success. */ @@ -302,7 +302,7 @@ static int sqlite3bctbx_Open(sqlite3_vfs *pVfs, const char *fName, sqlite3_file sqlite3bctbx_Write, /* xWrite */ 0, /*xTruncate*/ sqlite3bctbx_Sync, - sqlite3bctbx_FileSize, + sqlite3bctbx_FileSize, sqlite3bctbx_nolockLock, sqlite3bctbx_nolockUnlock, sqlite3bctbx_nolockCheckReservedLock, @@ -374,6 +374,46 @@ sqlite3_vfs *sqlite3_bctbx_vfs_create(void){ return &bctbx_vfs; } +/*static int sqlite3bctbx_winFullPathname( + sqlite3_vfs *pVfs, // Pointer to vfs object + const char *zRelative, // Possibly relative input path + int nFull, // Size of output buffer in bytes + char *zFull){ + //LPWSTR zTemp; + //DWORD nByte; + // If this path name begins with "/X:", where "X" is any alphabetic + // character, discard the initial "/" from the pathname. + // + //if (zRelative[0] == '/' && sqlite3Isalpha(zRelative[1]) && zRelative[2] == ':'){ + // zRelative++; + //} + + nByte = GetFullPathNameW((LPCWSTR)zRelative, 0, 0, 0); + if (nByte == 0){ + return SQLITE_CANTOPEN_FULLPATH; + } + nByte += 3; + zTemp = bctbx_malloc(nByte*sizeof(zTemp[0])); + memset(zTemp, 0, nByte*sizeof(zTemp[0])); + if (zTemp == 0){ + return SQLITE_IOERR_NOMEM; + } + nByte = GetFullPathNameW((LPCWSTR)zRelative, nByte, zTemp, 0); + if (nByte == 0){ + bctbx_free(zTemp); + return SQLITE_CANTOPEN_FULLPATH; + } + if (zTemp){ + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zTemp); + bctbx_free(zTemp); + return SQLITE_OK; + } + else{ + return SQLITE_IOERR_NOMEM; + } + sqlite3_snprintf(MIN(nFull, pVfs->mxPathname), zFull, "%s", zRelative); + return SQLITE_OK; +}*/ @@ -395,10 +435,10 @@ void sqlite3_bctbx_vfs_register( int makeDefault){ pVfsToUse->xGetLastError = pDefault->xGetLastError; /* Not implemented by sqlite3 :place holder */ /*Functions below should not be a problem sincve we are declaring ourselves in version 1 */ - - /* used in version 2 + + /* used in version 2 xCurrentTimeInt64;*/ - /* used in version 3 + /* used in version 3 xGetSystemCall xSetSystemCall xNextSystemCall*/ diff --git a/tester/call_single_tester.c b/tester/call_single_tester.c index b56e94d43..97cb65a32 100644 --- a/tester/call_single_tester.c +++ b/tester/call_single_tester.c @@ -4794,6 +4794,20 @@ static void v6_call_over_nat_64(void){ }else ms_warning("Test skipped, no ipv6 nat64 available"); } +static void call_with_ice_in_ipv4_with_v6_enabled(void) { + if (liblinphone_tester_ipv4_available() && liblinphone_tester_ipv6_available()){ + bool_t liblinphonetester_ipv6_save=liblinphonetester_ipv6; /*this test nee v6*/ + LinphoneCoreManager* marie = linphone_core_manager_new("marie_v4proxy_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_v4proxy_rc"); + + liblinphonetester_ipv6=TRUE; + _call_with_ice_base(pauline,marie,TRUE,TRUE,TRUE,FALSE); + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + liblinphonetester_ipv6=liblinphonetester_ipv6_save; /*this test nee v6*/ + + } else ms_warning("Test skipped, need both ipv6 and v4 available"); +} test_t call_tests[] = { TEST_NO_TAG("Early declined call", early_declined_call), @@ -4810,6 +4824,7 @@ test_t call_tests[] = { TEST_NO_TAG("Call with timeouted bye", call_with_timeouted_bye), TEST_NO_TAG("Direct call over IPv6", direct_call_over_ipv6), TEST_NO_TAG("IPv6 call over NAT64", v6_call_over_nat_64), + TEST_NO_TAG("Call with ICE in IPv4 with IPv6 enabled", call_with_ice_in_ipv4_with_v6_enabled), TEST_NO_TAG("Outbound call with multiple proxy possible", call_outbound_with_multiple_proxy), TEST_NO_TAG("Audio call recording", audio_call_recording_test), #if 0 /* not yet activated because not implemented */ diff --git a/tester/flexisip/flexisip.conf b/tester/flexisip/flexisip.conf index 9aaceda2f..5ad6cb028 100644 --- a/tester/flexisip/flexisip.conf +++ b/tester/flexisip/flexisip.conf @@ -18,7 +18,7 @@ auto-respawn=true # List of white space separated host names pointing to this machine. # This is to prevent loops while routing SIP messages. # Default value: localhost -aliases=localhost sip2.linphone.org sipopen.example.org sip.example.org auth.example.org auth1.example.org auth2.example.org client.example.org +aliases=localhost sip2.linphone.org sipopen.example.org sip.example.org auth.example.org auth1.example.org auth2.example.org client.example.org sipv4.example.org sipv4-nat64.example.org # List of white space separated SIP uris where the proxy must listen.Wildcard # (*) can be used to mean 'all local ip addresses'. If 'transport' diff --git a/tester/message_tester.c b/tester/message_tester.c index f822600d4..fa6f8002f 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -781,6 +781,10 @@ static void lime_text_message(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); + if (!linphone_core_lime_available(marie->lc)) { + ms_warning("Lime not available, skiping"); + goto end; + } /* make sure lime is enabled */ linphone_core_enable_lime(marie->lc, 1); linphone_core_enable_lime(pauline->lc, 1); @@ -809,7 +813,7 @@ static void lime_text_message(void) { BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); /* TODO : check the msg arrived correctly deciphered */ - +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -821,6 +825,10 @@ static void lime_text_message_to_non_lime(void) { LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); + if (!linphone_core_lime_available(marie->lc)) { + ms_warning("Lime not available, skiping"); + goto end; + } /* make sure lime is enabled */ linphone_core_enable_lime(marie->lc, 0); linphone_core_enable_lime(pauline->lc, 1); @@ -842,10 +850,11 @@ static void lime_text_message_to_non_lime(void) { BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,0, int, "%d"); BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } -void lime_transfer_message_base(bool_t encrypt_file) { +void lime_transfer_message_base(bool_t encrypt_file,bool_t download_file_from_stored_msg) { FILE *ZIDCacheMarieFD, *ZIDCachePaulineFD; LinphoneCoreManager *marie, *pauline; LinphoneChatMessage *msg; @@ -856,6 +865,10 @@ void lime_transfer_message_base(bool_t encrypt_file) { marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new( "pauline_tcp_rc"); + if (!linphone_core_lime_available(marie->lc)) { + ms_warning("Lime not available, skiping"); + goto end; + } /* make sure lime is enabled */ linphone_core_enable_lime(marie->lc, 1); linphone_core_enable_lime(pauline->lc, 1); @@ -893,26 +906,49 @@ void lime_transfer_message_base(bool_t encrypt_file) { linphone_chat_room_send_chat_message(msg->chat_room, msg); BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { - cbs = linphone_chat_message_get_callbacks(marie->stat.last_received_chat_message); + LinphoneChatMessage *recv_msg; + const LinphoneContent* content; + if (download_file_from_stored_msg) { + LinphoneChatRoom *marie_room = linphone_core_get_chat_room(marie->lc, pauline->identity); + MSList * msgs = linphone_chat_room_get_history(marie_room,1); + BC_ASSERT_PTR_NOT_NULL(msgs); + if (!msgs) goto end; + recv_msg = (LinphoneChatMessage *)msgs->data; + ms_list_free(msgs); + } else { + recv_msg = marie->stat.last_received_chat_message; + } + cbs = linphone_chat_message_get_callbacks(recv_msg); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_received); - linphone_chat_message_download_file(marie->stat.last_received_chat_message); + content = linphone_chat_message_get_file_transfer_information(recv_msg); + if (!content) goto end; + if (encrypt_file) + BC_ASSERT_PTR_NOT_NULL(linphone_content_get_key(content)); + else + BC_ASSERT_PTR_NULL(linphone_content_get_key(content)); + linphone_chat_message_download_file(recv_msg); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); } - BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,2, int, "%d"); // file transfer BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1, int, "%d"); BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1, int, "%d"); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } static void lime_transfer_message(void) { - lime_transfer_message_base(TRUE); + lime_transfer_message_base(TRUE,FALSE); +} + +static void lime_transfer_message_from_history(void) { + lime_transfer_message_base(TRUE,TRUE); } static void lime_transfer_message_without_encryption(void) { - lime_transfer_message_base(FALSE); + lime_transfer_message_base(FALSE,FALSE); } static void printHex(char *title, uint8_t *data, size_t length) { @@ -1303,7 +1339,6 @@ end: ms_free(src_db); bc_free(tmp_db); } -#endif static void text_status_after_destroying_chat_room(void) { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); @@ -1788,7 +1823,7 @@ void file_transfer_with_http_proxy(void) { test_t message_tests[] = { TEST_NO_TAG("Text message", text_message), - TEST_ONE_TAG("Text message within call dialog", text_message_within_call_dialog, "LeaksMemory"), + TEST_NO_TAG("Text message within call dialog", text_message_within_call_dialog), TEST_NO_TAG("Text message with credentials from auth callback", text_message_with_credential_from_auth_callback), TEST_NO_TAG("Text message with privacy", text_message_with_privacy), TEST_NO_TAG("Text message compatibility mode", text_message_compatibility_mode), @@ -1807,18 +1842,16 @@ test_t message_tests[] = { TEST_NO_TAG("Info message", info_message), TEST_NO_TAG("Info message with body", info_message_with_body), TEST_NO_TAG("IsComposing notification", is_composing_notification), -#ifdef HAVE_LIME TEST_NO_TAG("Lime text message", lime_text_message), TEST_NO_TAG("Lime text message to non lime", lime_text_message_to_non_lime), TEST_NO_TAG("Lime transfer message", lime_transfer_message), + TEST_ONE_TAG("Lime transfer message from history", lime_transfer_message_from_history,"LeaksMemory"), TEST_NO_TAG("Lime transfer message without encryption", lime_transfer_message_without_encryption), TEST_NO_TAG("Lime unitary", lime_unit), -#endif /* HAVE_LIME */ #ifdef SQLITE_STORAGE_ENABLED TEST_NO_TAG("Database migration", database_migration), TEST_NO_TAG("History range", history_range), TEST_NO_TAG("History count", history_count), -#endif TEST_NO_TAG("Text status after destroying chat room", text_status_after_destroying_chat_room), TEST_NO_TAG("Transfer not sent if invalid url", file_transfer_not_sent_if_invalid_url), TEST_NO_TAG("Transfer not sent if host not found", file_transfer_not_sent_if_host_not_found), diff --git a/tester/rcfiles/marie_nat64_rc b/tester/rcfiles/marie_nat64_rc index a59516c72..58358b579 100644 --- a/tester/rcfiles/marie_nat64_rc +++ b/tester/rcfiles/marie_nat64_rc @@ -16,8 +16,8 @@ realm=sip.example.org [proxy_0] -reg_proxy=sipv4.example.org;transport=tcp -reg_route=sipv4.example.org;transport=tcp;lr +reg_proxy=sipv4-nat64.example.org;transport=tcp +reg_route=sipv4-nat64.example.org;transport=tcp;lr reg_identity="Super Marie" reg_expires=3600 reg_sendregister=1 diff --git a/tester/rcfiles/marie_v4proxy_rc b/tester/rcfiles/marie_v4proxy_rc new file mode 100644 index 000000000..a59516c72 --- /dev/null +++ b/tester/rcfiles/marie_v4proxy_rc @@ -0,0 +1,55 @@ +[sip] +sip_port=-1 +sip_tcp_port=-1 +sip_tls_port=-1 +default_proxy=0 +ping_with_options=0 +use_ipv6=1 +composing_idle_timeout=1 +store_ha1_passwd=0 #used for sipp + +[auth_info_0] +username=marie +userid=marie +passwd=secret +realm=sip.example.org + + +[proxy_0] +reg_proxy=sipv4.example.org;transport=tcp +reg_route=sipv4.example.org;transport=tcp;lr +reg_identity="Super Marie" +reg_expires=3600 +reg_sendregister=1 +publish=0 +dial_escape_plus=0 + +[friend_0] +url="Paupoche" +pol=accept +subscribe=0 + + +[rtp] +audio_rtp_port=18070-28000 +video_rtp_port=28070-38000 +text_rtp_port=39000-49000 + +[video] +display=0 +capture=0 +show_local=0 +size=qcif +enabled=0 +self_view=0 +automatically_initiate=0 +automatically_accept=0 +device=StaticImage: Static picture + +[sound] +echocancellation=0 #to not overload cpu in case of VG + +[net] +dns_srv_enabled=0 #no srv needed in general +stun_server=stun.linphone.org + diff --git a/tester/rcfiles/pauline_nat64_rc b/tester/rcfiles/pauline_nat64_rc index b2255c3c6..c90b6a363 100644 --- a/tester/rcfiles/pauline_nat64_rc +++ b/tester/rcfiles/pauline_nat64_rc @@ -15,8 +15,8 @@ realm=sip.example.org [proxy_0] -reg_proxy=sipv4.example.org;transport=tls -reg_route=sipv4.example.org;transport=tls +reg_proxy=sipv4-nat64.example.org;transport=tls +reg_route=sipv4-nat64.example.org;transport=tls reg_identity=sip:pauline@sip.example.org reg_expires=3600 reg_sendregister=1 diff --git a/tester/rcfiles/pauline_v4proxy_rc b/tester/rcfiles/pauline_v4proxy_rc new file mode 100644 index 000000000..b2255c3c6 --- /dev/null +++ b/tester/rcfiles/pauline_v4proxy_rc @@ -0,0 +1,51 @@ +[sip] +sip_port=-1 +sip_tcp_port=-1 +sip_tls_port=-1 +default_proxy=0 +ping_with_options=0 +use_ipv6=1 +composing_idle_timeout=1 + +[auth_info_0] +username=pauline +userid=pauline +passwd=secret +realm=sip.example.org + + +[proxy_0] +reg_proxy=sipv4.example.org;transport=tls +reg_route=sipv4.example.org;transport=tls +reg_identity=sip:pauline@sip.example.org +reg_expires=3600 +reg_sendregister=1 +publish=0 +dial_escape_plus=0 + +#[friend_0] +#url="Mariette" +#pol=accept +#subscribe=0 + +[rtp] +audio_rtp_port=18070-28000 +video_rtp_port=39072-49000 + +[video] +display=0 +capture=0 +show_local=0 +size=qcif +enabled=0 +self_view=0 +automatically_initiate=0 +automatically_accept=0 +device=StaticImage: Static picture + +[sound] +echocancellation=0 #to not overload cpu in case of VG + +[net] +dns_srv_enabled=0 #no srv needed in general +stun_server=stun.linphone.org diff --git a/tester/tester.c b/tester/tester.c index 342722b3a..ad0c9fe69 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -119,6 +119,7 @@ LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, c char *rootcapath = NULL; char *dnsuserhostspath = NULL; char *nowebcampath = NULL; + char *chatdb = NULL; if (path==NULL) path="."; @@ -151,6 +152,7 @@ LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, c linphone_core_set_ringback(lc, ringbackpath); linphone_core_set_root_ca(lc,rootcapath); } + chatdb = ms_strdup_printf("%s/messages-%p.db",bc_tester_get_writable_dir_prefix(),lc); linphone_core_enable_ipv6(lc, liblinphonetester_ipv6); @@ -160,11 +162,14 @@ LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, c linphone_core_set_static_picture(lc,nowebcampath); #endif + linphone_core_set_chat_database_path(lc, chatdb); + ms_free(ringpath); ms_free(ringbackpath); ms_free(nowebcampath); ms_free(rootcapath); ms_free(dnsuserhostspath); + ms_free(chatdb); if( filepath ) ms_free(filepath); @@ -425,7 +430,7 @@ void linphone_core_manager_uninit(LinphoneCoreManager *mgr) { if (mgr->stat.last_received_info_message) linphone_info_message_destroy(mgr->stat.last_received_info_message); if (mgr->lc){ const char *record_file=linphone_core_get_record_file(mgr->lc); - + const char *chatdb = linphone_core_get_chat_database_path(mgr->lc); if (!liblinphone_tester_keep_record_files && record_file){ if ((bc_get_number_of_failures()-mgr->number_of_cunit_error_at_creation)>0) { ms_message ("Test has failed, keeping recorded file [%s]",record_file); @@ -434,6 +439,7 @@ void linphone_core_manager_uninit(LinphoneCoreManager *mgr) { } } linphone_core_destroy(mgr->lc); + if (chatdb) unlink(chatdb); } if (mgr->identity) { linphone_address_destroy(mgr->identity); diff --git a/tester/tester_hosts b/tester/tester_hosts index 6416ddebc..686c42b88 100644 --- a/tester/tester_hosts +++ b/tester/tester_hosts @@ -1,4 +1,4 @@ -94.23.19.176 sip2.linphone.org sip.example.org sipopen.example.org auth.example.org auth1.example.org auth2.example.org altname.linphone.org sip.wildcard1.linphone.org altname.wildcard2.linphone.org +94.23.19.176 sip2.linphone.org sip.example.org sipopen.example.org auth.example.org auth1.example.org auth2.example.org altname.linphone.org sip.wildcard1.linphone.org altname.wildcard2.linphone.org sipv4.example.org 2001:41d0:2:14b0::1 sip2.linphone.org sip.example.org sipopen.example.org auth.example.org auth1.example.org auth2.example.org altname.linphone.org sip.wildcard1.linphone.org altname.wildcard2.linphone.org 188.165.46.90 tunnel.wildcard2.linphone.org -64:ff9b::94.23.19.176 sipv4.example.org +64:ff9b::94.23.19.176 sipv4-nat64.example.org