diff --git a/coreapi/CMakeLists.txt b/coreapi/CMakeLists.txt index 03600de80..85e13205c 100644 --- a/coreapi/CMakeLists.txt +++ b/coreapi/CMakeLists.txt @@ -84,6 +84,7 @@ set(LINPHONE_SOURCE_FILES_C linphonecore.c linphone_tunnel_config.c localplayer.c + logging.c lpc2xml.c lpconfig.c lsd.c diff --git a/coreapi/factory.c b/coreapi/factory.c index e316a93ba..5138534a4 100644 --- a/coreapi/factory.c +++ b/coreapi/factory.c @@ -167,6 +167,7 @@ static LinphoneCore *_linphone_factory_create_core ( LpConfig *config = lp_config_new_with_factory(config_path, factory_config_path); LinphoneCore *lc = _linphone_core_new_with_config(cbs, config, user_data, system_context, automatically_start); lp_config_unref(config); + bctbx_uninit_logger(); return lc; } diff --git a/coreapi/help/doc/doxygen/CMakeLists.txt b/coreapi/help/doc/doxygen/CMakeLists.txt index ef96a784f..91c62458d 100644 --- a/coreapi/help/doc/doxygen/CMakeLists.txt +++ b/coreapi/help/doc/doxygen/CMakeLists.txt @@ -39,7 +39,6 @@ if (ENABLE_DOC OR ENABLE_CXX_WRAPPER OR ENABLE_CSHARP_WRAPPER OR ENABLE_JAVA_WRA set(XML_DIR "${CMAKE_CURRENT_BINARY_DIR}/xml") set(LINPHONE_DOXYGEN_XML_DIR ${XML_DIR} PARENT_SCOPE) add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/index.html" "${XML_DIR}/index.xml" - COMMAND ${CMAKE_COMMAND} -E remove -f html/* xml/* COMMAND ${CMAKE_COMMAND} -E remove -f html/* xml/* COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile DEPENDS ${DOC_INPUT_FILES} diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 0b7e37f5b..f679aef9f 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -21,7 +21,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "linphone/core.h" #include "linphone/sipsetup.h" #include "linphone/lpconfig.h" +#include "linphone/logging.h" #include "private.h" +#include "logging-private.h" #include "quality_reporting.h" #include "lime.h" #include "conference_private.h" @@ -509,40 +511,17 @@ void linphone_core_set_log_file(FILE *file) { } void linphone_core_set_log_level(OrtpLogLevel loglevel) { - unsigned int mask = loglevel; - switch (loglevel) { - case ORTP_TRACE: - case ORTP_DEBUG: - mask |= ORTP_DEBUG; - BCTBX_NO_BREAK; - case ORTP_MESSAGE: - mask |= ORTP_MESSAGE; - BCTBX_NO_BREAK; - case ORTP_WARNING: - mask |= ORTP_WARNING; - BCTBX_NO_BREAK; - case ORTP_ERROR: - mask |= ORTP_ERROR; - BCTBX_NO_BREAK; - case ORTP_FATAL: - mask |= ORTP_FATAL; - break; - case ORTP_LOGLEV_END: - break; - } - linphone_core_set_log_level_mask(mask); + LinphoneLoggingService *log_service = linphone_logging_service_get(); + linphone_logging_service_set_log_level(log_service, _bctbx_log_level_to_linphone_log_level(loglevel)); } -void linphone_core_set_log_level_mask(unsigned int loglevel) { - bctbx_set_log_level_mask("bctbx", (int)loglevel); - bctbx_set_log_level_mask("ortp", (int)loglevel); - bctbx_set_log_level_mask("mediastreamer", (int)loglevel); - bctbx_set_log_level_mask("bzrtp", (int)loglevel); /*need something to set log level for all domains*/ - bctbx_set_log_level_mask("linphone", (int)loglevel); - sal_set_log_level((OrtpLogLevel)loglevel); +void linphone_core_set_log_level_mask(unsigned int mask) { + LinphoneLoggingService *log_service = linphone_logging_service_get(); + linphone_logging_service_set_log_level_mask(log_service, _bctbx_log_mask_to_linphone_log_mask(mask)); } unsigned int linphone_core_get_log_level_mask(void) { - return bctbx_get_log_level_mask(ORTP_LOG_DOMAIN); + LinphoneLoggingService *log_service = linphone_logging_service_get(); + return linphone_logging_service_get_log_level_mask(log_service); } static int _open_log_collection_file_with_idx(int idx) { struct stat statbuf; diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 707d229f3..a6b01bb58 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -4462,7 +4462,7 @@ extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_getPeerAddress(JNIE ,jlong ptr) { return (jlong) linphone_chat_room_get_peer_address((LinphoneChatRoom*)ptr); } -extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createLinphoneChatMessage(JNIEnv* env +extern "C" jobject Java_org_linphone_core_LinphoneChatRoomImpl_createLinphoneChatMessage(JNIEnv* env ,jobject thiz ,jlong ptr ,jstring jmessage) { @@ -4470,29 +4470,10 @@ extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createLinphoneChatM LinphoneChatMessage *chatMessage = linphone_chat_room_create_message((LinphoneChatRoom *)ptr, message); ReleaseStringUTFChars(env, jmessage, message); - return (jlong) chatMessage; + return getChatMessage(env, chatMessage); } -extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createLinphoneChatMessage2(JNIEnv* env - ,jobject thiz - ,jlong ptr - ,jstring jmessage - ,jstring jurl - ,jint state - ,jlong time - ,jboolean read - ,jboolean incoming) { - const char* message = GetStringUTFChars(env, jmessage); - const char* url = GetStringUTFChars(env, jurl); - LinphoneChatMessage *chatMessage = linphone_chat_room_create_message_2( - (LinphoneChatRoom *)ptr, message, url, (LinphoneChatMessageState)state, - (time_t)time, read, incoming); - ReleaseStringUTFChars(env, jmessage, message); - ReleaseStringUTFChars(env, jurl, url); - - return (jlong) chatMessage; -} extern "C" jint Java_org_linphone_core_LinphoneChatRoomImpl_getHistorySize (JNIEnv* env ,jobject thiz ,jlong ptr) { @@ -4527,7 +4508,7 @@ extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_markAsRead(JNIEnv* } -extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createFileTransferMessage(JNIEnv* env, jobject thiz, jlong ptr, jstring jname, jstring jtype, jstring jsubtype, jint data_size) { +extern "C" jobject Java_org_linphone_core_LinphoneChatRoomImpl_createFileTransferMessage(JNIEnv* env, jobject thiz, jlong ptr, jstring jname, jstring jtype, jstring jsubtype, jint data_size) { LinphoneCore *lc = linphone_chat_room_get_core((LinphoneChatRoom*) ptr); LinphoneContent * content = linphone_core_create_content(lc); LinphoneChatMessage *message = NULL; @@ -4548,7 +4529,7 @@ extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createFileTransferM linphone_content_unref(content); - return (jlong) message; + return getChatMessage(env, message); } extern "C" jboolean Java_org_linphone_core_LinphoneChatRoomImpl_islimeAvailable(JNIEnv *env, jobject thiz, jlong ptr) { @@ -4726,6 +4707,22 @@ extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_reSend(JNIEnv* e linphone_chat_message_resend_2((LinphoneChatMessage*)ptr); } +static jobject getMessageListener(JNIEnv *env, LinphoneChatMessage *msg){ + jobject listener = (jobject) linphone_chat_message_get_message_state_changed_cb_user_data(msg); + + if (listener == NULL) { + ms_error("message_state_changed() notification without listener"); + return NULL; + } + listener = env->NewLocalRef(listener); //promote the weak ref into a local ref*/ + if (listener == NULL){ + ms_error("message_state_changed() listener is no longer valid"); + linphone_chat_message_set_message_state_changed_cb_user_data(msg, NULL); + return NULL; + } + return listener; +} + static void message_state_changed(LinphoneChatMessage* msg, LinphoneChatMessageState state) { JNIEnv *env = 0; jint result = jvm->AttachCurrentThread(&env,NULL); @@ -4734,12 +4731,9 @@ static void message_state_changed(LinphoneChatMessage* msg, LinphoneChatMessageS return; } - jobject listener = (jobject) linphone_chat_message_get_message_state_changed_cb_user_data(msg); + jobject listener = getMessageListener(env, msg); + if (!listener) return; - if (listener == NULL) { - ms_error("message_state_changed() notification without listener"); - return ; - } jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageStateChanged","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneChatMessage$State;)V"); jobject jmessage = getChatMessage(env, msg); @@ -4749,14 +4743,7 @@ static void message_state_changed(LinphoneChatMessage* msg, LinphoneChatMessageS LinphoneCore *lc = linphone_chat_room_get_core(room); LinphoneJavaBindings *ljb = (LinphoneJavaBindings *)linphone_core_get_user_data(lc); env->CallVoidMethod(listener, method, jmessage, env->CallStaticObjectMethod(ljb->chatMessageStateClass, ljb->chatMessageStateFromIntId, (jint)state)); - - if (state == LinphoneChatMessageStateDisplayed) { - env->DeleteGlobalRef(listener); - linphone_chat_message_set_message_state_changed_cb_user_data(msg, NULL); - } - if (jmessage) { - env->DeleteLocalRef(jmessage); - } + env->DeleteLocalRef(listener); } static void file_transfer_progress_indication(LinphoneChatMessage *msg, const LinphoneContent* content, size_t offset, size_t total) { @@ -4767,7 +4754,8 @@ static void file_transfer_progress_indication(LinphoneChatMessage *msg, const Li return; } - jobject listener = (jobject) linphone_chat_message_get_message_state_changed_cb_user_data(msg); + jobject listener = getMessageListener(env, msg); + if (!listener) return; jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageFileTransferProgressChanged", "(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;II)V"); env->DeleteLocalRef(clazz); @@ -4790,7 +4778,8 @@ static void file_transfer_recv(LinphoneChatMessage *msg, const LinphoneContent* return; } - jobject listener = (jobject) linphone_chat_message_get_message_state_changed_cb_user_data(msg); + jobject listener = getMessageListener(env, msg); + if (!listener) return; jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageFileTransferReceived", "(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;Lorg/linphone/core/LinphoneBuffer;)V"); env->DeleteLocalRef(clazz); @@ -4819,7 +4808,8 @@ static LinphoneBuffer* file_transfer_send(LinphoneChatMessage *msg, const Linph return buffer; } - jobject listener = (jobject) linphone_chat_message_get_message_state_changed_cb_user_data(msg); + jobject listener = getMessageListener(env, msg); + if (!listener) return NULL; jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageFileTransferSent","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;IILorg/linphone/core/LinphoneBuffer;)V"); env->DeleteLocalRef(clazz); @@ -4840,12 +4830,15 @@ static LinphoneBuffer* file_transfer_send(LinphoneChatMessage *msg, const Linph return buffer; } +/* + * When the listener is set, we must take a global reference to the listener and the message, so that + * we are able to notify the state changes of the message, until it reaches its final state + */ extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_setListener(JNIEnv* env, jobject thiz, jlong ptr, jobject jlistener) { - jobject listener = env->NewGlobalRef(jlistener); LinphoneChatMessage *message = (LinphoneChatMessage *)ptr; LinphoneChatMessageCbs *cbs; - linphone_chat_message_set_message_state_changed_cb_user_data(message, listener); + linphone_chat_message_set_message_state_changed_cb_user_data(message, env->NewWeakGlobalRef(jlistener)); cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_cbs_set_msg_state_changed(cbs, message_state_changed); linphone_chat_message_cbs_set_file_transfer_progress_indication(cbs, file_transfer_progress_indication); @@ -4857,10 +4850,15 @@ extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_unref(JNIEnv* en ,jobject thiz ,jlong ptr) { jobject wref = (jobject)linphone_chat_message_get_user_data((LinphoneChatMessage*)ptr); + jobject listener_wref = (jobject) linphone_chat_message_get_message_state_changed_cb_user_data((LinphoneChatMessage*)ptr); linphone_chat_message_set_user_data((LinphoneChatMessage*)ptr, NULL); if (wref){ env->DeleteWeakGlobalRef(wref); } + if (listener_wref){ + linphone_chat_message_set_message_state_changed_cb_user_data((LinphoneChatMessage*)ptr, NULL); + env->DeleteWeakGlobalRef(listener_wref); + } linphone_chat_message_unref((LinphoneChatMessage*)ptr); } @@ -4895,34 +4893,6 @@ extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendMessage(JNIEnv* ReleaseStringUTFChars(env, jmessage, message); } -static void chat_room_impl_callback(LinphoneChatMessage* msg, LinphoneChatMessageState state, void* ud) { - JNIEnv *env = 0; - jint result = jvm->AttachCurrentThread(&env,NULL); - if (result != 0) { - ms_error("cannot attach VM\n"); - return; - } - - jobject listener = (jobject) ud; - jclass clazz = (jclass) env->GetObjectClass(listener); - jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageStateChanged","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneChatMessage$State;)V"); - jobject jmessage=(jobject)linphone_chat_message_get_user_data(msg); - - LinphoneChatRoom *room = linphone_chat_message_get_chat_room(msg); - LinphoneCore *lc = linphone_chat_room_get_core(room); - LinphoneJavaBindings *ljb = (LinphoneJavaBindings *)linphone_core_get_user_data(lc); - env->CallVoidMethod( - listener, - method, - jmessage, - env->CallStaticObjectMethod(ljb->chatMessageStateClass,ljb->chatMessageStateFromIntId,(jint)state)); - - if (state == LinphoneChatMessageStateDisplayed ) { - env->DeleteGlobalRef(listener); - env->DeleteGlobalRef(jmessage); - linphone_chat_message_set_user_data(msg,NULL); - } -} extern "C" jobject Java_org_linphone_core_LinphoneChatRoomImpl_getCore(JNIEnv* env ,jobject thiz @@ -4933,36 +4903,13 @@ extern "C" jobject Java_org_linphone_core_LinphoneChatRoomImpl_getCore(JNIEnv* return core; } -extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendMessage2(JNIEnv* env - ,jobject thiz - ,jlong chatroom_ptr - ,jobject message - ,jlong messagePtr - ,jobject jlistener) { - jobject listener = env->NewGlobalRef(jlistener); - LinphoneChatMessage *msg = (LinphoneChatMessage *)messagePtr; - message = env->NewGlobalRef(message); - linphone_chat_message_ref(msg); - linphone_chat_message_set_user_data(msg, message); - - LinphoneChatMessageCbs *cbs; - cbs = linphone_chat_message_get_callbacks(msg); - linphone_chat_message_cbs_set_user_data(cbs, (void *)listener); - linphone_chat_message_cbs_set_msg_state_changed(cbs, message_state_changed); - linphone_chat_message_cbs_set_file_transfer_progress_indication(cbs, file_transfer_progress_indication); - linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_recv); - linphone_chat_message_cbs_set_file_transfer_send(cbs, file_transfer_send); - - linphone_chat_room_send_chat_message_2((LinphoneChatRoom*)chatroom_ptr, msg); -} extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendChatMessage(JNIEnv* env ,jobject thiz ,jlong chatroom_ptr ,jobject message ,jlong messagePtr) { - message = env->NewGlobalRef(message); - linphone_chat_message_set_user_data((LinphoneChatMessage*)messagePtr, message); + linphone_chat_room_send_chat_message_2((LinphoneChatRoom*)chatroom_ptr, (LinphoneChatMessage*)messagePtr); } diff --git a/coreapi/logging-private.h b/coreapi/logging-private.h new file mode 100644 index 000000000..e9b54b990 --- /dev/null +++ b/coreapi/logging-private.h @@ -0,0 +1,61 @@ +/* +logging-private.h +Copyright (C) 2017 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, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef _LOGGING_PRIVATE_H_ +#define _LOGGING_PRIVATE_H_ + +#include +#include "linphone/logging.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Converts a #BctbxLogLevel into #LinphoneLogLevel. + */ +LinphoneLogLevel _bctbx_log_level_to_linphone_log_level(BctbxLogLevel level); + +/** + * @brief Converts a mask of #BctbxLogLevel into a mask of #LinphoneLogLevel. + */ +unsigned int _bctbx_log_mask_to_linphone_log_mask(unsigned int mask); + +/** + * @brief Converts a #LinphoneLogLevel into #BctbxLogLevel. + */ +BctbxLogLevel _linphone_log_level_to_bctbx_log_level(LinphoneLogLevel level); + +/** + * @brief Converts a mask of #LinphoneLogLevel into a mask of #BctbxLogLevel. + */ +unsigned int _linphone_log_mask_to_bctbx_log_mask(unsigned int mask); + +/** + * @brief Releases the instance pointer of the singleton. + * @note You should not need to call this function since it is automatically done + * at process ending. + */ +void _linphone_logging_service_clean(void); + +#ifdef __cplusplus +} +#endif + +#endif // _LOGGING_PRIVATE_H_ diff --git a/coreapi/logging.c b/coreapi/logging.c new file mode 100644 index 000000000..8a87b8264 --- /dev/null +++ b/coreapi/logging.c @@ -0,0 +1,256 @@ +/* +log.c +Copyright (C) 2017 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, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#include +#include + +#include +#include +#include + +#include "linphone/logging.h" + +#include "c-wrapper/c-wrapper.h" +#include "logging-private.h" + + +struct _LinphoneLoggingService { + belle_sip_object_t base; + LinphoneLoggingServiceCbs *cbs; + bctbx_log_handler_t *log_handler; +}; + +BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneLoggingService); +BELLE_SIP_DECLARE_VPTR_NO_EXPORT(LinphoneLoggingService); + +struct _LinphoneLoggingServiceCbs { + belle_sip_object_t base; + void *user_data; + LinphoneLoggingServiceCbsLogMessageWrittenCb message_event_cb; +}; + +BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneLoggingServiceCbs); +BELLE_SIP_DECLARE_VPTR_NO_EXPORT(LinphoneLoggingServiceCbs); + +static LinphoneLoggingServiceCbs *_linphone_logging_service_cbs_new(void); + + + + + +static LinphoneLoggingService *_linphone_logging_service_instance = NULL; + +static std::map _linphone_log_level_to_bctbx_log_level_map = { + { LinphoneLogLevelDebug , BCTBX_LOG_DEBUG }, + { LinphoneLogLevelTrace , BCTBX_LOG_TRACE }, + { LinphoneLogLevelMessage , BCTBX_LOG_MESSAGE }, + { LinphoneLogLevelWarning , BCTBX_LOG_WARNING }, + { LinphoneLogLevelError , BCTBX_LOG_ERROR }, + { LinphoneLogLevelFatal , BCTBX_LOG_FATAL } +}; + +LinphoneLogLevel _bctbx_log_level_to_linphone_log_level(BctbxLogLevel level) { + auto &tmap = _linphone_log_level_to_bctbx_log_level_map; + auto predicate = [level](const std::pair &tuple)->bool{return tuple.second==level;}; + auto response = std::find_if(tmap.cbegin(), tmap.cend(), predicate); + if (response != tmap.cend()) { + return response->first; + } else { + ms_fatal("%s(): invalid argurement [%d]", __FUNCTION__, level); + return LinphoneLogLevelDebug; + } +} + +unsigned int _bctbx_log_mask_to_linphone_log_mask(unsigned int mask) { + unsigned int res = 0; + auto &tmap = _linphone_log_level_to_bctbx_log_level_map; + for (auto it=tmap.cbegin(); it!=tmap.cend(); it++) { + if (mask & it->second) { + mask&=~it->second; + res|=it->first; + } + } + if (mask != 0) { + ms_fatal("%s(): invalid flag set in mask [%x]", __FUNCTION__, mask); + } + return res; +} + +BctbxLogLevel _linphone_log_level_to_bctbx_log_level(LinphoneLogLevel level) { + try { + return _linphone_log_level_to_bctbx_log_level_map.at(level); + } catch (const std::out_of_range &e) { + ms_fatal("%s(): invalid argument [%d]", __FUNCTION__, level); + return BCTBX_LOG_LOGLEV_END; + } +} + +unsigned int _linphone_log_mask_to_bctbx_log_mask(unsigned int mask) { + unsigned int res = 0; + auto &tmap = _linphone_log_level_to_bctbx_log_level_map; + for (auto it=tmap.cbegin(); it!=tmap.cend(); it++) { + if (mask & it->first) { + mask&=~it->first; + res|=it->second; + } + } + if (mask != 0) { + ms_fatal("%s(): invalid flag set in mask [%x]", __FUNCTION__, mask); + } + return res; +} + +static void _log_handler_on_message_written_cb(void *info,const char *domain, BctbxLogLevel lev, const char *fmt, va_list args) { + LinphoneLoggingService *service = (LinphoneLoggingService *)info; + if (service->cbs->message_event_cb) { + char *message = bctbx_strdup_vprintf(fmt, args); + service->cbs->message_event_cb(service, domain, _bctbx_log_level_to_linphone_log_level(lev), message); + bctbx_free(message); + } +} + +static void _log_handler_destroy_cb(bctbx_log_handler_t *handler) { + LinphoneLoggingService *service = (LinphoneLoggingService *)bctbx_log_handler_get_user_data(handler); + service->log_handler = NULL; +} + +static LinphoneLoggingService *_linphone_logging_service_new(void) { + LinphoneLoggingService *service = belle_sip_object_new(LinphoneLoggingService); + service->log_handler = bctbx_create_log_handler(_log_handler_on_message_written_cb, _log_handler_destroy_cb, service); + service->cbs = _linphone_logging_service_cbs_new(); + bctbx_add_log_handler(service->log_handler); + return service; +} + +LinphoneLoggingService *linphone_logging_service_get(void) { + if (_linphone_logging_service_instance == NULL) { + _linphone_logging_service_instance = _linphone_logging_service_new(); + atexit(_linphone_logging_service_clean); + } + return _linphone_logging_service_instance; +} + +void _linphone_logging_service_clean(void) { + if (_linphone_logging_service_instance) { + linphone_logging_service_unref(_linphone_logging_service_instance); + _linphone_logging_service_instance = NULL; + } +} + +LinphoneLoggingService *linphone_logging_service_ref(LinphoneLoggingService *service) { + return (LinphoneLoggingService *)belle_sip_object_ref(service); +} + +void linphone_logging_service_unref(LinphoneLoggingService *service) { + belle_sip_object_ref(service); +} + +static void _linphone_logging_service_uninit(LinphoneLoggingService *log_service) { + if (log_service->log_handler) bctbx_remove_log_handler(log_service->log_handler); + linphone_logging_service_cbs_unref(log_service->cbs); +} + +void linphone_logging_service_release_instance(void) { + if (_linphone_logging_service_instance) { + belle_sip_object_unref(BELLE_SIP_OBJECT(_linphone_logging_service_instance)); + } + _linphone_logging_service_instance = NULL; +} + +LinphoneLoggingServiceCbs *linphone_logging_service_get_callbacks(const LinphoneLoggingService *log_service) { + return log_service->cbs; +} + +static const char *_linphone_logging_service_log_domains[] = { + "bctbx", + "ortp", + "mediastreamer", + "bzrtp", + "linphone", + NULL +}; + +void linphone_logging_service_set_log_level(LinphoneLoggingService *log_service, LinphoneLogLevel loglevel) { + const char **domain; + for (domain=_linphone_logging_service_log_domains; *domain; domain++) { + bctbx_set_log_level(*domain, _linphone_log_level_to_bctbx_log_level(loglevel)); + } +} + +void linphone_logging_service_set_log_level_mask(LinphoneLoggingService *log_service, unsigned int mask) { + const char **domain; + for (domain=_linphone_logging_service_log_domains; *domain; domain++) { + bctbx_set_log_level_mask(*domain, (int)_linphone_log_mask_to_bctbx_log_mask(mask)); + } +} + +unsigned int linphone_logging_service_get_log_level_mask(const LinphoneLoggingService *log_service) { + return _bctbx_log_mask_to_linphone_log_mask(bctbx_get_log_level_mask(ORTP_LOG_DOMAIN)); +} + +void linphone_logging_service_set_log_file(const LinphoneLoggingService *service, const char *dir, const char *filename, size_t max_size) { + bctbx_log_handler_t *log_handler = bctbx_create_file_log_handler((uint64_t)max_size, dir, filename, NULL); + bctbx_add_log_handler(log_handler); +} + +BELLE_SIP_INSTANCIATE_VPTR(LinphoneLoggingService, belle_sip_object_t, + _linphone_logging_service_uninit, // uninit + NULL, // clone + NULL, // marshal + FALSE // unown +); + + + + + + + + + +static LinphoneLoggingServiceCbs *_linphone_logging_service_cbs_new(void) { + return belle_sip_object_new(LinphoneLoggingServiceCbs); +} + +LinphoneLoggingServiceCbs *linphone_logging_service_cbs_ref(LinphoneLoggingServiceCbs *cbs) { + return (LinphoneLoggingServiceCbs *)belle_sip_object_ref(cbs); +} + +void linphone_logging_service_cbs_unref(LinphoneLoggingServiceCbs *cbs) { + belle_sip_object_unref(cbs); +} + +void linphone_logging_service_cbs_set_log_message_written(LinphoneLoggingServiceCbs *cbs, LinphoneLoggingServiceCbsLogMessageWrittenCb cb) { + cbs->message_event_cb = cb; +} + +LinphoneLoggingServiceCbsLogMessageWrittenCb linphone_logging_service_cbs_get_log_message_written(const LinphoneLoggingServiceCbs *cbs) { + return cbs->message_event_cb; +} + +void linphone_logging_service_cbs_set_user_data(LinphoneLoggingServiceCbs *cbs, void *user_data) { + cbs->user_data = user_data; +} + +BELLE_SIP_INSTANCIATE_VPTR(LinphoneLoggingServiceCbs, belle_sip_object_t, + NULL, // uninit + NULL, // clone + NULL, // marshal + FALSE // unown +); diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index 92593391a..2e09af5eb 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -48,6 +48,7 @@ set(ROOT_HEADER_FILES im_notif_policy.h info_message.h ldapprovider.h + logging.h lpconfig.h misc.h nat_policy.h diff --git a/include/linphone/api/c-call.h b/include/linphone/api/c-call.h index 272e67b1d..464436945 100644 --- a/include/linphone/api/c-call.h +++ b/include/linphone/api/c-call.h @@ -338,6 +338,7 @@ LINPHONE_PUBLIC LinphoneConference *linphone_call_get_conference (const Linphone * Change the playback output device (currently only used for blackberry) * @param call * @param route the wanted audio route (earpiece, speaker, ...) + * @donotwrap **/ LINPHONE_PUBLIC void linphone_call_set_audio_route (LinphoneCall *call, LinphoneAudioRoute route); diff --git a/include/linphone/api/c-chat-message.h b/include/linphone/api/c-chat-message.h index f028464a2..1cd3dbd21 100644 --- a/include/linphone/api/c-chat-message.h +++ b/include/linphone/api/c-chat-message.h @@ -369,6 +369,8 @@ LINPHONE_PUBLIC const char* linphone_chat_message_get_text_content(const Linphon */ LINPHONE_PUBLIC bool_t linphone_chat_message_is_file_transfer_in_progress(LinphoneChatMessage *msg); +LINPHONE_PUBLIC bctbx_list_t *linphone_chat_message_get_participants_in_state (const LinphoneChatMessage *msg, const LinphoneChatMessageState state); + /** * @} */ diff --git a/include/linphone/api/c-chat-room.h b/include/linphone/api/c-chat-room.h index 63aa290cb..41f3c669e 100644 --- a/include/linphone/api/c-chat-room.h +++ b/include/linphone/api/c-chat-room.h @@ -227,6 +227,12 @@ LINPHONE_PUBLIC int linphone_chat_room_get_history_events_size(LinphoneChatRoom */ LINPHONE_PUBLIC LinphoneChatMessage *linphone_chat_room_get_last_message_in_history(LinphoneChatRoom *cr); +/** + * Gets the chat message sent or received in this chat room that matches the message_id + * @param[in] cr The #LinphoneChatRoom object corresponding to the conversation for which the message should be retrieved + * @param[in] message_id The id of the message to find + * @return the #LinphoneChatMessage + */ LINPHONE_PUBLIC LinphoneChatMessage * linphone_chat_room_find_message(LinphoneChatRoom *cr, const char *message_id); /** diff --git a/include/linphone/core.h b/include/linphone/core.h index a1a54d90e..a189e9df4 100644 --- a/include/linphone/core.h +++ b/include/linphone/core.h @@ -165,7 +165,8 @@ typedef struct _LinphoneCoreVTable{ LinphoneCoreNotifyPresenceReceivedCb notify_presence_received; /**< Notify received presence events*/ LinphoneCoreNotifyPresenceReceivedForUriOrTelCb notify_presence_received_for_uri_or_tel; /**< Notify received presence events*/ LinphoneCoreNewSubscriptionRequestedCb new_subscription_requested; /**< Notify about pending presence subscription request */ - LINPHONE_DEPRECATED LinphoneCoreAuthInfoRequestedCb auth_info_requested; /**< @deprecated Use authentication_requested instead. Ask the application some authentication information */ + LINPHONE_DEPRECATED LinphoneCoreAuthInfoRequestedCb auth_info_requested; /** @brief Ask the application some authentication information. + @deprecated Use authentication_requested instead. Deprecated since 2016-09-21 */ LinphoneCoreAuthenticationRequestedCb authentication_requested; /**< Ask the application some authentication information */ LinphoneCoreCallLogUpdatedCb call_log_updated; /**< Notifies that call log list has been updated */ LinphoneCoreMessageReceivedCb message_received; /**< a message is received, can be text or external body*/ @@ -181,11 +182,16 @@ typedef struct _LinphoneCoreVTable{ LinphoneCoreSubscriptionStateChangedCb subscription_state_changed; /** A text message has been received */ - LINPHONE_DEPRECATED LinphoneCoreFileTransferRecvCb file_transfer_recv; /**< @deprecated Callback to store file received attached to a #LinphoneChatMessage */ - LINPHONE_DEPRECATED LinphoneCoreFileTransferSendCb file_transfer_send; /**< @deprecated Callback to collect file chunk to be sent for a #LinphoneChatMessage */ - LINPHONE_DEPRECATED LinphoneCoreFileTransferProgressIndicationCb file_transfer_progress_indication; /**< @deprecated Callback to indicate file transfer progress */ + LinphoneCoreConfiguringStatusCb configuring_status; /**< Notifies configuring status changes + @deprecated Deprecated since 2015-11-19. */ + LINPHONE_DEPRECATED LinphoneCoreTextMessageReceivedCb text_received; /**< @brief A text message has been received. + @deprecated Use #message_received instead. Deprecated since 2015-11-19. */ + LINPHONE_DEPRECATED LinphoneCoreFileTransferRecvCb file_transfer_recv; /**< @brief Callback to store file received attached to a #LinphoneChatMessage. + @deprecated Deprecated since 2015-11-19. */ + LINPHONE_DEPRECATED LinphoneCoreFileTransferSendCb file_transfer_send; /**< @brief Callback to collect file chunk to be sent for a #LinphoneChatMessage. + @deprecated Deprecated since 2015-11-19. */ + LINPHONE_DEPRECATED LinphoneCoreFileTransferProgressIndicationCb file_transfer_progress_indication; /**< @brief Callback to indicate file transfer progress. + @deprecated Deprecated since 2015-11-19. */ LinphoneCoreNetworkReachableCb network_reachable; /**< Callback to report IP network status (I.E up/down )*/ LinphoneCoreLogCollectionUploadStateChangedCb log_collection_upload_state_changed; /**< Callback to upload collected logs */ LinphoneCoreLogCollectionUploadProgressIndicationCb log_collection_upload_progress_indication; /**< Callback to indicate log collection upload progress */ @@ -815,25 +821,28 @@ LINPHONE_PUBLIC void linphone_core_reset_log_collection(void); /** * @bref Define a log handler. * @param logfunc The function pointer of the log handler. + * @deprecated Use #linphone_log_service_set_log_handler() instead. Deprecated since 2017-10-10. * @donotwrap */ -LINPHONE_PUBLIC void linphone_core_set_log_handler(OrtpLogFunc logfunc); +LINPHONE_PUBLIC LINPHONE_DEPRECATED void linphone_core_set_log_handler(OrtpLogFunc logfunc); /** * @brief Define a log file. * * If the file pointer passed as an argument is NULL, stdout is used instead. * @param file A pointer to the FILE structure of the file to write to. + * @deprecated Use #linphone_log_service_set_file() instead. Deprecated since 2017-10-10. * @donotwrap */ -LINPHONE_PUBLIC void linphone_core_set_log_file(FILE *file); +LINPHONE_PUBLIC LINPHONE_DEPRECATED void linphone_core_set_log_file(FILE *file); /** * @brief Define the minimum level for logging. * @param loglevel Minimum level for logging messages. + * @deprecated Use #linphone_logging_service_set_log_level() instead. Deprecated since 2017-10-10. * @donotwrap **/ -LINPHONE_PUBLIC void linphone_core_set_log_level(OrtpLogLevel loglevel); +LINPHONE_PUBLIC LINPHONE_DEPRECATED void linphone_core_set_log_level(OrtpLogLevel loglevel); /** * Define the log level using mask. @@ -841,22 +850,25 @@ LINPHONE_PUBLIC void linphone_core_set_log_level(OrtpLogLevel loglevel); * The loglevel parameter is a bitmask parameter. Therefore to enable only warning and error * messages, use ORTP_WARNING | ORTP_ERROR. To disable logs, simply set loglevel to 0. * - * @param loglevel A bitmask of the log levels to set. + * @param mask A bitmask of the log levels to set. + * @deprecated Use #linphone_logging_service_set_log_level() instead. Deprecated since 2017-10-10. */ -LINPHONE_PUBLIC void linphone_core_set_log_level_mask(unsigned int loglevel); +LINPHONE_PUBLIC LINPHONE_DEPRECATED void linphone_core_set_log_level_mask(unsigned int mask); /** * Get defined log level mask. * * @return The loglevel parameter is a bitmask parameter. Therefore to enable only warning and error * messages, use ORTP_WARNING | ORTP_ERROR. To disable logs, simply set loglevel to 0. + * @deprecated Use #linphone_logging_service_get_log_level_mask() instead. Deprecated since 2017-10-10. */ -LINPHONE_PUBLIC unsigned int linphone_core_get_log_level_mask(void); +LINPHONE_PUBLIC LINPHONE_DEPRECATED unsigned int linphone_core_get_log_level_mask(void); /** * Enable logs in supplied FILE*. * @param file a C FILE* where to fprintf logs. If null stdout is used. - * @deprecated Use #linphone_core_set_log_file and #linphone_core_set_log_level instead. + * @deprecated Use #linphone_core_set_log_file and #linphone_core_set_log_level() instead. + * Deprecated since 2017-01-12. * @donotwrap **/ LINPHONE_DEPRECATED LINPHONE_PUBLIC void linphone_core_enable_logs(FILE *file); @@ -866,13 +878,14 @@ LINPHONE_DEPRECATED LINPHONE_PUBLIC void linphone_core_enable_logs(FILE *file); * @param logfunc The address of a OrtpLogFunc callback whose protoype is * typedef void (*OrtpLogFunc)(OrtpLogLevel lev, const char *fmt, va_list args); * @deprecated Use #linphone_core_set_log_handler and #linphone_core_set_log_level instead. + * Deprecated since 2017-01-12. * @donotwrap **/ LINPHONE_DEPRECATED LINPHONE_PUBLIC void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc); /** * Entirely disable logging. - * @deprecated Use #linphone_core_set_log_level instead. + * @deprecated Use #linphone_core_set_log_level() instead. Deprecated since 2017-01-12. * @donotwrap **/ LINPHONE_DEPRECATED LINPHONE_PUBLIC void linphone_core_disable_logs(void); @@ -894,13 +907,15 @@ LINPHONE_PUBLIC const char *linphone_core_get_version(void); LINPHONE_PUBLIC const char *linphone_core_get_user_agent(LinphoneCore *lc); /** - * @deprecated 2016-12-20: Use #linphone_core_get_user_agent instead. + * @deprecated Use #linphone_core_get_user_agent() instead. + * Deprecated since 2015-11-19. * @donotwrap **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED const char *linphone_core_get_user_agent_name(void); /** - * @deprecated 2016-12-20: Use #linphone_core_get_user_agent instead. + * @deprecated Use #linphone_core_get_user_agent instead. + * Deprecated since 2015-11-19. * @donotwrap **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED const char *linphone_core_get_user_agent_version(void); @@ -918,8 +933,8 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED const char *linphone_core_get_user_agent_ver * @param vtable a LinphoneCoreVTable structure holding your application callbacks * @param config_path a path to a config file. If it does not exists it will be created. * The config file is used to store all settings, call logs, friends, proxies... so that all these settings - * become persistent over the life of the LinphoneCore object. - * It is allowed to set a NULL config file. In that case LinphoneCore will not store any settings. + * become persistent over the life of the LinphoneCore object. + * It is allowed to set a NULL config file. In that case LinphoneCore will not store any settings. * @param factory_config_path a path to a read-only config file that can be used to * to store hard-coded preference such as proxy settings or internal preferences. * The settings in this factory file always override the one in the normal config file. @@ -927,7 +942,7 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED const char *linphone_core_get_user_agent_ver * @param userdata an opaque user pointer that can be retrieved at any time (for example in * callbacks) using linphone_core_get_user_data(). * @see linphone_core_new_with_config - * @deprecated 2017-01-12: Use linphone_factory_create_core() instead. + * @deprecated Use #linphone_factory_create_core() instead. Deprecated since 2017-01-12. * @donotwrap **/ LINPHONE_DEPRECATED LINPHONE_PUBLIC LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable, @@ -944,7 +959,7 @@ LINPHONE_DEPRECATED LINPHONE_PUBLIC LinphoneCore *linphone_core_new(const Linpho * @param userdata an opaque user pointer that can be retrieved at any time (for example in * callbacks) using linphone_core_get_user_data(). * @see linphone_core_new - * @deprecated 2017-01-12: Use linphone_factory_create_core_with_config() instead. + * @deprecated Use #linphone_factory_create_core_with_config() instead. Deprecated since 2017-01-12. * @donotwrap **/ LINPHONE_DEPRECATED LINPHONE_PUBLIC LinphoneCore *linphone_core_new_with_config(const LinphoneCoreVTable *vtable, LpConfig *config, void *userdata); @@ -995,7 +1010,7 @@ LINPHONE_PUBLIC void linphone_core_iterate(LinphoneCore *lc); * add a listener to be notified of linphone core events. Once events are received, registered vtable are invoked in order. * @param vtable a LinphoneCoreVTable structure holding your application callbacks. Object is owned by linphone core until linphone_core_remove_listener. * @param lc object - * @deprecated Use linphone_core_add_callbacks() instead. + * @deprecated Use linphone_core_add_callbacks() instead. Deprecated since 2017-01-12. * @donotwrap */ LINPHONE_DEPRECATED LINPHONE_PUBLIC void linphone_core_add_listener(LinphoneCore *lc, LinphoneCoreVTable *vtable); @@ -1014,7 +1029,7 @@ LINPHONE_PUBLIC void linphone_core_add_callbacks(LinphoneCore *lc, LinphoneCoreC * remove a listener registred by linphone_core_add_listener. * @param lc object * @param vtable a LinphoneCoreVTable structure holding your application callbacks. - * @deprecated Use linphone_core_remove_callbacks() instead. + * @deprecated Use linphone_core_remove_callbacks() instead. Deprecated since 2017-01-12. * @donotwrap */ LINPHONE_DEPRECATED LINPHONE_PUBLIC void linphone_core_remove_listener(LinphoneCore *lc, const LinphoneCoreVTable *vtable); @@ -1094,7 +1109,8 @@ LINPHONE_PUBLIC LinphoneCall * linphone_core_invite_with_params(LinphoneCore *lc LINPHONE_PUBLIC LinphoneCall * linphone_core_invite_address_with_params(LinphoneCore *lc, const LinphoneAddress *addr, const LinphoneCallParams *params); /** - * Performs a simple call transfer to the specified destination. + * @brief Performs a simple call transfer to the specified destination. + * * The remote endpoint is expected to issue a new call to the specified destination. * The current call remains active and thus can be later paused or terminated. * It is possible to follow the progress of the transfer provided that transferee sends notification about it. @@ -1105,12 +1121,13 @@ LINPHONE_PUBLIC LinphoneCall * linphone_core_invite_address_with_params(Linphone * @param[in] refer_to The destination the call is to be refered to * @return 0 on success, -1 on failure * @ingroup call_control - * @deprecated Use linphone_call_transfer() instead + * @deprecated Use #linphone_call_transfer() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_transfer_call(LinphoneCore *lc, LinphoneCall *call, const char *refer_to); /** - * Transfers a call to destination of another running call. This is used for "attended transfer" scenarios. + * @brief Transfers a call to destination of another running call. This is used for "attended transfer" scenarios. + * * The transfered call is supposed to be in paused state, so that it is able to accept the transfer immediately. * The destination call is a call previously established to introduce the transfered person. * This method will send a transfer request to the transfered person. The phone of the transfered is then @@ -1124,12 +1141,13 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_transfer_call(L * @param[in] dest A running call whose remote person will receive the transfer * @return 0 on success, -1 on failure * @ingroup call_control - * @deprecated Use linphone_call_transfer_to_another() instead + * @deprecated Use #linphone_call_transfer_to_another() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_transfer_call_to_another(LinphoneCore *lc, LinphoneCall *call, LinphoneCall *dest); /** - * Start a new call as a consequence of a transfer request received from a call. + * @brief Start a new call as a consequence of a transfer request received from a call. + * * This function is for advanced usage: the execution of transfers is automatically managed by the LinphoneCore. However if an application * wants to have control over the call parameters for the new call, it should call this function immediately during the LinphoneCallRefered notification. * @see LinphoneCoreVTable::call_state_changed @@ -1144,7 +1162,8 @@ LINPHONE_PUBLIC LinphoneCall * linphone_core_start_refered_call(LinphoneCore *lc #define linphone_core_inc_invite_pending(lc) linphone_core_is_incoming_invite_pending(lc) /** - * Tells whether there is an incoming invite pending. + * @brief Tells whether there is an incoming invite pending. + * * @ingroup call_control * @param[in] lc LinphoneCore object * @return A boolean telling whether an incoming invite is pending or not. @@ -1168,7 +1187,7 @@ LINPHONE_PUBLIC bool_t linphone_core_in_call(const LinphoneCore *lc); LINPHONE_PUBLIC LinphoneCall *linphone_core_get_current_call(const LinphoneCore *lc); /** - * Accept an incoming call. + * @brief Accept an incoming call. * * Basically the application is notified of incoming calls within the * call_state_changed callback of the #LinphoneCoreVTable structure, where it will receive @@ -1178,12 +1197,12 @@ LINPHONE_PUBLIC LinphoneCall *linphone_core_get_current_call(const LinphoneCore * @param[in] call The LinphoneCall object representing the call to be answered * @return 0 on success, -1 on failure * @ingroup call_control - * @deprecated Use linphone_call_accept() instead + * @deprecated Use #linphone_call_accept() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_accept_call(LinphoneCore *lc, LinphoneCall *call); /** - * Accept an incoming call, with parameters. + * @brief Accept an incoming call, with parameters. * * Basically the application is notified of incoming calls within the * call_state_changed callback of the #LinphoneCoreVTable structure, where it will receive @@ -1195,12 +1214,13 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_accept_call(Lin * @param[in] params The specific parameters for this call, for example whether video is accepted or not. Use NULL to use default parameters * @return 0 on success, -1 on failure * @ingroup call_control - * @deprecated Use linphone_call_accept_with_params() instead + * @deprecated Use #linphone_call_accept_with_params() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params); /** - * When receiving an incoming, accept to start a media session as early-media. + * @brief When receiving an incoming, accept to start a media session as early-media. + * * This means the call is not accepted but audio & video streams can be established if the remote party supports early media. * However, unlike after call acceptance, mic and camera input are not sent during early-media, though received audio & video are played normally. * The call can then later be fully accepted using linphone_core_accept_call() or linphone_core_accept_call_with_params(). @@ -1209,29 +1229,31 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_accept_call_wit * @param[in] params The call parameters to use (can be NULL) * @return 0 if successful, -1 otherwise * @ingroup call_control - * @deprecated Use linphone_call_accept_early_media_with_params() instead + * @deprecated Use linphone_call_accept_early_media_with_params() instead. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_accept_early_media_with_params(LinphoneCore* lc, LinphoneCall* call, const LinphoneCallParams* params); /** - * Accept an early media session for an incoming call. + * @brief Accept an early media session for an incoming call. + * * This is identical as calling linphone_core_accept_early_media_with_params() with NULL call parameters. * @param[in] lc LinphoneCore object * @param[in] call The incoming call to accept * @return 0 if successful, -1 otherwise * @ingroup call_control * @see linphone_core_accept_early_media_with_params() - * @deprecated Use linphone_call_accept_early_media() instead + * @deprecated Use #linphone_call_accept_early_media() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_accept_early_media(LinphoneCore* lc, LinphoneCall* call); /** - * Terminates a call. + * @brief Terminates a call. + * * @param[in] lc LinphoneCore object * @param[in] call The LinphoneCall object representing the call to be terminated * @return 0 on success, -1 on failure * @ingroup call_control - * @deprecated Use linphone_call_terminate() instead + * @deprecated Use #linphone_call_terminate() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_terminate_call(LinphoneCore *lc, LinphoneCall *call); @@ -1242,18 +1264,18 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_terminate_call( * @param[in] redirect_uri The URI to redirect the call to * @return 0 if successful, -1 on error. * @ingroup call_control - * @deprecated Use linphone_call_redirect() instead + * @deprecated Use #linphone_call_redirect() instead. Deprecated since 2017-02-13. */ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_redirect_call(LinphoneCore *lc, LinphoneCall *call, const char *redirect_uri); /** - * Decline a pending incoming call, with a reason. - * @param[in] lc LinphoneCore object - * @param[in] call The LinphoneCall to decline, must be in the IncomingReceived state - * @param[in] reason The reason for rejecting the call: LinphoneReasonDeclined or LinphoneReasonBusy + * @brief Decline a pending incoming call, with a reason. + * @param[in] lc #LinphoneCore object + * @param[in] call The #LinphoneCall to decline, must be in the IncomingReceived state + * @param[in] reason The reason for rejecting the call: #LinphoneReasonDeclined or #LinphoneReasonBusy * @return 0 on success, -1 on failure * @ingroup call_control - * @deprecated Use linphone_call_decline() instead + * @deprecated Use #linphone_call_decline() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_decline_call(LinphoneCore *lc, LinphoneCall * call, LinphoneReason reason); @@ -1266,15 +1288,16 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_decline_call(Li LINPHONE_PUBLIC LinphoneStatus linphone_core_terminate_all_calls(LinphoneCore *lc); /** - * Pauses the call. If a music file has been setup using linphone_core_set_play_file(), + * @biref Pauses the call. If a music file has been setup using linphone_core_set_play_file(), * this file will be played to the remote user. + * * The only way to resume a paused call is to call linphone_core_resume_call(). * @param[in] lc LinphoneCore object * @param[in] call The call to pause * @return 0 on success, -1 on failure * @ingroup call_control * @see linphone_core_resume_call() - * @deprecated Use linphone_call_pause() instead + * @deprecated Use #linphone_call_pause() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call); @@ -1287,19 +1310,21 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_pause_call(Linp LINPHONE_PUBLIC LinphoneStatus linphone_core_pause_all_calls(LinphoneCore *lc); /** - * Resumes a call. + * @brief Resumes a call. + * * The call needs to have been paused previously with linphone_core_pause_call(). * @param[in] lc LinphoneCore object * @param[in] call The call to resume * @return 0 on success, -1 on failure * @ingroup call_control * @see linphone_core_pause_call() - * @deprecated Use linphone_call_resume() instead + * @deprecated Use #linphone_call_resume() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_resume_call(LinphoneCore *lc, LinphoneCall *call); /** - * Updates a running call according to supplied call parameters or parameters changed in the LinphoneCore. + * @brief Updates a running call according to supplied call parameters or parameters changed in the LinphoneCore. + * * In this version this is limited to the following use cases: * - setting up/down the video stream according to the video parameter of the LinphoneCallParams (see linphone_call_params_enable_video() ). * - changing the size of the transmitted video after calling linphone_core_set_preferred_video_size() @@ -1312,7 +1337,7 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_resume_call(Lin * @param[in] params The new call parameters to use (may be NULL) * @return 0 if successful, -1 otherwise. * @ingroup call_control - * @deprecated Use linphone_call_update() instead + * @deprecated Use #linphone_call_update() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params); @@ -1341,7 +1366,7 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_update_call(Lin LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_defer_call_update(LinphoneCore *lc, LinphoneCall *call); /** - * Accept call modifications initiated by other end. + * @brief Accept call modifications initiated by other end. * * This call may be performed in response to a #LinphoneCallUpdatedByRemote state notification. * When such notification arrives, the application can decide to call linphone_core_defer_update_call() so that it can @@ -1358,7 +1383,7 @@ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_defer_call_upda * @param[in] params A LinphoneCallParams object describing the call parameters to accept * @return 0 if successful, -1 otherwise (actually when this function call is performed outside ot #LinphoneCallUpdatedByRemote state) * @ingroup call_control - * @deprecated Use linphone_call_accept_update() instead + * @deprecated Use #linphone_call_accept_update() instead. Deprecated since 2017-02-13. **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED LinphoneStatus linphone_core_accept_call_update(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params); @@ -1394,13 +1419,13 @@ LINPHONE_PUBLIC LinphoneCall *linphone_core_get_call_by_remote_address2(const Li /** - * Send the specified dtmf. + * @brief Send the specified dtmf. * - * @ingroup media_parameters - * @deprecated Use #linphone_call_send_dtmf instead. * This function only works during calls. The dtmf is automatically played to the user. * @param lc The LinphoneCore object * @param dtmf The dtmf name specified as a char, such as '0', '#' etc... + * @deprecated Use #linphone_call_send_dtmf instead. Deprecated since 2015-11-23. + * @ingroup media_parameters * @donotwrap **/ LINPHONE_PUBLIC LINPHONE_DEPRECATED void linphone_core_send_dtmf(LinphoneCore *lc, char dtmf); diff --git a/include/linphone/logging.h b/include/linphone/logging.h new file mode 100644 index 000000000..e54d0702f --- /dev/null +++ b/include/linphone/logging.h @@ -0,0 +1,178 @@ +/* +logging.h +Copyright (C) 2017 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, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#ifndef _LINPHONE_LOG_H_ +#define _LINPHONE_LOG_H_ + +#include "types.h" +#include "defs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup logging + * @{ + */ + +/** + * @brief Singleton class giving access to logging features. + */ +typedef struct _LinphoneLoggingService LinphoneLoggingService; + +/** + * @brief Listener for #LinphoneLoggingService. + */ +typedef struct _LinphoneLoggingServiceCbs LinphoneLoggingServiceCbs; + +/** + * @brief Verbosity levels of log messages. + */ +typedef enum _LinphoneLogLevel { + LinphoneLogLevelDebug = 1, /**< @brief Level for debug messages. */ + LinphoneLogLevelTrace = 1<<1, /**< @brief Level for traces. */ + LinphoneLogLevelMessage = 1<<2, /**< @brief Level for information messages. */ + LinphoneLogLevelWarning = 1<<3, /**< @brief Level for warning messages. */ + LinphoneLogLevelError = 1<<4, /**< @brief Level for error messages. */ + LinphoneLogLevelFatal = 1<<5 /**< @brief Level for fatal error messages. */ +} LinphoneLogLevel; + +/** + * @brief Type of callbacks called each time liblinphone write a log message. + * + * @param log_service A pointer on the logging service singleton. + * @param domain A string describing which sub-library of liblinphone the message is coming from. + * @param lev Verbosity level of the message. + * @param message Content of the message. + */ +typedef void (*LinphoneLoggingServiceCbsLogMessageWrittenCb)(LinphoneLoggingService *log_service, const char *domain, LinphoneLogLevel lev, const char *message); + + + + + +/** + * @brief Gets the singleton logging service object. + * + * The singleton is automatically instantiated if it hasn't + * been done yet. + * + * @return A pointer on the singleton. + */ +LINPHONE_PUBLIC LinphoneLoggingService *linphone_logging_service_get(void); + +/** + * @brief Increases the reference counter. + */ +LINPHONE_PUBLIC LinphoneLoggingService *linphone_logging_service_ref(LinphoneLoggingService *service); + +/** + * @brief Decreases the reference counter and destroy the object + * if the counter reaches 0. + */ +LINPHONE_PUBLIC void linphone_logging_service_unref(LinphoneLoggingService *service); + +/** + * @brief Gets the logging service listener. + */ +LINPHONE_PUBLIC LinphoneLoggingServiceCbs *linphone_logging_service_get_callbacks(const LinphoneLoggingService *log_service); + +/** + * @brief Set the verbosity of the log. + * + * For instance, a level of #LinphoneLogLevelMessage will let pass fatal, error, warning and message-typed messages + * whereas trace and debug messages will be dumped out. + */ +LINPHONE_PUBLIC void linphone_logging_service_set_log_level(LinphoneLoggingService *log_service, LinphoneLogLevel level); + +/** + * @brief Sets the types of messages that will be authorized to be written in the log. + * @param log_service The logging service singleton. + * @param mask Example: #LinphoneLogLevelMessage|#LinphoneLogLevelError will ONLY let pass message-typed and error messages. + * @note Calling that function reset the log level that has been specified by #linphone_logging_service_set_log_level(). + */ +LINPHONE_PUBLIC void linphone_logging_service_set_log_level_mask(LinphoneLoggingService *log_service, unsigned int mask); + +/** + * @brief Gets the log level mask. + */ +LINPHONE_PUBLIC unsigned int linphone_logging_service_get_log_level_mask(const LinphoneLoggingService *log_service); + +/** + * @brief Enables logging in a file. + * + * That function enables an internal log handler that writes log messages in + * log-rotated files. + * + * @param dir Directory where to create the distinct parts of the log. + * @param filename Name of the log file. + * @param max_size The maximal size of each part of the log. The log rotating is triggered + * each time the currently opened log part reach that limit. + */ +LINPHONE_PUBLIC void linphone_logging_service_set_log_file(const LinphoneLoggingService *service, const char *dir, const char *filename, size_t max_size); + + + + + +/** + * @brief Increases the reference counter. + */ +LINPHONE_PUBLIC LinphoneLoggingServiceCbs *linphone_logging_service_cbs_ref(LinphoneLoggingServiceCbs *cbs); + +/** + * @brief Decreases the reference counter. + * + * The object is automatically destroyed once the counter reach 0. + */ +LINPHONE_PUBLIC void linphone_logging_service_cbs_unref(LinphoneLoggingServiceCbs *cbs); + +/** + * @brief Sets the callback to call each time liblinphone writes a log message. + */ +LINPHONE_PUBLIC void linphone_logging_service_cbs_set_log_message_written(LinphoneLoggingServiceCbs *cbs, LinphoneLoggingServiceCbsLogMessageWrittenCb cb); + +/** + * @brief Gets the value of the message event callback. + */ +LINPHONE_PUBLIC LinphoneLoggingServiceCbsLogMessageWrittenCb linphone_logging_service_cbs_get_log_message_written(const LinphoneLoggingServiceCbs *cbs); + +/** + * @brief Pass a pointer on a custom object. + * + * That pointer can be get back by callbacks by using #linphone_logging_service_get_cbs() and #linphone_logging_service_cbs_get_user_data(). + */ +LINPHONE_PUBLIC void linphone_logging_service_cbs_set_user_data(LinphoneLoggingServiceCbs *cbs, void *user_data); + +/** + * @brief Gets the user_data pointer back. + */ +LINPHONE_PUBLIC void *linphone_logging_service_cbs_get_user_data(const LinphoneLoggingServiceCbs *cbs); + + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif // _LINPHONE_LOG_H_ diff --git a/java/common/org/linphone/core/LinphoneChatRoom.java b/java/common/org/linphone/core/LinphoneChatRoom.java index e08378b02..65b635e51 100644 --- a/java/common/org/linphone/core/LinphoneChatRoom.java +++ b/java/common/org/linphone/core/LinphoneChatRoom.java @@ -115,11 +115,6 @@ public interface LinphoneChatRoom { */ void deleteMessage(LinphoneChatMessage message); - /** - * Create a LinphoneChatMessage - * @return LinphoneChatMessage object - */ - LinphoneChatMessage createLinphoneChatMessage(String message, String url, State state, long timestamp, boolean isRead, boolean isIncoming); /** * Returns a back pointer to the core managing the chat room. diff --git a/java/impl/org/linphone/core/LinphoneChatRoomImpl.java b/java/impl/org/linphone/core/LinphoneChatRoomImpl.java index f44c6ecf6..97c919716 100644 --- a/java/impl/org/linphone/core/LinphoneChatRoomImpl.java +++ b/java/impl/org/linphone/core/LinphoneChatRoomImpl.java @@ -25,7 +25,7 @@ import org.linphone.core.LinphoneCall; @SuppressWarnings("deprecation") class LinphoneChatRoomImpl implements LinphoneChatRoom { protected final long nativePtr; - private native long createLinphoneChatMessage(long ptr, String message); + private native Object createLinphoneChatMessage(long ptr, String message); private native long getPeerAddress(long ptr); private native void sendMessage(long ptr, String message); private native void sendMessage2(long ptr, Object msg, long messagePtr, StateListener listener); @@ -39,9 +39,6 @@ class LinphoneChatRoomImpl implements LinphoneChatRoom { private native boolean isRemoteComposing(long ptr); private native void markAsRead(long ptr); private native void deleteMessage(long room, long message); - private native long createLinphoneChatMessage2(long ptr, String message, - String url, int state, long timestamp, boolean isRead, - boolean isIncoming); private native void sendChatMessage(long ptr, Object message, long messagePtr); private native void finalize(long nativePtr); private native boolean islimeAvailable(long nativePtr); @@ -77,7 +74,7 @@ class LinphoneChatRoomImpl implements LinphoneChatRoom { @Override public LinphoneChatMessage createLinphoneChatMessage(String message) { synchronized(getCore()){ - return new LinphoneChatMessageImpl(createLinphoneChatMessage(nativePtr, message)); + return (LinphoneChatMessage)createLinphoneChatMessage(nativePtr, message); } } @@ -144,15 +141,6 @@ class LinphoneChatRoomImpl implements LinphoneChatRoom { } } - @Override - public LinphoneChatMessage createLinphoneChatMessage(String message, - String url, State state, long timestamp, boolean isRead, - boolean isIncoming) { - synchronized(getCore()){ - return new LinphoneChatMessageImpl(createLinphoneChatMessage2( - nativePtr, message, url, state.value(), timestamp / 1000, isRead, isIncoming)); - } - } private native Object getCore(long nativePtr); @Override public synchronized LinphoneCore getCore() { @@ -162,11 +150,11 @@ class LinphoneChatRoomImpl implements LinphoneChatRoom { return (LinphoneChatMessage[]) typesPtr; } - private native long createFileTransferMessage(long ptr, String name, String type, String subtype, int size); + private native Object createFileTransferMessage(long ptr, String name, String type, String subtype, int size); @Override public LinphoneChatMessage createFileTransferMessage(LinphoneContent content) { synchronized(getCore()) { - return new LinphoneChatMessageImpl(createFileTransferMessage(nativePtr, content.getName(), content.getType(), content.getSubtype(), content.getRealSize())); + return (LinphoneChatMessage)createFileTransferMessage(nativePtr, content.getName(), content.getType(), content.getSubtype(), content.getRealSize()); } } @Override diff --git a/src/c-wrapper/api/c-chat-message.cpp b/src/c-wrapper/api/c-chat-message.cpp index 902055f9a..a616a9659 100644 --- a/src/c-wrapper/api/c-chat-message.cpp +++ b/src/c-wrapper/api/c-chat-message.cpp @@ -31,6 +31,7 @@ #include "chat/notification/imdn.h" #include "content/content-type.h" #include "content/content.h" +#include "conference/participant.h" // ============================================================================= @@ -246,6 +247,10 @@ bool_t linphone_chat_message_is_file_transfer_in_progress(LinphoneChatMessage *m return L_GET_CPP_PTR_FROM_C_OBJECT(msg)->isFileTransferInProgress(); } +bctbx_list_t *linphone_chat_message_get_participants_in_state (const LinphoneChatMessage *msg, const LinphoneChatMessageState state) { + return L_GET_RESOLVED_C_LIST_FROM_CPP_LIST(L_GET_PRIVATE_FROM_C_OBJECT(msg)->getParticipantsInState((LinphonePrivate::ChatMessage::State) state)); +} + // ============================================================================= // Old listener // ============================================================================= diff --git a/src/c-wrapper/c-wrapper.h b/src/c-wrapper/c-wrapper.h index 9ebb30f72..e0109ce7c 100644 --- a/src/c-wrapper/c-wrapper.h +++ b/src/c-wrapper/c-wrapper.h @@ -100,6 +100,8 @@ BELLE_SIP_TYPE_ID(LinphoneImNotifPolicy), BELLE_SIP_TYPE_ID(LinphoneInfoMessage), BELLE_SIP_TYPE_ID(LinphoneLDAPContactProvider), BELLE_SIP_TYPE_ID(LinphoneLDAPContactSearch), +BELLE_SIP_TYPE_ID(LinphoneLoggingService), +BELLE_SIP_TYPE_ID(LinphoneLoggingServiceCbs), BELLE_SIP_TYPE_ID(LinphoneNatPolicy), BELLE_SIP_TYPE_ID(LinphonePayloadType), BELLE_SIP_TYPE_ID(LinphonePlayer), diff --git a/src/chat/chat-message/chat-message-p.h b/src/chat/chat-message/chat-message-p.h index b665e0d1f..4c957ed71 100644 --- a/src/chat/chat-message/chat-message-p.h +++ b/src/chat/chat-message/chat-message-p.h @@ -59,6 +59,7 @@ public: void setDirection (ChatMessage::Direction dir); void setParticipantState (const IdentityAddress &participantAddress, ChatMessage::State newState); + std::list> getParticipantsInState (const ChatMessage::State state) const; void setState (ChatMessage::State newState, bool force = false); void setTime (time_t time); diff --git a/src/chat/chat-message/chat-message.cpp b/src/chat/chat-message/chat-message.cpp index eb2d1f029..0fcde7521 100644 --- a/src/chat/chat-message/chat-message.cpp +++ b/src/chat/chat-message/chat-message.cpp @@ -34,6 +34,7 @@ #include "chat/modifier/encryption-chat-message-modifier.h" #include "chat/modifier/file-transfer-chat-message-modifier.h" #include "chat/modifier/multipart-chat-message-modifier.h" +#include "conference/participant.h" #include "content/file-content.h" #include "content/content.h" #include "core/core.h" @@ -122,6 +123,29 @@ void ChatMessagePrivate::setParticipantState (const IdentityAddress &participant setState(ChatMessage::State::DeliveredToUser); } +list> ChatMessagePrivate::getParticipantsInState (const ChatMessage::State state) const { + L_Q(); + + list> participantsInState; + if (!(q->getChatRoom()->getCapabilities() & AbstractChatRoom::Capabilities::Conference) || !dbKey.isValid()) { + return participantsInState; + } + + unique_ptr &mainDb = q->getChatRoom()->getCore()->getPrivate()->mainDb; + shared_ptr eventLog = mainDb->getEventFromKey(dbKey); + list addressesInState = mainDb->getChatMessageParticipantsInState(eventLog, state); + const list> &participants = q->getChatRoom()->getParticipants(); + for (IdentityAddress addr : addressesInState) { + for (const auto &participant : participants) { + if (participant->getAddress() == addr) { + participantsInState.push_back(participant); + } + } + } + + return participantsInState; +} + void ChatMessagePrivate::setState (ChatMessage::State newState, bool force) { L_Q(); diff --git a/src/chat/chat-message/chat-message.h b/src/chat/chat-message/chat-message.h index 961455882..2b53bda7d 100644 --- a/src/chat/chat-message/chat-message.h +++ b/src/chat/chat-message/chat-message.h @@ -39,6 +39,7 @@ class AbstractChatRoom; class Content; class FileTransferContent; class ChatMessagePrivate; +class Participant; class LINPHONE_PUBLIC ChatMessage : public Object, public CoreAccessor { friend class BasicToClientGroupChatRoom; diff --git a/src/conference/session/call-session.cpp b/src/conference/session/call-session.cpp index a11a4ed1d..668f0df33 100644 --- a/src/conference/session/call-session.cpp +++ b/src/conference/session/call-session.cpp @@ -92,7 +92,8 @@ void CallSessionPrivate::setState (CallSession::State newState, const string &me case CallSession::State::Error: switch (linphone_error_info_get_reason(q->getErrorInfo())) { case LinphoneReasonDeclined: - log->status = LinphoneCallDeclined; + if (log->status != LinphoneCallMissed) // Do not re-change the status of a call if it's already set + log->status = LinphoneCallDeclined; break; case LinphoneReasonNotAnswered: if (log->dir == LinphoneCallIncoming) @@ -470,7 +471,7 @@ void CallSessionPrivate::updatedByRemote () { if (deferUpdate || deferUpdateInternal) { if (state == CallSession::State::UpdatedByRemote && !deferUpdateInternal){ lInfo() << "CallSession [" << q << "]: UpdatedByRemoted was signaled but defered. LinphoneCore expects the application to call linphone_call_accept_update() later"; - } + } } else { if (state == CallSession::State::UpdatedByRemote) q->acceptUpdate(nullptr); diff --git a/src/conference/session/media-session.cpp b/src/conference/session/media-session.cpp index a124200cf..853d6ffc4 100644 --- a/src/conference/session/media-session.cpp +++ b/src/conference/session/media-session.cpp @@ -1920,8 +1920,7 @@ int MediaSessionPrivate::getVideoBandwidth (const SalMediaDescription *md, const else if (md->bandwidth > 0) { /* Case where b=AS is given globally, not per stream */ remoteBandwidth = PayloadTypeHandler::getRemainingBandwidthForVideo(md->bandwidth, audioBandwidth); - } else - remoteBandwidth = lp_config_get_int(linphone_core_get_config(q->getCore()->getCCore()), "net", "default_max_bandwidth", 1500); + } return PayloadTypeHandler::getMinBandwidth(PayloadTypeHandler::getRemainingBandwidthForVideo(linphone_core_get_upload_bandwidth(q->getCore()->getCCore()), audioBandwidth), remoteBandwidth); } diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 983630099..e6cfd375d 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -1970,6 +1970,30 @@ list MainDb::getChatMessageParticipantStates (const shared_p }; } +list MainDb::getChatMessageParticipantsInState (const shared_ptr &eventLog, const ChatMessage::State state) const { + return L_DB_TRANSACTION { + L_D(); + + const EventLogPrivate *dEventLog = eventLog->getPrivate(); + MainDbKeyPrivate *dEventKey = static_cast(dEventLog->dbKey).getPrivate(); + const long long &eventId = dEventKey->storageId; + + int stateInt = static_cast(state); + list participantsAddresses; + + static const string query = "SELECT sip_address.value" + " FROM sip_address, chat_message_participant" + " WHERE event_id = :eventId AND state = :state" + " AND sip_address.id = chat_message_participant.participant_sip_address_id"; + soci::rowset rows = (d->dbSession.getBackendSession()->prepare << query, soci::use(eventId), soci::use(stateInt)); + for (const auto &row : rows) { + participantsAddresses.push_back(IdentityAddress(row.get(0))); + } + + return participantsAddresses; + }; +} + ChatMessage::State MainDb::getChatMessageParticipantState ( const shared_ptr &eventLog, const IdentityAddress &participantAddress diff --git a/src/db/main-db.h b/src/db/main-db.h index f0f4b6f06..ae46a5e3e 100644 --- a/src/db/main-db.h +++ b/src/db/main-db.h @@ -91,6 +91,7 @@ public: std::list> getUnreadChatMessages (const ChatRoomId &chatRoomId) const; std::list getChatMessageParticipantStates (const std::shared_ptr &eventLog) const; + std::list getChatMessageParticipantsInState (const std::shared_ptr &eventLog, const ChatMessage::State state) const; ChatMessage::State getChatMessageParticipantState ( const std::shared_ptr &eventLog, const IdentityAddress &participantAddress diff --git a/src/nat/ice-agent.cpp b/src/nat/ice-agent.cpp index 726312f9f..cbc74cd4a 100644 --- a/src/nat/ice-agent.cpp +++ b/src/nat/ice-agent.cpp @@ -317,10 +317,12 @@ void IceAgent::updateLocalMediaDescriptionFromIce (SalMediaDescription *desc) { } if (firstCl) result = !!ice_check_list_selected_valid_local_candidate(firstCl, &rtpCandidate, nullptr); - if (result) + if (result) { strncpy(desc->addr, rtpCandidate->taddr.ip, sizeof(desc->addr)); - else + } else { lWarning() << "If ICE has completed successfully, rtp_candidate should be set!"; + ice_dump_valid_list(firstCl); + } } strncpy(desc->ice_pwd, ice_session_local_pwd(iceSession), sizeof(desc->ice_pwd)); diff --git a/src/sal/call-op.cpp b/src/sal/call-op.cpp index 238e6d255..a900ab5d8 100644 --- a/src/sal/call-op.cpp +++ b/src/sal/call-op.cpp @@ -1037,7 +1037,7 @@ int SalCallOp::decline(SalReason reason, const char *redirection /*optional*/){ } belle_sip_header_reason_t *SalCallOp::make_reason_header( const SalErrorInfo *info){ - if (info != NULL){ + if (info && info->reason != SalReasonNone) { belle_sip_header_reason_t* reason = BELLE_SIP_HEADER_REASON(belle_sip_header_reason_new()); belle_sip_header_reason_set_text(reason, info->status_string); belle_sip_header_reason_set_protocol(reason,info->protocol); @@ -1123,25 +1123,25 @@ int SalCallOp::update(const char *subject, bool_t no_user_consent) { int SalCallOp::cancel_invite_with_info(const SalErrorInfo *info) { belle_sip_request_t* cancel; ms_message("Cancelling INVITE request from [%s] to [%s] ",get_from(), get_to()); - - if (this->pending_client_trans == NULL){ + + if (this->pending_client_trans == NULL) { ms_warning("There is no transaction to cancel."); return -1; } - + cancel = belle_sip_client_transaction_create_cancel(this->pending_client_trans); - if (cancel){ - if (info != NULL){ + if (cancel) { + if (info && info->reason != SalReasonNone) { belle_sip_header_reason_t* reason = make_reason_header(info); belle_sip_message_add_header(BELLE_SIP_MESSAGE(cancel),BELLE_SIP_HEADER(reason)); } send_request(cancel); return 0; - }else if (this->dialog){ + } else if (this->dialog) { belle_sip_dialog_state_t state = belle_sip_dialog_get_state(this->dialog);; /*case where the response received is invalid (could not establish a dialog), but the transaction is not cancellable * because already terminated*/ - switch(state){ + switch(state) { case BELLE_SIP_DIALOG_EARLY: case BELLE_SIP_DIALOG_NULL: /*force kill the dialog*/ @@ -1303,7 +1303,7 @@ int SalCallOp::terminate_with_error(const SalErrorInfo *info) { int ret = 0; memset(&sei, 0, sizeof(sei)); - if (info == NULL && dialog_state != BELLE_SIP_DIALOG_CONFIRMED && this->dir == Dir::Incoming){ + if (info == NULL && dialog_state != BELLE_SIP_DIALOG_CONFIRMED && this->dir == Dir::Incoming) { /*the purpose of this line is to set a default SalErrorInfo for declining an incoming call (not yet established of course) */ sal_error_info_set(&sei,SalReasonDeclined, "SIP", 0, NULL, NULL); p_sei = &sei; @@ -1318,7 +1318,7 @@ int SalCallOp::terminate_with_error(const SalErrorInfo *info) { switch(dialog_state) { case BELLE_SIP_DIALOG_CONFIRMED: { belle_sip_request_t * req = belle_sip_dialog_create_request(this->dialog,"BYE"); - if (info != NULL){ + if (info && info->reason != SalReasonNone) { belle_sip_header_reason_t* reason = make_reason_header(info); belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(reason)); } @@ -1334,7 +1334,7 @@ int SalCallOp::terminate_with_error(const SalErrorInfo *info) { } else if (this->pending_client_trans){ if (belle_sip_transaction_get_state(BELLE_SIP_TRANSACTION(this->pending_client_trans)) == BELLE_SIP_TRANSACTION_PROCEEDING){ cancelling_invite(p_sei); - }else{ + } else { /* Case where the CANCEL cannot be sent because no provisional response was received so far. * The Op must be kept for the time of the transaction in case a response is received later. * The state is passed to Terminating to remember to terminate later. @@ -1351,7 +1351,7 @@ int SalCallOp::terminate_with_error(const SalErrorInfo *info) { if (this->dir == Dir::Incoming) { decline_with_error_info(p_sei,NULL); this->state=State::Terminated; - } else { + } else { cancelling_invite(p_sei); } break; diff --git a/tester/call_single_tester.c b/tester/call_single_tester.c index 88a6de226..08be21bf9 100644 --- a/tester/call_single_tester.c +++ b/tester/call_single_tester.c @@ -821,11 +821,11 @@ static void multiple_answers_call_with_media_relay(void) { linphone_core_remove_supported_tag(pauline->lc,"gruu"); linphone_core_remove_supported_tag(marie1->lc,"gruu"); linphone_core_remove_supported_tag(marie2->lc,"gruu"); - + linphone_core_manager_start(pauline, TRUE); linphone_core_manager_start(marie1, TRUE); linphone_core_manager_start(marie2, TRUE); - + LinphoneCall* call1, *call2; bctbx_list_t* lcs = bctbx_list_append(NULL,pauline->lc); @@ -1038,7 +1038,7 @@ static void terminate_call_with_error(void) { linphone_call_ref(out_call); ei = linphone_error_info_new(); - linphone_error_info_set(ei, NULL, LinphoneReasonNone, 200, "Call refused for security reason", NULL); + linphone_error_info_set(ei, NULL, LinphoneReasonUnknown, 200, "Call refused for security reason", NULL); BC_ASSERT_TRUE(wait_for(caller_mgr->lc, callee_mgr->lc, &caller_mgr->stat.number_of_LinphoneCallOutgoingInit,1)); BC_ASSERT_TRUE(wait_for(caller_mgr->lc, callee_mgr->lc, &callee_mgr->stat.number_of_LinphoneCallIncomingReceived, 1)); @@ -1093,7 +1093,7 @@ static void cancel_call_with_error(void) { linphone_call_ref(out_call); ei = linphone_error_info_new(); - linphone_error_info_set(ei, NULL, LinphoneReasonNone, 600, "Call has been cancelled", NULL); + linphone_error_info_set(ei, NULL, LinphoneReasonUnknown, 600, "Call has been cancelled", NULL); BC_ASSERT_TRUE(wait_for(caller_mgr->lc, callee_mgr->lc, &caller_mgr->stat.number_of_LinphoneCallOutgoingInit,1)); BC_ASSERT_TRUE(wait_for(caller_mgr->lc, callee_mgr->lc, &callee_mgr->stat.number_of_LinphoneCallIncomingReceived, 1)); @@ -1421,8 +1421,8 @@ static void call_declined_with_error(void) { LinphoneErrorInfo *ei = linphone_factory_create_error_info(factory); LinphoneErrorInfo *reason_ei = linphone_factory_create_error_info(factory); - linphone_error_info_set(ei, "SIP", LinphoneReasonUnknown, 603, "Decline", NULL); //ordre des arguments à vérifier - linphone_error_info_set(reason_ei, "hardware", LinphoneReasonUnknown, 66, "J'ai plus de batterie", NULL); + linphone_error_info_set(ei, "SIP", LinphoneReasonDeclined, 603, "Decline", NULL); //ordre des arguments à vérifier + linphone_error_info_set(reason_ei, "hardware", LinphoneReasonDeclined, 66, "J'ai plus de batterie", NULL); linphone_error_info_set_sub_error_info(ei, reason_ei); @@ -3153,22 +3153,25 @@ static void early_media_call_with_ringing_base(bool_t network_change){ _linphone_call_add_local_desc_changed_flag(marie_call, SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED); } - linphone_call_accept(linphone_core_get_current_call(pauline->lc)); - - BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); - connected_time=ms_get_cur_time_ms(); - BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); - - BC_ASSERT_PTR_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); - BC_ASSERT_FALSE(linphone_call_get_all_muted(marie_call)); - - liblinphone_tester_check_rtcp(marie, pauline); - /*just to have a call duration !=0*/ - wait_for_list(lcs,&dummy,1,2000); - - end_call(pauline, marie); - ended_time=ms_get_cur_time_ms(); - BC_ASSERT_LOWER( labs((long)((linphone_call_log_get_duration(marie_call_log)*1000) - (int64_t)(ended_time - connected_time))), 1000, long, "%ld"); + if (linphone_core_get_current_call(pauline->lc) + && linphone_call_get_state(linphone_core_get_current_call(pauline->lc)) == LinphoneCallIncomingEarlyMedia) { + linphone_call_accept(linphone_core_get_current_call(pauline->lc)); + + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); + connected_time=ms_get_cur_time_ms(); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + + BC_ASSERT_PTR_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); + BC_ASSERT_FALSE(linphone_call_get_all_muted(marie_call)); + + liblinphone_tester_check_rtcp(marie, pauline); + /*just to have a call duration !=0*/ + wait_for_list(lcs,&dummy,1,2000); + + end_call(pauline, marie); + ended_time=ms_get_cur_time_ms(); + BC_ASSERT_LOWER( labs((long)((linphone_call_log_get_duration(marie_call_log)*1000) - (int64_t)(ended_time - connected_time))), 1000, long, "%ld"); + } bctbx_list_free(lcs); } @@ -5908,7 +5911,7 @@ static void call_with_ice_without_stun2(void){ static void call_with_ice_stun_not_responding(void){ LinphoneCoreManager * marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager *pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); - + /*set dummy stun servers*/ linphone_core_set_stun_server(marie->lc, "belledonne-communications.com:443"); linphone_core_set_stun_server(pauline->lc, "belledonne-communications.com:443"); diff --git a/tester/call_video_tester.c b/tester/call_video_tester.c index d74fbd2f8..4b4efb5ad 100644 --- a/tester/call_video_tester.c +++ b/tester/call_video_tester.c @@ -2072,6 +2072,97 @@ static void video_call_with_high_bandwidth_available(void) { linphone_core_manager_destroy(pauline); } +static void video_call_expected_fps_for_specified_bandwidth(int bandwidth, int fps, const char *resolution) { + LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); + LinphoneVideoPolicy pol = {0}; + OrtpNetworkSimulatorParams simparams = { 0 }; + + if (ms_factory_get_cpu_count(linphone_core_get_ms_factory(marie->lc)) >= 2) { + linphone_core_set_video_device(marie->lc, "Mire: Mire (synthetic moving picture)"); + linphone_core_enable_video_capture(marie->lc, TRUE); + linphone_core_enable_video_display(marie->lc, TRUE); + linphone_core_enable_video_capture(pauline->lc, TRUE); + linphone_core_enable_video_display(pauline->lc, TRUE); + + pol.automatically_accept = TRUE; + pol.automatically_initiate = TRUE; + linphone_core_set_video_policy(marie->lc, &pol); + linphone_core_set_video_policy(pauline->lc, &pol); + + linphone_core_set_preferred_video_size_by_name(marie->lc, resolution); + simparams.mode = OrtpNetworkSimulatorOutbound; + simparams.enabled = TRUE; + simparams.max_bandwidth = (float)bandwidth; + simparams.max_buffer_size = bandwidth; + simparams.latency = 60; + + linphone_core_set_network_simulator_params(marie->lc, &simparams); + + if (BC_ASSERT_TRUE(call(marie, pauline))){ + LinphoneCall *call = linphone_core_get_current_call(marie->lc); + + /*wait for the first TMMBR*/ + BC_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &marie->stat.last_tmmbr_value_received, 1, 10000)); + + VideoStream *vstream = (VideoStream *)linphone_call_get_stream(call, LinphoneStreamTypeVideo); + BC_ASSERT_EQUAL((int)vstream->configured_fps, fps, int, "%d"); + + end_call(marie, pauline); + } + } else { + BC_PASS("Test requires at least a dual core"); + } + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + +/* + * This test simulates a video call with a lower bandwidth than the required_bitrate of the lowest given configuration. + * The stream from pauline to marie is not under test. + * It checks that after a few seconds marie, after receiving a TMMBR, has her fps set to the lowest given configuration. + * This test requires at least a computer with 2 CPUs. + * +**/ +static void video_call_expected_fps_for_low_bandwidth(void) { +#if defined(__ANDROID__) || (TARGET_OS_IPHONE == 1) || defined(__arm__) || defined(_M_ARM) + video_call_expected_fps_for_specified_bandwidth(80000, 10, "qvga"); +#else + video_call_expected_fps_for_specified_bandwidth(250000, 15, "vga"); +#endif +} + +/* + * This test simulates a video call with a regular bandwidth that is between a given configuration. + * The stream from pauline to marie is not under test. + * It checks that after a few seconds marie, after receiving a TMMBR, has her fps set to the expected given configuration. + * This test requires at least a computer with 2 CPUs. + * +**/ +static void video_call_expected_fps_for_regular_bandwidth(void) { +#if defined(__ANDROID__) || (TARGET_OS_IPHONE == 1) || defined(__arm__) || defined(_M_ARM) + video_call_expected_fps_for_specified_bandwidth(500000, 12, "vga"); +#else + video_call_expected_fps_for_specified_bandwidth(450000, 25, "vga"); +#endif +} + +/* + * This test simulates a video call with a higher bandwidth than the bitrate_limit of the highest given configuration. + * The stream from pauline to marie is not under test. + * It checks that after a few seconds marie, after receiving a TMMBR, has her fps set to the highest given configuration. + * This test requires at least a computer with 2 CPUs. + * +**/ +static void video_call_expected_fps_for_high_bandwidth(void) { +#if defined(__ANDROID__) || (TARGET_OS_IPHONE == 1) || defined(__arm__) || defined(_M_ARM) + video_call_expected_fps_for_specified_bandwidth(400000, 12, "qcif"); +#else + video_call_expected_fps_for_specified_bandwidth(5000000, 30, "vga"); +#endif +} + test_t call_video_tests[] = { #ifdef VIDEO_ENABLED TEST_NO_TAG("Call paused resumed with video", call_paused_resumed_with_video), @@ -2140,7 +2231,10 @@ test_t call_video_tests[] = { TEST_NO_TAG("Video call with no audio and no video codec", video_call_with_no_audio_and_no_video_codec), TEST_NO_TAG("Call with early media and no SDP in 200 Ok with video", call_with_early_media_and_no_sdp_in_200_with_video), TEST_NO_TAG("Video call with thin congestion", video_call_with_thin_congestion), - TEST_NO_TAG("Video call with high bandwidth available", video_call_with_high_bandwidth_available) + TEST_NO_TAG("Video call with high bandwidth available", video_call_with_high_bandwidth_available), + TEST_NO_TAG("Video call expected FPS for low bandwidth", video_call_expected_fps_for_low_bandwidth), + TEST_NO_TAG("Video call expected FPS for regular bandwidth", video_call_expected_fps_for_regular_bandwidth), + TEST_NO_TAG("Video call expected FPS for high bandwidth", video_call_expected_fps_for_high_bandwidth) #endif }; diff --git a/tester/flexisip/userdb.conf b/tester/flexisip/userdb.conf index 5e861921d..b5d995365 100644 --- a/tester/flexisip/userdb.conf +++ b/tester/flexisip/userdb.conf @@ -1,9 +1,2012 @@ version:1 -liblinphone_tester@sip.example.org clrtxt:secret ; -liblinphone_tester@auth.example.org clrtxt:secret ; -liblinphone_tester@auth1.example.org clrtxt:secret ; -tester@sip.example.org clrtxt:secret ; -pauline@sip.example.org clrtxt:secret ; -marie@sip.example.org cltxt:secret ; -laure@sip.example.org clrtxt:secret ; -bellesip@sip.example.org clrtxt:secret ; +liblinphone_tester@sip.example.org md5:19ffdcec6adc70629617046a60e529fc ; liblinphone_tester +33123456789 +liblinphone_tester@auth.example.org md5:db9ddf59cb75ae15f51745192d23ddae ; +liblinphone_tester@auth1.example.org md5:fe32fa7157d629145f1282a73a36a961 ; +tester@sip.example.org md5:61d963d04c360eceb424043e0d53676b ; +pauline@sip.example.org md5:46b03c8f72e61f4340a6d3d06a726d2e ; +marie@sip.example.org md5:c4ce0fe4c1c82e4b700726e085aee9b3 ; +laure@sip.example.org md5:63d09951793c1361768531f9a9011331 ; +bellesip@sip.example.org md5:2fc013743b860819a784b0e6c4bee11a ; +liblinphone_sha_tester@sip.example.org clrtxt:secret ; +test%20username@sip.example.org clrtxt:secret ; + +sip:user_1@sip.example.org clrtxt:secret ; +sip:user_2@sip.example.org clrtxt:secret ; +sip:user_3@sip.example.org clrtxt:secret ; +sip:user_4@sip.example.org clrtxt:secret ; +sip:user_5@sip.example.org clrtxt:secret ; +sip:user_6@sip.example.org clrtxt:secret ; +sip:user_7@sip.example.org clrtxt:secret ; +sip:user_8@sip.example.org clrtxt:secret ; +sip:user_9@sip.example.org clrtxt:secret ; +sip:user_10@sip.example.org clrtxt:secret ; +sip:user_11@sip.example.org clrtxt:secret ; +sip:user_12@sip.example.org clrtxt:secret ; +sip:user_13@sip.example.org clrtxt:secret ; +sip:user_14@sip.example.org clrtxt:secret ; +sip:user_15@sip.example.org clrtxt:secret ; +sip:user_16@sip.example.org clrtxt:secret ; +sip:user_17@sip.example.org clrtxt:secret ; +sip:user_18@sip.example.org clrtxt:secret ; +sip:user_19@sip.example.org clrtxt:secret ; +sip:user_20@sip.example.org clrtxt:secret ; +sip:user_21@sip.example.org clrtxt:secret ; +sip:user_22@sip.example.org clrtxt:secret ; +sip:user_23@sip.example.org clrtxt:secret ; +sip:user_24@sip.example.org clrtxt:secret ; +sip:user_25@sip.example.org clrtxt:secret ; +sip:user_26@sip.example.org clrtxt:secret ; +sip:user_27@sip.example.org clrtxt:secret ; +sip:user_28@sip.example.org clrtxt:secret ; +sip:user_29@sip.example.org clrtxt:secret ; +sip:user_30@sip.example.org clrtxt:secret ; +sip:user_31@sip.example.org clrtxt:secret ; +sip:user_32@sip.example.org clrtxt:secret ; +sip:user_33@sip.example.org clrtxt:secret ; +sip:user_34@sip.example.org clrtxt:secret ; +sip:user_35@sip.example.org clrtxt:secret ; +sip:user_36@sip.example.org clrtxt:secret ; +sip:user_37@sip.example.org clrtxt:secret ; +sip:user_38@sip.example.org clrtxt:secret ; +sip:user_39@sip.example.org clrtxt:secret ; +sip:user_40@sip.example.org clrtxt:secret ; +sip:user_41@sip.example.org clrtxt:secret ; +sip:user_42@sip.example.org clrtxt:secret ; +sip:user_43@sip.example.org clrtxt:secret ; +sip:user_44@sip.example.org clrtxt:secret ; +sip:user_45@sip.example.org clrtxt:secret ; +sip:user_46@sip.example.org clrtxt:secret ; +sip:user_47@sip.example.org clrtxt:secret ; +sip:user_48@sip.example.org clrtxt:secret ; +sip:user_49@sip.example.org clrtxt:secret ; +sip:user_50@sip.example.org clrtxt:secret ; +sip:user_51@sip.example.org clrtxt:secret ; +sip:user_52@sip.example.org clrtxt:secret ; +sip:user_53@sip.example.org clrtxt:secret ; +sip:user_54@sip.example.org clrtxt:secret ; +sip:user_55@sip.example.org clrtxt:secret ; +sip:user_56@sip.example.org clrtxt:secret ; +sip:user_57@sip.example.org clrtxt:secret ; +sip:user_58@sip.example.org clrtxt:secret ; +sip:user_59@sip.example.org clrtxt:secret ; +sip:user_60@sip.example.org clrtxt:secret ; +sip:user_61@sip.example.org clrtxt:secret ; +sip:user_62@sip.example.org clrtxt:secret ; +sip:user_63@sip.example.org clrtxt:secret ; +sip:user_64@sip.example.org clrtxt:secret ; +sip:user_65@sip.example.org clrtxt:secret ; +sip:user_66@sip.example.org clrtxt:secret ; +sip:user_67@sip.example.org clrtxt:secret ; +sip:user_68@sip.example.org clrtxt:secret ; +sip:user_69@sip.example.org clrtxt:secret ; +sip:user_70@sip.example.org clrtxt:secret ; +sip:user_71@sip.example.org clrtxt:secret ; +sip:user_72@sip.example.org clrtxt:secret ; +sip:user_73@sip.example.org clrtxt:secret ; +sip:user_74@sip.example.org clrtxt:secret ; +sip:user_75@sip.example.org clrtxt:secret ; +sip:user_76@sip.example.org clrtxt:secret ; +sip:user_77@sip.example.org clrtxt:secret ; +sip:user_78@sip.example.org clrtxt:secret ; +sip:user_79@sip.example.org clrtxt:secret ; +sip:user_80@sip.example.org clrtxt:secret ; +sip:user_81@sip.example.org clrtxt:secret ; +sip:user_82@sip.example.org clrtxt:secret ; +sip:user_83@sip.example.org clrtxt:secret ; +sip:user_84@sip.example.org clrtxt:secret ; +sip:user_85@sip.example.org clrtxt:secret ; +sip:user_86@sip.example.org clrtxt:secret ; +sip:user_87@sip.example.org clrtxt:secret ; +sip:user_88@sip.example.org clrtxt:secret ; +sip:user_89@sip.example.org clrtxt:secret ; +sip:user_90@sip.example.org clrtxt:secret ; +sip:user_91@sip.example.org clrtxt:secret ; +sip:user_92@sip.example.org clrtxt:secret ; +sip:user_93@sip.example.org clrtxt:secret ; +sip:user_94@sip.example.org clrtxt:secret ; +sip:user_95@sip.example.org clrtxt:secret ; +sip:user_96@sip.example.org clrtxt:secret ; +sip:user_97@sip.example.org clrtxt:secret ; +sip:user_98@sip.example.org clrtxt:secret ; +sip:user_99@sip.example.org clrtxt:secret ; +sip:user_100@sip.example.org clrtxt:secret ; +sip:user_101@sip.example.org clrtxt:secret ; +sip:user_102@sip.example.org clrtxt:secret ; +sip:user_103@sip.example.org clrtxt:secret ; +sip:user_104@sip.example.org clrtxt:secret ; +sip:user_105@sip.example.org clrtxt:secret ; +sip:user_106@sip.example.org clrtxt:secret ; +sip:user_107@sip.example.org clrtxt:secret ; +sip:user_108@sip.example.org clrtxt:secret ; +sip:user_109@sip.example.org clrtxt:secret ; +sip:user_110@sip.example.org clrtxt:secret ; +sip:user_111@sip.example.org clrtxt:secret ; +sip:user_112@sip.example.org clrtxt:secret ; +sip:user_113@sip.example.org clrtxt:secret ; +sip:user_114@sip.example.org clrtxt:secret ; +sip:user_115@sip.example.org clrtxt:secret ; +sip:user_116@sip.example.org clrtxt:secret ; +sip:user_117@sip.example.org clrtxt:secret ; +sip:user_118@sip.example.org clrtxt:secret ; +sip:user_119@sip.example.org clrtxt:secret ; +sip:user_120@sip.example.org clrtxt:secret ; +sip:user_121@sip.example.org clrtxt:secret ; +sip:user_122@sip.example.org clrtxt:secret ; +sip:user_123@sip.example.org clrtxt:secret ; +sip:user_124@sip.example.org clrtxt:secret ; +sip:user_125@sip.example.org clrtxt:secret ; +sip:user_126@sip.example.org clrtxt:secret ; +sip:user_127@sip.example.org clrtxt:secret ; +sip:user_128@sip.example.org clrtxt:secret ; +sip:user_129@sip.example.org clrtxt:secret ; +sip:user_130@sip.example.org clrtxt:secret ; +sip:user_131@sip.example.org clrtxt:secret ; +sip:user_132@sip.example.org clrtxt:secret ; +sip:user_133@sip.example.org clrtxt:secret ; +sip:user_134@sip.example.org clrtxt:secret ; +sip:user_135@sip.example.org clrtxt:secret ; +sip:user_136@sip.example.org clrtxt:secret ; +sip:user_137@sip.example.org clrtxt:secret ; +sip:user_138@sip.example.org clrtxt:secret ; +sip:user_139@sip.example.org clrtxt:secret ; +sip:user_140@sip.example.org clrtxt:secret ; +sip:user_141@sip.example.org clrtxt:secret ; +sip:user_142@sip.example.org clrtxt:secret ; +sip:user_143@sip.example.org clrtxt:secret ; +sip:user_144@sip.example.org clrtxt:secret ; +sip:user_145@sip.example.org clrtxt:secret ; +sip:user_146@sip.example.org clrtxt:secret ; +sip:user_147@sip.example.org clrtxt:secret ; +sip:user_148@sip.example.org clrtxt:secret ; +sip:user_149@sip.example.org clrtxt:secret ; +sip:user_150@sip.example.org clrtxt:secret ; +sip:user_151@sip.example.org clrtxt:secret ; +sip:user_152@sip.example.org clrtxt:secret ; +sip:user_153@sip.example.org clrtxt:secret ; +sip:user_154@sip.example.org clrtxt:secret ; +sip:user_155@sip.example.org clrtxt:secret ; +sip:user_156@sip.example.org clrtxt:secret ; +sip:user_157@sip.example.org clrtxt:secret ; +sip:user_158@sip.example.org clrtxt:secret ; +sip:user_159@sip.example.org clrtxt:secret ; +sip:user_160@sip.example.org clrtxt:secret ; +sip:user_161@sip.example.org clrtxt:secret ; +sip:user_162@sip.example.org clrtxt:secret ; +sip:user_163@sip.example.org clrtxt:secret ; +sip:user_164@sip.example.org clrtxt:secret ; +sip:user_165@sip.example.org clrtxt:secret ; +sip:user_166@sip.example.org clrtxt:secret ; +sip:user_167@sip.example.org clrtxt:secret ; +sip:user_168@sip.example.org clrtxt:secret ; +sip:user_169@sip.example.org clrtxt:secret ; +sip:user_170@sip.example.org clrtxt:secret ; +sip:user_171@sip.example.org clrtxt:secret ; +sip:user_172@sip.example.org clrtxt:secret ; +sip:user_173@sip.example.org clrtxt:secret ; +sip:user_174@sip.example.org clrtxt:secret ; +sip:user_175@sip.example.org clrtxt:secret ; +sip:user_176@sip.example.org clrtxt:secret ; +sip:user_177@sip.example.org clrtxt:secret ; +sip:user_178@sip.example.org clrtxt:secret ; +sip:user_179@sip.example.org clrtxt:secret ; +sip:user_180@sip.example.org clrtxt:secret ; +sip:user_181@sip.example.org clrtxt:secret ; +sip:user_182@sip.example.org clrtxt:secret ; +sip:user_183@sip.example.org clrtxt:secret ; +sip:user_184@sip.example.org clrtxt:secret ; +sip:user_185@sip.example.org clrtxt:secret ; +sip:user_186@sip.example.org clrtxt:secret ; +sip:user_187@sip.example.org clrtxt:secret ; +sip:user_188@sip.example.org clrtxt:secret ; +sip:user_189@sip.example.org clrtxt:secret ; +sip:user_190@sip.example.org clrtxt:secret ; +sip:user_191@sip.example.org clrtxt:secret ; +sip:user_192@sip.example.org clrtxt:secret ; +sip:user_193@sip.example.org clrtxt:secret ; +sip:user_194@sip.example.org clrtxt:secret ; +sip:user_195@sip.example.org clrtxt:secret ; +sip:user_196@sip.example.org clrtxt:secret ; +sip:user_197@sip.example.org clrtxt:secret ; +sip:user_198@sip.example.org clrtxt:secret ; +sip:user_199@sip.example.org clrtxt:secret ; +sip:user_200@sip.example.org clrtxt:secret ; +sip:user_201@sip.example.org clrtxt:secret ; +sip:user_202@sip.example.org clrtxt:secret ; +sip:user_203@sip.example.org clrtxt:secret ; +sip:user_204@sip.example.org clrtxt:secret ; +sip:user_205@sip.example.org clrtxt:secret ; +sip:user_206@sip.example.org clrtxt:secret ; +sip:user_207@sip.example.org clrtxt:secret ; +sip:user_208@sip.example.org clrtxt:secret ; +sip:user_209@sip.example.org clrtxt:secret ; +sip:user_210@sip.example.org clrtxt:secret ; +sip:user_211@sip.example.org clrtxt:secret ; +sip:user_212@sip.example.org clrtxt:secret ; +sip:user_213@sip.example.org clrtxt:secret ; +sip:user_214@sip.example.org clrtxt:secret ; +sip:user_215@sip.example.org clrtxt:secret ; +sip:user_216@sip.example.org clrtxt:secret ; +sip:user_217@sip.example.org clrtxt:secret ; +sip:user_218@sip.example.org clrtxt:secret ; +sip:user_219@sip.example.org clrtxt:secret ; +sip:user_220@sip.example.org clrtxt:secret ; +sip:user_221@sip.example.org clrtxt:secret ; +sip:user_222@sip.example.org clrtxt:secret ; +sip:user_223@sip.example.org clrtxt:secret ; +sip:user_224@sip.example.org clrtxt:secret ; +sip:user_225@sip.example.org clrtxt:secret ; +sip:user_226@sip.example.org clrtxt:secret ; +sip:user_227@sip.example.org clrtxt:secret ; +sip:user_228@sip.example.org clrtxt:secret ; +sip:user_229@sip.example.org clrtxt:secret ; +sip:user_230@sip.example.org clrtxt:secret ; +sip:user_231@sip.example.org clrtxt:secret ; +sip:user_232@sip.example.org clrtxt:secret ; +sip:user_233@sip.example.org clrtxt:secret ; +sip:user_234@sip.example.org clrtxt:secret ; +sip:user_235@sip.example.org clrtxt:secret ; +sip:user_236@sip.example.org clrtxt:secret ; +sip:user_237@sip.example.org clrtxt:secret ; +sip:user_238@sip.example.org clrtxt:secret ; +sip:user_239@sip.example.org clrtxt:secret ; +sip:user_240@sip.example.org clrtxt:secret ; +sip:user_241@sip.example.org clrtxt:secret ; +sip:user_242@sip.example.org clrtxt:secret ; +sip:user_243@sip.example.org clrtxt:secret ; +sip:user_244@sip.example.org clrtxt:secret ; +sip:user_245@sip.example.org clrtxt:secret ; +sip:user_246@sip.example.org clrtxt:secret ; +sip:user_247@sip.example.org clrtxt:secret ; +sip:user_248@sip.example.org clrtxt:secret ; +sip:user_249@sip.example.org clrtxt:secret ; +sip:user_250@sip.example.org clrtxt:secret ; +sip:user_251@sip.example.org clrtxt:secret ; +sip:user_252@sip.example.org clrtxt:secret ; +sip:user_253@sip.example.org clrtxt:secret ; +sip:user_254@sip.example.org clrtxt:secret ; +sip:user_255@sip.example.org clrtxt:secret ; +sip:user_256@sip.example.org clrtxt:secret ; +sip:user_257@sip.example.org clrtxt:secret ; +sip:user_258@sip.example.org clrtxt:secret ; +sip:user_259@sip.example.org clrtxt:secret ; +sip:user_260@sip.example.org clrtxt:secret ; +sip:user_261@sip.example.org clrtxt:secret ; +sip:user_262@sip.example.org clrtxt:secret ; +sip:user_263@sip.example.org clrtxt:secret ; +sip:user_264@sip.example.org clrtxt:secret ; +sip:user_265@sip.example.org clrtxt:secret ; +sip:user_266@sip.example.org clrtxt:secret ; +sip:user_267@sip.example.org clrtxt:secret ; +sip:user_268@sip.example.org clrtxt:secret ; +sip:user_269@sip.example.org clrtxt:secret ; +sip:user_270@sip.example.org clrtxt:secret ; +sip:user_271@sip.example.org clrtxt:secret ; +sip:user_272@sip.example.org clrtxt:secret ; +sip:user_273@sip.example.org clrtxt:secret ; +sip:user_274@sip.example.org clrtxt:secret ; +sip:user_275@sip.example.org clrtxt:secret ; +sip:user_276@sip.example.org clrtxt:secret ; +sip:user_277@sip.example.org clrtxt:secret ; +sip:user_278@sip.example.org clrtxt:secret ; +sip:user_279@sip.example.org clrtxt:secret ; +sip:user_280@sip.example.org clrtxt:secret ; +sip:user_281@sip.example.org clrtxt:secret ; +sip:user_282@sip.example.org clrtxt:secret ; +sip:user_283@sip.example.org clrtxt:secret ; +sip:user_284@sip.example.org clrtxt:secret ; +sip:user_285@sip.example.org clrtxt:secret ; +sip:user_286@sip.example.org clrtxt:secret ; +sip:user_287@sip.example.org clrtxt:secret ; +sip:user_288@sip.example.org clrtxt:secret ; +sip:user_289@sip.example.org clrtxt:secret ; +sip:user_290@sip.example.org clrtxt:secret ; +sip:user_291@sip.example.org clrtxt:secret ; +sip:user_292@sip.example.org clrtxt:secret ; +sip:user_293@sip.example.org clrtxt:secret ; +sip:user_294@sip.example.org clrtxt:secret ; +sip:user_295@sip.example.org clrtxt:secret ; +sip:user_296@sip.example.org clrtxt:secret ; +sip:user_297@sip.example.org clrtxt:secret ; +sip:user_298@sip.example.org clrtxt:secret ; +sip:user_299@sip.example.org clrtxt:secret ; +sip:user_300@sip.example.org clrtxt:secret ; +sip:user_301@sip.example.org clrtxt:secret ; +sip:user_302@sip.example.org clrtxt:secret ; +sip:user_303@sip.example.org clrtxt:secret ; +sip:user_304@sip.example.org clrtxt:secret ; +sip:user_305@sip.example.org clrtxt:secret ; +sip:user_306@sip.example.org clrtxt:secret ; +sip:user_307@sip.example.org clrtxt:secret ; +sip:user_308@sip.example.org clrtxt:secret ; +sip:user_309@sip.example.org clrtxt:secret ; +sip:user_310@sip.example.org clrtxt:secret ; +sip:user_311@sip.example.org clrtxt:secret ; +sip:user_312@sip.example.org clrtxt:secret ; +sip:user_313@sip.example.org clrtxt:secret ; +sip:user_314@sip.example.org clrtxt:secret ; +sip:user_315@sip.example.org clrtxt:secret ; +sip:user_316@sip.example.org clrtxt:secret ; +sip:user_317@sip.example.org clrtxt:secret ; +sip:user_318@sip.example.org clrtxt:secret ; +sip:user_319@sip.example.org clrtxt:secret ; +sip:user_320@sip.example.org clrtxt:secret ; +sip:user_321@sip.example.org clrtxt:secret ; +sip:user_322@sip.example.org clrtxt:secret ; +sip:user_323@sip.example.org clrtxt:secret ; +sip:user_324@sip.example.org clrtxt:secret ; +sip:user_325@sip.example.org clrtxt:secret ; +sip:user_326@sip.example.org clrtxt:secret ; +sip:user_327@sip.example.org clrtxt:secret ; +sip:user_328@sip.example.org clrtxt:secret ; +sip:user_329@sip.example.org clrtxt:secret ; +sip:user_330@sip.example.org clrtxt:secret ; +sip:user_331@sip.example.org clrtxt:secret ; +sip:user_332@sip.example.org clrtxt:secret ; +sip:user_333@sip.example.org clrtxt:secret ; +sip:user_334@sip.example.org clrtxt:secret ; +sip:user_335@sip.example.org clrtxt:secret ; +sip:user_336@sip.example.org clrtxt:secret ; +sip:user_337@sip.example.org clrtxt:secret ; +sip:user_338@sip.example.org clrtxt:secret ; +sip:user_339@sip.example.org clrtxt:secret ; +sip:user_340@sip.example.org clrtxt:secret ; +sip:user_341@sip.example.org clrtxt:secret ; +sip:user_342@sip.example.org clrtxt:secret ; +sip:user_343@sip.example.org clrtxt:secret ; +sip:user_344@sip.example.org clrtxt:secret ; +sip:user_345@sip.example.org clrtxt:secret ; +sip:user_346@sip.example.org clrtxt:secret ; +sip:user_347@sip.example.org clrtxt:secret ; +sip:user_348@sip.example.org clrtxt:secret ; +sip:user_349@sip.example.org clrtxt:secret ; +sip:user_350@sip.example.org clrtxt:secret ; +sip:user_351@sip.example.org clrtxt:secret ; +sip:user_352@sip.example.org clrtxt:secret ; +sip:user_353@sip.example.org clrtxt:secret ; +sip:user_354@sip.example.org clrtxt:secret ; +sip:user_355@sip.example.org clrtxt:secret ; +sip:user_356@sip.example.org clrtxt:secret ; +sip:user_357@sip.example.org clrtxt:secret ; +sip:user_358@sip.example.org clrtxt:secret ; +sip:user_359@sip.example.org clrtxt:secret ; +sip:user_360@sip.example.org clrtxt:secret ; +sip:user_361@sip.example.org clrtxt:secret ; +sip:user_362@sip.example.org clrtxt:secret ; +sip:user_363@sip.example.org clrtxt:secret ; +sip:user_364@sip.example.org clrtxt:secret ; +sip:user_365@sip.example.org clrtxt:secret ; +sip:user_366@sip.example.org clrtxt:secret ; +sip:user_367@sip.example.org clrtxt:secret ; +sip:user_368@sip.example.org clrtxt:secret ; +sip:user_369@sip.example.org clrtxt:secret ; +sip:user_370@sip.example.org clrtxt:secret ; +sip:user_371@sip.example.org clrtxt:secret ; +sip:user_372@sip.example.org clrtxt:secret ; +sip:user_373@sip.example.org clrtxt:secret ; +sip:user_374@sip.example.org clrtxt:secret ; +sip:user_375@sip.example.org clrtxt:secret ; +sip:user_376@sip.example.org clrtxt:secret ; +sip:user_377@sip.example.org clrtxt:secret ; +sip:user_378@sip.example.org clrtxt:secret ; +sip:user_379@sip.example.org clrtxt:secret ; +sip:user_380@sip.example.org clrtxt:secret ; +sip:user_381@sip.example.org clrtxt:secret ; +sip:user_382@sip.example.org clrtxt:secret ; +sip:user_383@sip.example.org clrtxt:secret ; +sip:user_384@sip.example.org clrtxt:secret ; +sip:user_385@sip.example.org clrtxt:secret ; +sip:user_386@sip.example.org clrtxt:secret ; +sip:user_387@sip.example.org clrtxt:secret ; +sip:user_388@sip.example.org clrtxt:secret ; +sip:user_389@sip.example.org clrtxt:secret ; +sip:user_390@sip.example.org clrtxt:secret ; +sip:user_391@sip.example.org clrtxt:secret ; +sip:user_392@sip.example.org clrtxt:secret ; +sip:user_393@sip.example.org clrtxt:secret ; +sip:user_394@sip.example.org clrtxt:secret ; +sip:user_395@sip.example.org clrtxt:secret ; +sip:user_396@sip.example.org clrtxt:secret ; +sip:user_397@sip.example.org clrtxt:secret ; +sip:user_398@sip.example.org clrtxt:secret ; +sip:user_399@sip.example.org clrtxt:secret ; +sip:user_400@sip.example.org clrtxt:secret ; +sip:user_401@sip.example.org clrtxt:secret ; +sip:user_402@sip.example.org clrtxt:secret ; +sip:user_403@sip.example.org clrtxt:secret ; +sip:user_404@sip.example.org clrtxt:secret ; +sip:user_405@sip.example.org clrtxt:secret ; +sip:user_406@sip.example.org clrtxt:secret ; +sip:user_407@sip.example.org clrtxt:secret ; +sip:user_408@sip.example.org clrtxt:secret ; +sip:user_409@sip.example.org clrtxt:secret ; +sip:user_410@sip.example.org clrtxt:secret ; +sip:user_411@sip.example.org clrtxt:secret ; +sip:user_412@sip.example.org clrtxt:secret ; +sip:user_413@sip.example.org clrtxt:secret ; +sip:user_414@sip.example.org clrtxt:secret ; +sip:user_415@sip.example.org clrtxt:secret ; +sip:user_416@sip.example.org clrtxt:secret ; +sip:user_417@sip.example.org clrtxt:secret ; +sip:user_418@sip.example.org clrtxt:secret ; +sip:user_419@sip.example.org clrtxt:secret ; +sip:user_420@sip.example.org clrtxt:secret ; +sip:user_421@sip.example.org clrtxt:secret ; +sip:user_422@sip.example.org clrtxt:secret ; +sip:user_423@sip.example.org clrtxt:secret ; +sip:user_424@sip.example.org clrtxt:secret ; +sip:user_425@sip.example.org clrtxt:secret ; +sip:user_426@sip.example.org clrtxt:secret ; +sip:user_427@sip.example.org clrtxt:secret ; +sip:user_428@sip.example.org clrtxt:secret ; +sip:user_429@sip.example.org clrtxt:secret ; +sip:user_430@sip.example.org clrtxt:secret ; +sip:user_431@sip.example.org clrtxt:secret ; +sip:user_432@sip.example.org clrtxt:secret ; +sip:user_433@sip.example.org clrtxt:secret ; +sip:user_434@sip.example.org clrtxt:secret ; +sip:user_435@sip.example.org clrtxt:secret ; +sip:user_436@sip.example.org clrtxt:secret ; +sip:user_437@sip.example.org clrtxt:secret ; +sip:user_438@sip.example.org clrtxt:secret ; +sip:user_439@sip.example.org clrtxt:secret ; +sip:user_440@sip.example.org clrtxt:secret ; +sip:user_441@sip.example.org clrtxt:secret ; +sip:user_442@sip.example.org clrtxt:secret ; +sip:user_443@sip.example.org clrtxt:secret ; +sip:user_444@sip.example.org clrtxt:secret ; +sip:user_445@sip.example.org clrtxt:secret ; +sip:user_446@sip.example.org clrtxt:secret ; +sip:user_447@sip.example.org clrtxt:secret ; +sip:user_448@sip.example.org clrtxt:secret ; +sip:user_449@sip.example.org clrtxt:secret ; +sip:user_450@sip.example.org clrtxt:secret ; +sip:user_451@sip.example.org clrtxt:secret ; +sip:user_452@sip.example.org clrtxt:secret ; +sip:user_453@sip.example.org clrtxt:secret ; +sip:user_454@sip.example.org clrtxt:secret ; +sip:user_455@sip.example.org clrtxt:secret ; +sip:user_456@sip.example.org clrtxt:secret ; +sip:user_457@sip.example.org clrtxt:secret ; +sip:user_458@sip.example.org clrtxt:secret ; +sip:user_459@sip.example.org clrtxt:secret ; +sip:user_460@sip.example.org clrtxt:secret ; +sip:user_461@sip.example.org clrtxt:secret ; +sip:user_462@sip.example.org clrtxt:secret ; +sip:user_463@sip.example.org clrtxt:secret ; +sip:user_464@sip.example.org clrtxt:secret ; +sip:user_465@sip.example.org clrtxt:secret ; +sip:user_466@sip.example.org clrtxt:secret ; +sip:user_467@sip.example.org clrtxt:secret ; +sip:user_468@sip.example.org clrtxt:secret ; +sip:user_469@sip.example.org clrtxt:secret ; +sip:user_470@sip.example.org clrtxt:secret ; +sip:user_471@sip.example.org clrtxt:secret ; +sip:user_472@sip.example.org clrtxt:secret ; +sip:user_473@sip.example.org clrtxt:secret ; +sip:user_474@sip.example.org clrtxt:secret ; +sip:user_475@sip.example.org clrtxt:secret ; +sip:user_476@sip.example.org clrtxt:secret ; +sip:user_477@sip.example.org clrtxt:secret ; +sip:user_478@sip.example.org clrtxt:secret ; +sip:user_479@sip.example.org clrtxt:secret ; +sip:user_480@sip.example.org clrtxt:secret ; +sip:user_481@sip.example.org clrtxt:secret ; +sip:user_482@sip.example.org clrtxt:secret ; +sip:user_483@sip.example.org clrtxt:secret ; +sip:user_484@sip.example.org clrtxt:secret ; +sip:user_485@sip.example.org clrtxt:secret ; +sip:user_486@sip.example.org clrtxt:secret ; +sip:user_487@sip.example.org clrtxt:secret ; +sip:user_488@sip.example.org clrtxt:secret ; +sip:user_489@sip.example.org clrtxt:secret ; +sip:user_490@sip.example.org clrtxt:secret ; +sip:user_491@sip.example.org clrtxt:secret ; +sip:user_492@sip.example.org clrtxt:secret ; +sip:user_493@sip.example.org clrtxt:secret ; +sip:user_494@sip.example.org clrtxt:secret ; +sip:user_495@sip.example.org clrtxt:secret ; +sip:user_496@sip.example.org clrtxt:secret ; +sip:user_497@sip.example.org clrtxt:secret ; +sip:user_498@sip.example.org clrtxt:secret ; +sip:user_499@sip.example.org clrtxt:secret ; +sip:user_500@sip.example.org clrtxt:secret ; +sip:user_501@sip.example.org clrtxt:secret ; +sip:user_502@sip.example.org clrtxt:secret ; +sip:user_503@sip.example.org clrtxt:secret ; +sip:user_504@sip.example.org clrtxt:secret ; +sip:user_505@sip.example.org clrtxt:secret ; +sip:user_506@sip.example.org clrtxt:secret ; +sip:user_507@sip.example.org clrtxt:secret ; +sip:user_508@sip.example.org clrtxt:secret ; +sip:user_509@sip.example.org clrtxt:secret ; +sip:user_510@sip.example.org clrtxt:secret ; +sip:user_511@sip.example.org clrtxt:secret ; +sip:user_512@sip.example.org clrtxt:secret ; +sip:user_513@sip.example.org clrtxt:secret ; +sip:user_514@sip.example.org clrtxt:secret ; +sip:user_515@sip.example.org clrtxt:secret ; +sip:user_516@sip.example.org clrtxt:secret ; +sip:user_517@sip.example.org clrtxt:secret ; +sip:user_518@sip.example.org clrtxt:secret ; +sip:user_519@sip.example.org clrtxt:secret ; +sip:user_520@sip.example.org clrtxt:secret ; +sip:user_521@sip.example.org clrtxt:secret ; +sip:user_522@sip.example.org clrtxt:secret ; +sip:user_523@sip.example.org clrtxt:secret ; +sip:user_524@sip.example.org clrtxt:secret ; +sip:user_525@sip.example.org clrtxt:secret ; +sip:user_526@sip.example.org clrtxt:secret ; +sip:user_527@sip.example.org clrtxt:secret ; +sip:user_528@sip.example.org clrtxt:secret ; +sip:user_529@sip.example.org clrtxt:secret ; +sip:user_530@sip.example.org clrtxt:secret ; +sip:user_531@sip.example.org clrtxt:secret ; +sip:user_532@sip.example.org clrtxt:secret ; +sip:user_533@sip.example.org clrtxt:secret ; +sip:user_534@sip.example.org clrtxt:secret ; +sip:user_535@sip.example.org clrtxt:secret ; +sip:user_536@sip.example.org clrtxt:secret ; +sip:user_537@sip.example.org clrtxt:secret ; +sip:user_538@sip.example.org clrtxt:secret ; +sip:user_539@sip.example.org clrtxt:secret ; +sip:user_540@sip.example.org clrtxt:secret ; +sip:user_541@sip.example.org clrtxt:secret ; +sip:user_542@sip.example.org clrtxt:secret ; +sip:user_543@sip.example.org clrtxt:secret ; +sip:user_544@sip.example.org clrtxt:secret ; +sip:user_545@sip.example.org clrtxt:secret ; +sip:user_546@sip.example.org clrtxt:secret ; +sip:user_547@sip.example.org clrtxt:secret ; +sip:user_548@sip.example.org clrtxt:secret ; +sip:user_549@sip.example.org clrtxt:secret ; +sip:user_550@sip.example.org clrtxt:secret ; +sip:user_551@sip.example.org clrtxt:secret ; +sip:user_552@sip.example.org clrtxt:secret ; +sip:user_553@sip.example.org clrtxt:secret ; +sip:user_554@sip.example.org clrtxt:secret ; +sip:user_555@sip.example.org clrtxt:secret ; +sip:user_556@sip.example.org clrtxt:secret ; +sip:user_557@sip.example.org clrtxt:secret ; +sip:user_558@sip.example.org clrtxt:secret ; +sip:user_559@sip.example.org clrtxt:secret ; +sip:user_560@sip.example.org clrtxt:secret ; +sip:user_561@sip.example.org clrtxt:secret ; +sip:user_562@sip.example.org clrtxt:secret ; +sip:user_563@sip.example.org clrtxt:secret ; +sip:user_564@sip.example.org clrtxt:secret ; +sip:user_565@sip.example.org clrtxt:secret ; +sip:user_566@sip.example.org clrtxt:secret ; +sip:user_567@sip.example.org clrtxt:secret ; +sip:user_568@sip.example.org clrtxt:secret ; +sip:user_569@sip.example.org clrtxt:secret ; +sip:user_570@sip.example.org clrtxt:secret ; +sip:user_571@sip.example.org clrtxt:secret ; +sip:user_572@sip.example.org clrtxt:secret ; +sip:user_573@sip.example.org clrtxt:secret ; +sip:user_574@sip.example.org clrtxt:secret ; +sip:user_575@sip.example.org clrtxt:secret ; +sip:user_576@sip.example.org clrtxt:secret ; +sip:user_577@sip.example.org clrtxt:secret ; +sip:user_578@sip.example.org clrtxt:secret ; +sip:user_579@sip.example.org clrtxt:secret ; +sip:user_580@sip.example.org clrtxt:secret ; +sip:user_581@sip.example.org clrtxt:secret ; +sip:user_582@sip.example.org clrtxt:secret ; +sip:user_583@sip.example.org clrtxt:secret ; +sip:user_584@sip.example.org clrtxt:secret ; +sip:user_585@sip.example.org clrtxt:secret ; +sip:user_586@sip.example.org clrtxt:secret ; +sip:user_587@sip.example.org clrtxt:secret ; +sip:user_588@sip.example.org clrtxt:secret ; +sip:user_589@sip.example.org clrtxt:secret ; +sip:user_590@sip.example.org clrtxt:secret ; +sip:user_591@sip.example.org clrtxt:secret ; +sip:user_592@sip.example.org clrtxt:secret ; +sip:user_593@sip.example.org clrtxt:secret ; +sip:user_594@sip.example.org clrtxt:secret ; +sip:user_595@sip.example.org clrtxt:secret ; +sip:user_596@sip.example.org clrtxt:secret ; +sip:user_597@sip.example.org clrtxt:secret ; +sip:user_598@sip.example.org clrtxt:secret ; +sip:user_599@sip.example.org clrtxt:secret ; +sip:user_600@sip.example.org clrtxt:secret ; +sip:user_601@sip.example.org clrtxt:secret ; +sip:user_602@sip.example.org clrtxt:secret ; +sip:user_603@sip.example.org clrtxt:secret ; +sip:user_604@sip.example.org clrtxt:secret ; +sip:user_605@sip.example.org clrtxt:secret ; +sip:user_606@sip.example.org clrtxt:secret ; +sip:user_607@sip.example.org clrtxt:secret ; +sip:user_608@sip.example.org clrtxt:secret ; +sip:user_609@sip.example.org clrtxt:secret ; +sip:user_610@sip.example.org clrtxt:secret ; +sip:user_611@sip.example.org clrtxt:secret ; +sip:user_612@sip.example.org clrtxt:secret ; +sip:user_613@sip.example.org clrtxt:secret ; +sip:user_614@sip.example.org clrtxt:secret ; +sip:user_615@sip.example.org clrtxt:secret ; +sip:user_616@sip.example.org clrtxt:secret ; +sip:user_617@sip.example.org clrtxt:secret ; +sip:user_618@sip.example.org clrtxt:secret ; +sip:user_619@sip.example.org clrtxt:secret ; +sip:user_620@sip.example.org clrtxt:secret ; +sip:user_621@sip.example.org clrtxt:secret ; +sip:user_622@sip.example.org clrtxt:secret ; +sip:user_623@sip.example.org clrtxt:secret ; +sip:user_624@sip.example.org clrtxt:secret ; +sip:user_625@sip.example.org clrtxt:secret ; +sip:user_626@sip.example.org clrtxt:secret ; +sip:user_627@sip.example.org clrtxt:secret ; +sip:user_628@sip.example.org clrtxt:secret ; +sip:user_629@sip.example.org clrtxt:secret ; +sip:user_630@sip.example.org clrtxt:secret ; +sip:user_631@sip.example.org clrtxt:secret ; +sip:user_632@sip.example.org clrtxt:secret ; +sip:user_633@sip.example.org clrtxt:secret ; +sip:user_634@sip.example.org clrtxt:secret ; +sip:user_635@sip.example.org clrtxt:secret ; +sip:user_636@sip.example.org clrtxt:secret ; +sip:user_637@sip.example.org clrtxt:secret ; +sip:user_638@sip.example.org clrtxt:secret ; +sip:user_639@sip.example.org clrtxt:secret ; +sip:user_640@sip.example.org clrtxt:secret ; +sip:user_641@sip.example.org clrtxt:secret ; +sip:user_642@sip.example.org clrtxt:secret ; +sip:user_643@sip.example.org clrtxt:secret ; +sip:user_644@sip.example.org clrtxt:secret ; +sip:user_645@sip.example.org clrtxt:secret ; +sip:user_646@sip.example.org clrtxt:secret ; +sip:user_647@sip.example.org clrtxt:secret ; +sip:user_648@sip.example.org clrtxt:secret ; +sip:user_649@sip.example.org clrtxt:secret ; +sip:user_650@sip.example.org clrtxt:secret ; +sip:user_651@sip.example.org clrtxt:secret ; +sip:user_652@sip.example.org clrtxt:secret ; +sip:user_653@sip.example.org clrtxt:secret ; +sip:user_654@sip.example.org clrtxt:secret ; +sip:user_655@sip.example.org clrtxt:secret ; +sip:user_656@sip.example.org clrtxt:secret ; +sip:user_657@sip.example.org clrtxt:secret ; +sip:user_658@sip.example.org clrtxt:secret ; +sip:user_659@sip.example.org clrtxt:secret ; +sip:user_660@sip.example.org clrtxt:secret ; +sip:user_661@sip.example.org clrtxt:secret ; +sip:user_662@sip.example.org clrtxt:secret ; +sip:user_663@sip.example.org clrtxt:secret ; +sip:user_664@sip.example.org clrtxt:secret ; +sip:user_665@sip.example.org clrtxt:secret ; +sip:user_666@sip.example.org clrtxt:secret ; +sip:user_667@sip.example.org clrtxt:secret ; +sip:user_668@sip.example.org clrtxt:secret ; +sip:user_669@sip.example.org clrtxt:secret ; +sip:user_670@sip.example.org clrtxt:secret ; +sip:user_671@sip.example.org clrtxt:secret ; +sip:user_672@sip.example.org clrtxt:secret ; +sip:user_673@sip.example.org clrtxt:secret ; +sip:user_674@sip.example.org clrtxt:secret ; +sip:user_675@sip.example.org clrtxt:secret ; +sip:user_676@sip.example.org clrtxt:secret ; +sip:user_677@sip.example.org clrtxt:secret ; +sip:user_678@sip.example.org clrtxt:secret ; +sip:user_679@sip.example.org clrtxt:secret ; +sip:user_680@sip.example.org clrtxt:secret ; +sip:user_681@sip.example.org clrtxt:secret ; +sip:user_682@sip.example.org clrtxt:secret ; +sip:user_683@sip.example.org clrtxt:secret ; +sip:user_684@sip.example.org clrtxt:secret ; +sip:user_685@sip.example.org clrtxt:secret ; +sip:user_686@sip.example.org clrtxt:secret ; +sip:user_687@sip.example.org clrtxt:secret ; +sip:user_688@sip.example.org clrtxt:secret ; +sip:user_689@sip.example.org clrtxt:secret ; +sip:user_690@sip.example.org clrtxt:secret ; +sip:user_691@sip.example.org clrtxt:secret ; +sip:user_692@sip.example.org clrtxt:secret ; +sip:user_693@sip.example.org clrtxt:secret ; +sip:user_694@sip.example.org clrtxt:secret ; +sip:user_695@sip.example.org clrtxt:secret ; +sip:user_696@sip.example.org clrtxt:secret ; +sip:user_697@sip.example.org clrtxt:secret ; +sip:user_698@sip.example.org clrtxt:secret ; +sip:user_699@sip.example.org clrtxt:secret ; +sip:user_700@sip.example.org clrtxt:secret ; +sip:user_701@sip.example.org clrtxt:secret ; +sip:user_702@sip.example.org clrtxt:secret ; +sip:user_703@sip.example.org clrtxt:secret ; +sip:user_704@sip.example.org clrtxt:secret ; +sip:user_705@sip.example.org clrtxt:secret ; +sip:user_706@sip.example.org clrtxt:secret ; +sip:user_707@sip.example.org clrtxt:secret ; +sip:user_708@sip.example.org clrtxt:secret ; +sip:user_709@sip.example.org clrtxt:secret ; +sip:user_710@sip.example.org clrtxt:secret ; +sip:user_711@sip.example.org clrtxt:secret ; +sip:user_712@sip.example.org clrtxt:secret ; +sip:user_713@sip.example.org clrtxt:secret ; +sip:user_714@sip.example.org clrtxt:secret ; +sip:user_715@sip.example.org clrtxt:secret ; +sip:user_716@sip.example.org clrtxt:secret ; +sip:user_717@sip.example.org clrtxt:secret ; +sip:user_718@sip.example.org clrtxt:secret ; +sip:user_719@sip.example.org clrtxt:secret ; +sip:user_720@sip.example.org clrtxt:secret ; +sip:user_721@sip.example.org clrtxt:secret ; +sip:user_722@sip.example.org clrtxt:secret ; +sip:user_723@sip.example.org clrtxt:secret ; +sip:user_724@sip.example.org clrtxt:secret ; +sip:user_725@sip.example.org clrtxt:secret ; +sip:user_726@sip.example.org clrtxt:secret ; +sip:user_727@sip.example.org clrtxt:secret ; +sip:user_728@sip.example.org clrtxt:secret ; +sip:user_729@sip.example.org clrtxt:secret ; +sip:user_730@sip.example.org clrtxt:secret ; +sip:user_731@sip.example.org clrtxt:secret ; +sip:user_732@sip.example.org clrtxt:secret ; +sip:user_733@sip.example.org clrtxt:secret ; +sip:user_734@sip.example.org clrtxt:secret ; +sip:user_735@sip.example.org clrtxt:secret ; +sip:user_736@sip.example.org clrtxt:secret ; +sip:user_737@sip.example.org clrtxt:secret ; +sip:user_738@sip.example.org clrtxt:secret ; +sip:user_739@sip.example.org clrtxt:secret ; +sip:user_740@sip.example.org clrtxt:secret ; +sip:user_741@sip.example.org clrtxt:secret ; +sip:user_742@sip.example.org clrtxt:secret ; +sip:user_743@sip.example.org clrtxt:secret ; +sip:user_744@sip.example.org clrtxt:secret ; +sip:user_745@sip.example.org clrtxt:secret ; +sip:user_746@sip.example.org clrtxt:secret ; +sip:user_747@sip.example.org clrtxt:secret ; +sip:user_748@sip.example.org clrtxt:secret ; +sip:user_749@sip.example.org clrtxt:secret ; +sip:user_750@sip.example.org clrtxt:secret ; +sip:user_751@sip.example.org clrtxt:secret ; +sip:user_752@sip.example.org clrtxt:secret ; +sip:user_753@sip.example.org clrtxt:secret ; +sip:user_754@sip.example.org clrtxt:secret ; +sip:user_755@sip.example.org clrtxt:secret ; +sip:user_756@sip.example.org clrtxt:secret ; +sip:user_757@sip.example.org clrtxt:secret ; +sip:user_758@sip.example.org clrtxt:secret ; +sip:user_759@sip.example.org clrtxt:secret ; +sip:user_760@sip.example.org clrtxt:secret ; +sip:user_761@sip.example.org clrtxt:secret ; +sip:user_762@sip.example.org clrtxt:secret ; +sip:user_763@sip.example.org clrtxt:secret ; +sip:user_764@sip.example.org clrtxt:secret ; +sip:user_765@sip.example.org clrtxt:secret ; +sip:user_766@sip.example.org clrtxt:secret ; +sip:user_767@sip.example.org clrtxt:secret ; +sip:user_768@sip.example.org clrtxt:secret ; +sip:user_769@sip.example.org clrtxt:secret ; +sip:user_770@sip.example.org clrtxt:secret ; +sip:user_771@sip.example.org clrtxt:secret ; +sip:user_772@sip.example.org clrtxt:secret ; +sip:user_773@sip.example.org clrtxt:secret ; +sip:user_774@sip.example.org clrtxt:secret ; +sip:user_775@sip.example.org clrtxt:secret ; +sip:user_776@sip.example.org clrtxt:secret ; +sip:user_777@sip.example.org clrtxt:secret ; +sip:user_778@sip.example.org clrtxt:secret ; +sip:user_779@sip.example.org clrtxt:secret ; +sip:user_780@sip.example.org clrtxt:secret ; +sip:user_781@sip.example.org clrtxt:secret ; +sip:user_782@sip.example.org clrtxt:secret ; +sip:user_783@sip.example.org clrtxt:secret ; +sip:user_784@sip.example.org clrtxt:secret ; +sip:user_785@sip.example.org clrtxt:secret ; +sip:user_786@sip.example.org clrtxt:secret ; +sip:user_787@sip.example.org clrtxt:secret ; +sip:user_788@sip.example.org clrtxt:secret ; +sip:user_789@sip.example.org clrtxt:secret ; +sip:user_790@sip.example.org clrtxt:secret ; +sip:user_791@sip.example.org clrtxt:secret ; +sip:user_792@sip.example.org clrtxt:secret ; +sip:user_793@sip.example.org clrtxt:secret ; +sip:user_794@sip.example.org clrtxt:secret ; +sip:user_795@sip.example.org clrtxt:secret ; +sip:user_796@sip.example.org clrtxt:secret ; +sip:user_797@sip.example.org clrtxt:secret ; +sip:user_798@sip.example.org clrtxt:secret ; +sip:user_799@sip.example.org clrtxt:secret ; +sip:user_800@sip.example.org clrtxt:secret ; +sip:user_801@sip.example.org clrtxt:secret ; +sip:user_802@sip.example.org clrtxt:secret ; +sip:user_803@sip.example.org clrtxt:secret ; +sip:user_804@sip.example.org clrtxt:secret ; +sip:user_805@sip.example.org clrtxt:secret ; +sip:user_806@sip.example.org clrtxt:secret ; +sip:user_807@sip.example.org clrtxt:secret ; +sip:user_808@sip.example.org clrtxt:secret ; +sip:user_809@sip.example.org clrtxt:secret ; +sip:user_810@sip.example.org clrtxt:secret ; +sip:user_811@sip.example.org clrtxt:secret ; +sip:user_812@sip.example.org clrtxt:secret ; +sip:user_813@sip.example.org clrtxt:secret ; +sip:user_814@sip.example.org clrtxt:secret ; +sip:user_815@sip.example.org clrtxt:secret ; +sip:user_816@sip.example.org clrtxt:secret ; +sip:user_817@sip.example.org clrtxt:secret ; +sip:user_818@sip.example.org clrtxt:secret ; +sip:user_819@sip.example.org clrtxt:secret ; +sip:user_820@sip.example.org clrtxt:secret ; +sip:user_821@sip.example.org clrtxt:secret ; +sip:user_822@sip.example.org clrtxt:secret ; +sip:user_823@sip.example.org clrtxt:secret ; +sip:user_824@sip.example.org clrtxt:secret ; +sip:user_825@sip.example.org clrtxt:secret ; +sip:user_826@sip.example.org clrtxt:secret ; +sip:user_827@sip.example.org clrtxt:secret ; +sip:user_828@sip.example.org clrtxt:secret ; +sip:user_829@sip.example.org clrtxt:secret ; +sip:user_830@sip.example.org clrtxt:secret ; +sip:user_831@sip.example.org clrtxt:secret ; +sip:user_832@sip.example.org clrtxt:secret ; +sip:user_833@sip.example.org clrtxt:secret ; +sip:user_834@sip.example.org clrtxt:secret ; +sip:user_835@sip.example.org clrtxt:secret ; +sip:user_836@sip.example.org clrtxt:secret ; +sip:user_837@sip.example.org clrtxt:secret ; +sip:user_838@sip.example.org clrtxt:secret ; +sip:user_839@sip.example.org clrtxt:secret ; +sip:user_840@sip.example.org clrtxt:secret ; +sip:user_841@sip.example.org clrtxt:secret ; +sip:user_842@sip.example.org clrtxt:secret ; +sip:user_843@sip.example.org clrtxt:secret ; +sip:user_844@sip.example.org clrtxt:secret ; +sip:user_845@sip.example.org clrtxt:secret ; +sip:user_846@sip.example.org clrtxt:secret ; +sip:user_847@sip.example.org clrtxt:secret ; +sip:user_848@sip.example.org clrtxt:secret ; +sip:user_849@sip.example.org clrtxt:secret ; +sip:user_850@sip.example.org clrtxt:secret ; +sip:user_851@sip.example.org clrtxt:secret ; +sip:user_852@sip.example.org clrtxt:secret ; +sip:user_853@sip.example.org clrtxt:secret ; +sip:user_854@sip.example.org clrtxt:secret ; +sip:user_855@sip.example.org clrtxt:secret ; +sip:user_856@sip.example.org clrtxt:secret ; +sip:user_857@sip.example.org clrtxt:secret ; +sip:user_858@sip.example.org clrtxt:secret ; +sip:user_859@sip.example.org clrtxt:secret ; +sip:user_860@sip.example.org clrtxt:secret ; +sip:user_861@sip.example.org clrtxt:secret ; +sip:user_862@sip.example.org clrtxt:secret ; +sip:user_863@sip.example.org clrtxt:secret ; +sip:user_864@sip.example.org clrtxt:secret ; +sip:user_865@sip.example.org clrtxt:secret ; +sip:user_866@sip.example.org clrtxt:secret ; +sip:user_867@sip.example.org clrtxt:secret ; +sip:user_868@sip.example.org clrtxt:secret ; +sip:user_869@sip.example.org clrtxt:secret ; +sip:user_870@sip.example.org clrtxt:secret ; +sip:user_871@sip.example.org clrtxt:secret ; +sip:user_872@sip.example.org clrtxt:secret ; +sip:user_873@sip.example.org clrtxt:secret ; +sip:user_874@sip.example.org clrtxt:secret ; +sip:user_875@sip.example.org clrtxt:secret ; +sip:user_876@sip.example.org clrtxt:secret ; +sip:user_877@sip.example.org clrtxt:secret ; +sip:user_878@sip.example.org clrtxt:secret ; +sip:user_879@sip.example.org clrtxt:secret ; +sip:user_880@sip.example.org clrtxt:secret ; +sip:user_881@sip.example.org clrtxt:secret ; +sip:user_882@sip.example.org clrtxt:secret ; +sip:user_883@sip.example.org clrtxt:secret ; +sip:user_884@sip.example.org clrtxt:secret ; +sip:user_885@sip.example.org clrtxt:secret ; +sip:user_886@sip.example.org clrtxt:secret ; +sip:user_887@sip.example.org clrtxt:secret ; +sip:user_888@sip.example.org clrtxt:secret ; +sip:user_889@sip.example.org clrtxt:secret ; +sip:user_890@sip.example.org clrtxt:secret ; +sip:user_891@sip.example.org clrtxt:secret ; +sip:user_892@sip.example.org clrtxt:secret ; +sip:user_893@sip.example.org clrtxt:secret ; +sip:user_894@sip.example.org clrtxt:secret ; +sip:user_895@sip.example.org clrtxt:secret ; +sip:user_896@sip.example.org clrtxt:secret ; +sip:user_897@sip.example.org clrtxt:secret ; +sip:user_898@sip.example.org clrtxt:secret ; +sip:user_899@sip.example.org clrtxt:secret ; +sip:user_900@sip.example.org clrtxt:secret ; +sip:user_901@sip.example.org clrtxt:secret ; +sip:user_902@sip.example.org clrtxt:secret ; +sip:user_903@sip.example.org clrtxt:secret ; +sip:user_904@sip.example.org clrtxt:secret ; +sip:user_905@sip.example.org clrtxt:secret ; +sip:user_906@sip.example.org clrtxt:secret ; +sip:user_907@sip.example.org clrtxt:secret ; +sip:user_908@sip.example.org clrtxt:secret ; +sip:user_909@sip.example.org clrtxt:secret ; +sip:user_910@sip.example.org clrtxt:secret ; +sip:user_911@sip.example.org clrtxt:secret ; +sip:user_912@sip.example.org clrtxt:secret ; +sip:user_913@sip.example.org clrtxt:secret ; +sip:user_914@sip.example.org clrtxt:secret ; +sip:user_915@sip.example.org clrtxt:secret ; +sip:user_916@sip.example.org clrtxt:secret ; +sip:user_917@sip.example.org clrtxt:secret ; +sip:user_918@sip.example.org clrtxt:secret ; +sip:user_919@sip.example.org clrtxt:secret ; +sip:user_920@sip.example.org clrtxt:secret ; +sip:user_921@sip.example.org clrtxt:secret ; +sip:user_922@sip.example.org clrtxt:secret ; +sip:user_923@sip.example.org clrtxt:secret ; +sip:user_924@sip.example.org clrtxt:secret ; +sip:user_925@sip.example.org clrtxt:secret ; +sip:user_926@sip.example.org clrtxt:secret ; +sip:user_927@sip.example.org clrtxt:secret ; +sip:user_928@sip.example.org clrtxt:secret ; +sip:user_929@sip.example.org clrtxt:secret ; +sip:user_930@sip.example.org clrtxt:secret ; +sip:user_931@sip.example.org clrtxt:secret ; +sip:user_932@sip.example.org clrtxt:secret ; +sip:user_933@sip.example.org clrtxt:secret ; +sip:user_934@sip.example.org clrtxt:secret ; +sip:user_935@sip.example.org clrtxt:secret ; +sip:user_936@sip.example.org clrtxt:secret ; +sip:user_937@sip.example.org clrtxt:secret ; +sip:user_938@sip.example.org clrtxt:secret ; +sip:user_939@sip.example.org clrtxt:secret ; +sip:user_940@sip.example.org clrtxt:secret ; +sip:user_941@sip.example.org clrtxt:secret ; +sip:user_942@sip.example.org clrtxt:secret ; +sip:user_943@sip.example.org clrtxt:secret ; +sip:user_944@sip.example.org clrtxt:secret ; +sip:user_945@sip.example.org clrtxt:secret ; +sip:user_946@sip.example.org clrtxt:secret ; +sip:user_947@sip.example.org clrtxt:secret ; +sip:user_948@sip.example.org clrtxt:secret ; +sip:user_949@sip.example.org clrtxt:secret ; +sip:user_950@sip.example.org clrtxt:secret ; +sip:user_951@sip.example.org clrtxt:secret ; +sip:user_952@sip.example.org clrtxt:secret ; +sip:user_953@sip.example.org clrtxt:secret ; +sip:user_954@sip.example.org clrtxt:secret ; +sip:user_955@sip.example.org clrtxt:secret ; +sip:user_956@sip.example.org clrtxt:secret ; +sip:user_957@sip.example.org clrtxt:secret ; +sip:user_958@sip.example.org clrtxt:secret ; +sip:user_959@sip.example.org clrtxt:secret ; +sip:user_960@sip.example.org clrtxt:secret ; +sip:user_961@sip.example.org clrtxt:secret ; +sip:user_962@sip.example.org clrtxt:secret ; +sip:user_963@sip.example.org clrtxt:secret ; +sip:user_964@sip.example.org clrtxt:secret ; +sip:user_965@sip.example.org clrtxt:secret ; +sip:user_966@sip.example.org clrtxt:secret ; +sip:user_967@sip.example.org clrtxt:secret ; +sip:user_968@sip.example.org clrtxt:secret ; +sip:user_969@sip.example.org clrtxt:secret ; +sip:user_970@sip.example.org clrtxt:secret ; +sip:user_971@sip.example.org clrtxt:secret ; +sip:user_972@sip.example.org clrtxt:secret ; +sip:user_973@sip.example.org clrtxt:secret ; +sip:user_974@sip.example.org clrtxt:secret ; +sip:user_975@sip.example.org clrtxt:secret ; +sip:user_976@sip.example.org clrtxt:secret ; +sip:user_977@sip.example.org clrtxt:secret ; +sip:user_978@sip.example.org clrtxt:secret ; +sip:user_979@sip.example.org clrtxt:secret ; +sip:user_980@sip.example.org clrtxt:secret ; +sip:user_981@sip.example.org clrtxt:secret ; +sip:user_982@sip.example.org clrtxt:secret ; +sip:user_983@sip.example.org clrtxt:secret ; +sip:user_984@sip.example.org clrtxt:secret ; +sip:user_985@sip.example.org clrtxt:secret ; +sip:user_986@sip.example.org clrtxt:secret ; +sip:user_987@sip.example.org clrtxt:secret ; +sip:user_988@sip.example.org clrtxt:secret ; +sip:user_989@sip.example.org clrtxt:secret ; +sip:user_990@sip.example.org clrtxt:secret ; +sip:user_991@sip.example.org clrtxt:secret ; +sip:user_992@sip.example.org clrtxt:secret ; +sip:user_993@sip.example.org clrtxt:secret ; +sip:user_994@sip.example.org clrtxt:secret ; +sip:user_995@sip.example.org clrtxt:secret ; +sip:user_996@sip.example.org clrtxt:secret ; +sip:user_997@sip.example.org clrtxt:secret ; +sip:user_998@sip.example.org clrtxt:secret ; +sip:user_999@sip.example.org clrtxt:secret ; +sip:user_1000@sip.example.org clrtxt:secret ; +sip:user_1001@sip.example.org clrtxt:secret ; +sip:user_1002@sip.example.org clrtxt:secret ; +sip:user_1003@sip.example.org clrtxt:secret ; +sip:user_1004@sip.example.org clrtxt:secret ; +sip:user_1005@sip.example.org clrtxt:secret ; +sip:user_1006@sip.example.org clrtxt:secret ; +sip:user_1007@sip.example.org clrtxt:secret ; +sip:user_1008@sip.example.org clrtxt:secret ; +sip:user_1009@sip.example.org clrtxt:secret ; +sip:user_1010@sip.example.org clrtxt:secret ; +sip:user_1011@sip.example.org clrtxt:secret ; +sip:user_1012@sip.example.org clrtxt:secret ; +sip:user_1013@sip.example.org clrtxt:secret ; +sip:user_1014@sip.example.org clrtxt:secret ; +sip:user_1015@sip.example.org clrtxt:secret ; +sip:user_1016@sip.example.org clrtxt:secret ; +sip:user_1017@sip.example.org clrtxt:secret ; +sip:user_1018@sip.example.org clrtxt:secret ; +sip:user_1019@sip.example.org clrtxt:secret ; +sip:user_1020@sip.example.org clrtxt:secret ; +sip:user_1021@sip.example.org clrtxt:secret ; +sip:user_1022@sip.example.org clrtxt:secret ; +sip:user_1023@sip.example.org clrtxt:secret ; +sip:user_1024@sip.example.org clrtxt:secret ; +sip:user_1025@sip.example.org clrtxt:secret ; +sip:user_1026@sip.example.org clrtxt:secret ; +sip:user_1027@sip.example.org clrtxt:secret ; +sip:user_1028@sip.example.org clrtxt:secret ; +sip:user_1029@sip.example.org clrtxt:secret ; +sip:user_1030@sip.example.org clrtxt:secret ; +sip:user_1031@sip.example.org clrtxt:secret ; +sip:user_1032@sip.example.org clrtxt:secret ; +sip:user_1033@sip.example.org clrtxt:secret ; +sip:user_1034@sip.example.org clrtxt:secret ; +sip:user_1035@sip.example.org clrtxt:secret ; +sip:user_1036@sip.example.org clrtxt:secret ; +sip:user_1037@sip.example.org clrtxt:secret ; +sip:user_1038@sip.example.org clrtxt:secret ; +sip:user_1039@sip.example.org clrtxt:secret ; +sip:user_1040@sip.example.org clrtxt:secret ; +sip:user_1041@sip.example.org clrtxt:secret ; +sip:user_1042@sip.example.org clrtxt:secret ; +sip:user_1043@sip.example.org clrtxt:secret ; +sip:user_1044@sip.example.org clrtxt:secret ; +sip:user_1045@sip.example.org clrtxt:secret ; +sip:user_1046@sip.example.org clrtxt:secret ; +sip:user_1047@sip.example.org clrtxt:secret ; +sip:user_1048@sip.example.org clrtxt:secret ; +sip:user_1049@sip.example.org clrtxt:secret ; +sip:user_1050@sip.example.org clrtxt:secret ; +sip:user_1051@sip.example.org clrtxt:secret ; +sip:user_1052@sip.example.org clrtxt:secret ; +sip:user_1053@sip.example.org clrtxt:secret ; +sip:user_1054@sip.example.org clrtxt:secret ; +sip:user_1055@sip.example.org clrtxt:secret ; +sip:user_1056@sip.example.org clrtxt:secret ; +sip:user_1057@sip.example.org clrtxt:secret ; +sip:user_1058@sip.example.org clrtxt:secret ; +sip:user_1059@sip.example.org clrtxt:secret ; +sip:user_1060@sip.example.org clrtxt:secret ; +sip:user_1061@sip.example.org clrtxt:secret ; +sip:user_1062@sip.example.org clrtxt:secret ; +sip:user_1063@sip.example.org clrtxt:secret ; +sip:user_1064@sip.example.org clrtxt:secret ; +sip:user_1065@sip.example.org clrtxt:secret ; +sip:user_1066@sip.example.org clrtxt:secret ; +sip:user_1067@sip.example.org clrtxt:secret ; +sip:user_1068@sip.example.org clrtxt:secret ; +sip:user_1069@sip.example.org clrtxt:secret ; +sip:user_1070@sip.example.org clrtxt:secret ; +sip:user_1071@sip.example.org clrtxt:secret ; +sip:user_1072@sip.example.org clrtxt:secret ; +sip:user_1073@sip.example.org clrtxt:secret ; +sip:user_1074@sip.example.org clrtxt:secret ; +sip:user_1075@sip.example.org clrtxt:secret ; +sip:user_1076@sip.example.org clrtxt:secret ; +sip:user_1077@sip.example.org clrtxt:secret ; +sip:user_1078@sip.example.org clrtxt:secret ; +sip:user_1079@sip.example.org clrtxt:secret ; +sip:user_1080@sip.example.org clrtxt:secret ; +sip:user_1081@sip.example.org clrtxt:secret ; +sip:user_1082@sip.example.org clrtxt:secret ; +sip:user_1083@sip.example.org clrtxt:secret ; +sip:user_1084@sip.example.org clrtxt:secret ; +sip:user_1085@sip.example.org clrtxt:secret ; +sip:user_1086@sip.example.org clrtxt:secret ; +sip:user_1087@sip.example.org clrtxt:secret ; +sip:user_1088@sip.example.org clrtxt:secret ; +sip:user_1089@sip.example.org clrtxt:secret ; +sip:user_1090@sip.example.org clrtxt:secret ; +sip:user_1091@sip.example.org clrtxt:secret ; +sip:user_1092@sip.example.org clrtxt:secret ; +sip:user_1093@sip.example.org clrtxt:secret ; +sip:user_1094@sip.example.org clrtxt:secret ; +sip:user_1095@sip.example.org clrtxt:secret ; +sip:user_1096@sip.example.org clrtxt:secret ; +sip:user_1097@sip.example.org clrtxt:secret ; +sip:user_1098@sip.example.org clrtxt:secret ; +sip:user_1099@sip.example.org clrtxt:secret ; +sip:user_1100@sip.example.org clrtxt:secret ; +sip:user_1101@sip.example.org clrtxt:secret ; +sip:user_1102@sip.example.org clrtxt:secret ; +sip:user_1103@sip.example.org clrtxt:secret ; +sip:user_1104@sip.example.org clrtxt:secret ; +sip:user_1105@sip.example.org clrtxt:secret ; +sip:user_1106@sip.example.org clrtxt:secret ; +sip:user_1107@sip.example.org clrtxt:secret ; +sip:user_1108@sip.example.org clrtxt:secret ; +sip:user_1109@sip.example.org clrtxt:secret ; +sip:user_1110@sip.example.org clrtxt:secret ; +sip:user_1111@sip.example.org clrtxt:secret ; +sip:user_1112@sip.example.org clrtxt:secret ; +sip:user_1113@sip.example.org clrtxt:secret ; +sip:user_1114@sip.example.org clrtxt:secret ; +sip:user_1115@sip.example.org clrtxt:secret ; +sip:user_1116@sip.example.org clrtxt:secret ; +sip:user_1117@sip.example.org clrtxt:secret ; +sip:user_1118@sip.example.org clrtxt:secret ; +sip:user_1119@sip.example.org clrtxt:secret ; +sip:user_1120@sip.example.org clrtxt:secret ; +sip:user_1121@sip.example.org clrtxt:secret ; +sip:user_1122@sip.example.org clrtxt:secret ; +sip:user_1123@sip.example.org clrtxt:secret ; +sip:user_1124@sip.example.org clrtxt:secret ; +sip:user_1125@sip.example.org clrtxt:secret ; +sip:user_1126@sip.example.org clrtxt:secret ; +sip:user_1127@sip.example.org clrtxt:secret ; +sip:user_1128@sip.example.org clrtxt:secret ; +sip:user_1129@sip.example.org clrtxt:secret ; +sip:user_1130@sip.example.org clrtxt:secret ; +sip:user_1131@sip.example.org clrtxt:secret ; +sip:user_1132@sip.example.org clrtxt:secret ; +sip:user_1133@sip.example.org clrtxt:secret ; +sip:user_1134@sip.example.org clrtxt:secret ; +sip:user_1135@sip.example.org clrtxt:secret ; +sip:user_1136@sip.example.org clrtxt:secret ; +sip:user_1137@sip.example.org clrtxt:secret ; +sip:user_1138@sip.example.org clrtxt:secret ; +sip:user_1139@sip.example.org clrtxt:secret ; +sip:user_1140@sip.example.org clrtxt:secret ; +sip:user_1141@sip.example.org clrtxt:secret ; +sip:user_1142@sip.example.org clrtxt:secret ; +sip:user_1143@sip.example.org clrtxt:secret ; +sip:user_1144@sip.example.org clrtxt:secret ; +sip:user_1145@sip.example.org clrtxt:secret ; +sip:user_1146@sip.example.org clrtxt:secret ; +sip:user_1147@sip.example.org clrtxt:secret ; +sip:user_1148@sip.example.org clrtxt:secret ; +sip:user_1149@sip.example.org clrtxt:secret ; +sip:user_1150@sip.example.org clrtxt:secret ; +sip:user_1151@sip.example.org clrtxt:secret ; +sip:user_1152@sip.example.org clrtxt:secret ; +sip:user_1153@sip.example.org clrtxt:secret ; +sip:user_1154@sip.example.org clrtxt:secret ; +sip:user_1155@sip.example.org clrtxt:secret ; +sip:user_1156@sip.example.org clrtxt:secret ; +sip:user_1157@sip.example.org clrtxt:secret ; +sip:user_1158@sip.example.org clrtxt:secret ; +sip:user_1159@sip.example.org clrtxt:secret ; +sip:user_1160@sip.example.org clrtxt:secret ; +sip:user_1161@sip.example.org clrtxt:secret ; +sip:user_1162@sip.example.org clrtxt:secret ; +sip:user_1163@sip.example.org clrtxt:secret ; +sip:user_1164@sip.example.org clrtxt:secret ; +sip:user_1165@sip.example.org clrtxt:secret ; +sip:user_1166@sip.example.org clrtxt:secret ; +sip:user_1167@sip.example.org clrtxt:secret ; +sip:user_1168@sip.example.org clrtxt:secret ; +sip:user_1169@sip.example.org clrtxt:secret ; +sip:user_1170@sip.example.org clrtxt:secret ; +sip:user_1171@sip.example.org clrtxt:secret ; +sip:user_1172@sip.example.org clrtxt:secret ; +sip:user_1173@sip.example.org clrtxt:secret ; +sip:user_1174@sip.example.org clrtxt:secret ; +sip:user_1175@sip.example.org clrtxt:secret ; +sip:user_1176@sip.example.org clrtxt:secret ; +sip:user_1177@sip.example.org clrtxt:secret ; +sip:user_1178@sip.example.org clrtxt:secret ; +sip:user_1179@sip.example.org clrtxt:secret ; +sip:user_1180@sip.example.org clrtxt:secret ; +sip:user_1181@sip.example.org clrtxt:secret ; +sip:user_1182@sip.example.org clrtxt:secret ; +sip:user_1183@sip.example.org clrtxt:secret ; +sip:user_1184@sip.example.org clrtxt:secret ; +sip:user_1185@sip.example.org clrtxt:secret ; +sip:user_1186@sip.example.org clrtxt:secret ; +sip:user_1187@sip.example.org clrtxt:secret ; +sip:user_1188@sip.example.org clrtxt:secret ; +sip:user_1189@sip.example.org clrtxt:secret ; +sip:user_1190@sip.example.org clrtxt:secret ; +sip:user_1191@sip.example.org clrtxt:secret ; +sip:user_1192@sip.example.org clrtxt:secret ; +sip:user_1193@sip.example.org clrtxt:secret ; +sip:user_1194@sip.example.org clrtxt:secret ; +sip:user_1195@sip.example.org clrtxt:secret ; +sip:user_1196@sip.example.org clrtxt:secret ; +sip:user_1197@sip.example.org clrtxt:secret ; +sip:user_1198@sip.example.org clrtxt:secret ; +sip:user_1199@sip.example.org clrtxt:secret ; +sip:user_1200@sip.example.org clrtxt:secret ; +sip:user_1201@sip.example.org clrtxt:secret ; +sip:user_1202@sip.example.org clrtxt:secret ; +sip:user_1203@sip.example.org clrtxt:secret ; +sip:user_1204@sip.example.org clrtxt:secret ; +sip:user_1205@sip.example.org clrtxt:secret ; +sip:user_1206@sip.example.org clrtxt:secret ; +sip:user_1207@sip.example.org clrtxt:secret ; +sip:user_1208@sip.example.org clrtxt:secret ; +sip:user_1209@sip.example.org clrtxt:secret ; +sip:user_1210@sip.example.org clrtxt:secret ; +sip:user_1211@sip.example.org clrtxt:secret ; +sip:user_1212@sip.example.org clrtxt:secret ; +sip:user_1213@sip.example.org clrtxt:secret ; +sip:user_1214@sip.example.org clrtxt:secret ; +sip:user_1215@sip.example.org clrtxt:secret ; +sip:user_1216@sip.example.org clrtxt:secret ; +sip:user_1217@sip.example.org clrtxt:secret ; +sip:user_1218@sip.example.org clrtxt:secret ; +sip:user_1219@sip.example.org clrtxt:secret ; +sip:user_1220@sip.example.org clrtxt:secret ; +sip:user_1221@sip.example.org clrtxt:secret ; +sip:user_1222@sip.example.org clrtxt:secret ; +sip:user_1223@sip.example.org clrtxt:secret ; +sip:user_1224@sip.example.org clrtxt:secret ; +sip:user_1225@sip.example.org clrtxt:secret ; +sip:user_1226@sip.example.org clrtxt:secret ; +sip:user_1227@sip.example.org clrtxt:secret ; +sip:user_1228@sip.example.org clrtxt:secret ; +sip:user_1229@sip.example.org clrtxt:secret ; +sip:user_1230@sip.example.org clrtxt:secret ; +sip:user_1231@sip.example.org clrtxt:secret ; +sip:user_1232@sip.example.org clrtxt:secret ; +sip:user_1233@sip.example.org clrtxt:secret ; +sip:user_1234@sip.example.org clrtxt:secret ; +sip:user_1235@sip.example.org clrtxt:secret ; +sip:user_1236@sip.example.org clrtxt:secret ; +sip:user_1237@sip.example.org clrtxt:secret ; +sip:user_1238@sip.example.org clrtxt:secret ; +sip:user_1239@sip.example.org clrtxt:secret ; +sip:user_1240@sip.example.org clrtxt:secret ; +sip:user_1241@sip.example.org clrtxt:secret ; +sip:user_1242@sip.example.org clrtxt:secret ; +sip:user_1243@sip.example.org clrtxt:secret ; +sip:user_1244@sip.example.org clrtxt:secret ; +sip:user_1245@sip.example.org clrtxt:secret ; +sip:user_1246@sip.example.org clrtxt:secret ; +sip:user_1247@sip.example.org clrtxt:secret ; +sip:user_1248@sip.example.org clrtxt:secret ; +sip:user_1249@sip.example.org clrtxt:secret ; +sip:user_1250@sip.example.org clrtxt:secret ; +sip:user_1251@sip.example.org clrtxt:secret ; +sip:user_1252@sip.example.org clrtxt:secret ; +sip:user_1253@sip.example.org clrtxt:secret ; +sip:user_1254@sip.example.org clrtxt:secret ; +sip:user_1255@sip.example.org clrtxt:secret ; +sip:user_1256@sip.example.org clrtxt:secret ; +sip:user_1257@sip.example.org clrtxt:secret ; +sip:user_1258@sip.example.org clrtxt:secret ; +sip:user_1259@sip.example.org clrtxt:secret ; +sip:user_1260@sip.example.org clrtxt:secret ; +sip:user_1261@sip.example.org clrtxt:secret ; +sip:user_1262@sip.example.org clrtxt:secret ; +sip:user_1263@sip.example.org clrtxt:secret ; +sip:user_1264@sip.example.org clrtxt:secret ; +sip:user_1265@sip.example.org clrtxt:secret ; +sip:user_1266@sip.example.org clrtxt:secret ; +sip:user_1267@sip.example.org clrtxt:secret ; +sip:user_1268@sip.example.org clrtxt:secret ; +sip:user_1269@sip.example.org clrtxt:secret ; +sip:user_1270@sip.example.org clrtxt:secret ; +sip:user_1271@sip.example.org clrtxt:secret ; +sip:user_1272@sip.example.org clrtxt:secret ; +sip:user_1273@sip.example.org clrtxt:secret ; +sip:user_1274@sip.example.org clrtxt:secret ; +sip:user_1275@sip.example.org clrtxt:secret ; +sip:user_1276@sip.example.org clrtxt:secret ; +sip:user_1277@sip.example.org clrtxt:secret ; +sip:user_1278@sip.example.org clrtxt:secret ; +sip:user_1279@sip.example.org clrtxt:secret ; +sip:user_1280@sip.example.org clrtxt:secret ; +sip:user_1281@sip.example.org clrtxt:secret ; +sip:user_1282@sip.example.org clrtxt:secret ; +sip:user_1283@sip.example.org clrtxt:secret ; +sip:user_1284@sip.example.org clrtxt:secret ; +sip:user_1285@sip.example.org clrtxt:secret ; +sip:user_1286@sip.example.org clrtxt:secret ; +sip:user_1287@sip.example.org clrtxt:secret ; +sip:user_1288@sip.example.org clrtxt:secret ; +sip:user_1289@sip.example.org clrtxt:secret ; +sip:user_1290@sip.example.org clrtxt:secret ; +sip:user_1291@sip.example.org clrtxt:secret ; +sip:user_1292@sip.example.org clrtxt:secret ; +sip:user_1293@sip.example.org clrtxt:secret ; +sip:user_1294@sip.example.org clrtxt:secret ; +sip:user_1295@sip.example.org clrtxt:secret ; +sip:user_1296@sip.example.org clrtxt:secret ; +sip:user_1297@sip.example.org clrtxt:secret ; +sip:user_1298@sip.example.org clrtxt:secret ; +sip:user_1299@sip.example.org clrtxt:secret ; +sip:user_1300@sip.example.org clrtxt:secret ; +sip:user_1301@sip.example.org clrtxt:secret ; +sip:user_1302@sip.example.org clrtxt:secret ; +sip:user_1303@sip.example.org clrtxt:secret ; +sip:user_1304@sip.example.org clrtxt:secret ; +sip:user_1305@sip.example.org clrtxt:secret ; +sip:user_1306@sip.example.org clrtxt:secret ; +sip:user_1307@sip.example.org clrtxt:secret ; +sip:user_1308@sip.example.org clrtxt:secret ; +sip:user_1309@sip.example.org clrtxt:secret ; +sip:user_1310@sip.example.org clrtxt:secret ; +sip:user_1311@sip.example.org clrtxt:secret ; +sip:user_1312@sip.example.org clrtxt:secret ; +sip:user_1313@sip.example.org clrtxt:secret ; +sip:user_1314@sip.example.org clrtxt:secret ; +sip:user_1315@sip.example.org clrtxt:secret ; +sip:user_1316@sip.example.org clrtxt:secret ; +sip:user_1317@sip.example.org clrtxt:secret ; +sip:user_1318@sip.example.org clrtxt:secret ; +sip:user_1319@sip.example.org clrtxt:secret ; +sip:user_1320@sip.example.org clrtxt:secret ; +sip:user_1321@sip.example.org clrtxt:secret ; +sip:user_1322@sip.example.org clrtxt:secret ; +sip:user_1323@sip.example.org clrtxt:secret ; +sip:user_1324@sip.example.org clrtxt:secret ; +sip:user_1325@sip.example.org clrtxt:secret ; +sip:user_1326@sip.example.org clrtxt:secret ; +sip:user_1327@sip.example.org clrtxt:secret ; +sip:user_1328@sip.example.org clrtxt:secret ; +sip:user_1329@sip.example.org clrtxt:secret ; +sip:user_1330@sip.example.org clrtxt:secret ; +sip:user_1331@sip.example.org clrtxt:secret ; +sip:user_1332@sip.example.org clrtxt:secret ; +sip:user_1333@sip.example.org clrtxt:secret ; +sip:user_1334@sip.example.org clrtxt:secret ; +sip:user_1335@sip.example.org clrtxt:secret ; +sip:user_1336@sip.example.org clrtxt:secret ; +sip:user_1337@sip.example.org clrtxt:secret ; +sip:user_1338@sip.example.org clrtxt:secret ; +sip:user_1339@sip.example.org clrtxt:secret ; +sip:user_1340@sip.example.org clrtxt:secret ; +sip:user_1341@sip.example.org clrtxt:secret ; +sip:user_1342@sip.example.org clrtxt:secret ; +sip:user_1343@sip.example.org clrtxt:secret ; +sip:user_1344@sip.example.org clrtxt:secret ; +sip:user_1345@sip.example.org clrtxt:secret ; +sip:user_1346@sip.example.org clrtxt:secret ; +sip:user_1347@sip.example.org clrtxt:secret ; +sip:user_1348@sip.example.org clrtxt:secret ; +sip:user_1349@sip.example.org clrtxt:secret ; +sip:user_1350@sip.example.org clrtxt:secret ; +sip:user_1351@sip.example.org clrtxt:secret ; +sip:user_1352@sip.example.org clrtxt:secret ; +sip:user_1353@sip.example.org clrtxt:secret ; +sip:user_1354@sip.example.org clrtxt:secret ; +sip:user_1355@sip.example.org clrtxt:secret ; +sip:user_1356@sip.example.org clrtxt:secret ; +sip:user_1357@sip.example.org clrtxt:secret ; +sip:user_1358@sip.example.org clrtxt:secret ; +sip:user_1359@sip.example.org clrtxt:secret ; +sip:user_1360@sip.example.org clrtxt:secret ; +sip:user_1361@sip.example.org clrtxt:secret ; +sip:user_1362@sip.example.org clrtxt:secret ; +sip:user_1363@sip.example.org clrtxt:secret ; +sip:user_1364@sip.example.org clrtxt:secret ; +sip:user_1365@sip.example.org clrtxt:secret ; +sip:user_1366@sip.example.org clrtxt:secret ; +sip:user_1367@sip.example.org clrtxt:secret ; +sip:user_1368@sip.example.org clrtxt:secret ; +sip:user_1369@sip.example.org clrtxt:secret ; +sip:user_1370@sip.example.org clrtxt:secret ; +sip:user_1371@sip.example.org clrtxt:secret ; +sip:user_1372@sip.example.org clrtxt:secret ; +sip:user_1373@sip.example.org clrtxt:secret ; +sip:user_1374@sip.example.org clrtxt:secret ; +sip:user_1375@sip.example.org clrtxt:secret ; +sip:user_1376@sip.example.org clrtxt:secret ; +sip:user_1377@sip.example.org clrtxt:secret ; +sip:user_1378@sip.example.org clrtxt:secret ; +sip:user_1379@sip.example.org clrtxt:secret ; +sip:user_1380@sip.example.org clrtxt:secret ; +sip:user_1381@sip.example.org clrtxt:secret ; +sip:user_1382@sip.example.org clrtxt:secret ; +sip:user_1383@sip.example.org clrtxt:secret ; +sip:user_1384@sip.example.org clrtxt:secret ; +sip:user_1385@sip.example.org clrtxt:secret ; +sip:user_1386@sip.example.org clrtxt:secret ; +sip:user_1387@sip.example.org clrtxt:secret ; +sip:user_1388@sip.example.org clrtxt:secret ; +sip:user_1389@sip.example.org clrtxt:secret ; +sip:user_1390@sip.example.org clrtxt:secret ; +sip:user_1391@sip.example.org clrtxt:secret ; +sip:user_1392@sip.example.org clrtxt:secret ; +sip:user_1393@sip.example.org clrtxt:secret ; +sip:user_1394@sip.example.org clrtxt:secret ; +sip:user_1395@sip.example.org clrtxt:secret ; +sip:user_1396@sip.example.org clrtxt:secret ; +sip:user_1397@sip.example.org clrtxt:secret ; +sip:user_1398@sip.example.org clrtxt:secret ; +sip:user_1399@sip.example.org clrtxt:secret ; +sip:user_1400@sip.example.org clrtxt:secret ; +sip:user_1401@sip.example.org clrtxt:secret ; +sip:user_1402@sip.example.org clrtxt:secret ; +sip:user_1403@sip.example.org clrtxt:secret ; +sip:user_1404@sip.example.org clrtxt:secret ; +sip:user_1405@sip.example.org clrtxt:secret ; +sip:user_1406@sip.example.org clrtxt:secret ; +sip:user_1407@sip.example.org clrtxt:secret ; +sip:user_1408@sip.example.org clrtxt:secret ; +sip:user_1409@sip.example.org clrtxt:secret ; +sip:user_1410@sip.example.org clrtxt:secret ; +sip:user_1411@sip.example.org clrtxt:secret ; +sip:user_1412@sip.example.org clrtxt:secret ; +sip:user_1413@sip.example.org clrtxt:secret ; +sip:user_1414@sip.example.org clrtxt:secret ; +sip:user_1415@sip.example.org clrtxt:secret ; +sip:user_1416@sip.example.org clrtxt:secret ; +sip:user_1417@sip.example.org clrtxt:secret ; +sip:user_1418@sip.example.org clrtxt:secret ; +sip:user_1419@sip.example.org clrtxt:secret ; +sip:user_1420@sip.example.org clrtxt:secret ; +sip:user_1421@sip.example.org clrtxt:secret ; +sip:user_1422@sip.example.org clrtxt:secret ; +sip:user_1423@sip.example.org clrtxt:secret ; +sip:user_1424@sip.example.org clrtxt:secret ; +sip:user_1425@sip.example.org clrtxt:secret ; +sip:user_1426@sip.example.org clrtxt:secret ; +sip:user_1427@sip.example.org clrtxt:secret ; +sip:user_1428@sip.example.org clrtxt:secret ; +sip:user_1429@sip.example.org clrtxt:secret ; +sip:user_1430@sip.example.org clrtxt:secret ; +sip:user_1431@sip.example.org clrtxt:secret ; +sip:user_1432@sip.example.org clrtxt:secret ; +sip:user_1433@sip.example.org clrtxt:secret ; +sip:user_1434@sip.example.org clrtxt:secret ; +sip:user_1435@sip.example.org clrtxt:secret ; +sip:user_1436@sip.example.org clrtxt:secret ; +sip:user_1437@sip.example.org clrtxt:secret ; +sip:user_1438@sip.example.org clrtxt:secret ; +sip:user_1439@sip.example.org clrtxt:secret ; +sip:user_1440@sip.example.org clrtxt:secret ; +sip:user_1441@sip.example.org clrtxt:secret ; +sip:user_1442@sip.example.org clrtxt:secret ; +sip:user_1443@sip.example.org clrtxt:secret ; +sip:user_1444@sip.example.org clrtxt:secret ; +sip:user_1445@sip.example.org clrtxt:secret ; +sip:user_1446@sip.example.org clrtxt:secret ; +sip:user_1447@sip.example.org clrtxt:secret ; +sip:user_1448@sip.example.org clrtxt:secret ; +sip:user_1449@sip.example.org clrtxt:secret ; +sip:user_1450@sip.example.org clrtxt:secret ; +sip:user_1451@sip.example.org clrtxt:secret ; +sip:user_1452@sip.example.org clrtxt:secret ; +sip:user_1453@sip.example.org clrtxt:secret ; +sip:user_1454@sip.example.org clrtxt:secret ; +sip:user_1455@sip.example.org clrtxt:secret ; +sip:user_1456@sip.example.org clrtxt:secret ; +sip:user_1457@sip.example.org clrtxt:secret ; +sip:user_1458@sip.example.org clrtxt:secret ; +sip:user_1459@sip.example.org clrtxt:secret ; +sip:user_1460@sip.example.org clrtxt:secret ; +sip:user_1461@sip.example.org clrtxt:secret ; +sip:user_1462@sip.example.org clrtxt:secret ; +sip:user_1463@sip.example.org clrtxt:secret ; +sip:user_1464@sip.example.org clrtxt:secret ; +sip:user_1465@sip.example.org clrtxt:secret ; +sip:user_1466@sip.example.org clrtxt:secret ; +sip:user_1467@sip.example.org clrtxt:secret ; +sip:user_1468@sip.example.org clrtxt:secret ; +sip:user_1469@sip.example.org clrtxt:secret ; +sip:user_1470@sip.example.org clrtxt:secret ; +sip:user_1471@sip.example.org clrtxt:secret ; +sip:user_1472@sip.example.org clrtxt:secret ; +sip:user_1473@sip.example.org clrtxt:secret ; +sip:user_1474@sip.example.org clrtxt:secret ; +sip:user_1475@sip.example.org clrtxt:secret ; +sip:user_1476@sip.example.org clrtxt:secret ; +sip:user_1477@sip.example.org clrtxt:secret ; +sip:user_1478@sip.example.org clrtxt:secret ; +sip:user_1479@sip.example.org clrtxt:secret ; +sip:user_1480@sip.example.org clrtxt:secret ; +sip:user_1481@sip.example.org clrtxt:secret ; +sip:user_1482@sip.example.org clrtxt:secret ; +sip:user_1483@sip.example.org clrtxt:secret ; +sip:user_1484@sip.example.org clrtxt:secret ; +sip:user_1485@sip.example.org clrtxt:secret ; +sip:user_1486@sip.example.org clrtxt:secret ; +sip:user_1487@sip.example.org clrtxt:secret ; +sip:user_1488@sip.example.org clrtxt:secret ; +sip:user_1489@sip.example.org clrtxt:secret ; +sip:user_1490@sip.example.org clrtxt:secret ; +sip:user_1491@sip.example.org clrtxt:secret ; +sip:user_1492@sip.example.org clrtxt:secret ; +sip:user_1493@sip.example.org clrtxt:secret ; +sip:user_1494@sip.example.org clrtxt:secret ; +sip:user_1495@sip.example.org clrtxt:secret ; +sip:user_1496@sip.example.org clrtxt:secret ; +sip:user_1497@sip.example.org clrtxt:secret ; +sip:user_1498@sip.example.org clrtxt:secret ; +sip:user_1499@sip.example.org clrtxt:secret ; +sip:user_1500@sip.example.org clrtxt:secret ; +sip:user_1501@sip.example.org clrtxt:secret ; +sip:user_1502@sip.example.org clrtxt:secret ; +sip:user_1503@sip.example.org clrtxt:secret ; +sip:user_1504@sip.example.org clrtxt:secret ; +sip:user_1505@sip.example.org clrtxt:secret ; +sip:user_1506@sip.example.org clrtxt:secret ; +sip:user_1507@sip.example.org clrtxt:secret ; +sip:user_1508@sip.example.org clrtxt:secret ; +sip:user_1509@sip.example.org clrtxt:secret ; +sip:user_1510@sip.example.org clrtxt:secret ; +sip:user_1511@sip.example.org clrtxt:secret ; +sip:user_1512@sip.example.org clrtxt:secret ; +sip:user_1513@sip.example.org clrtxt:secret ; +sip:user_1514@sip.example.org clrtxt:secret ; +sip:user_1515@sip.example.org clrtxt:secret ; +sip:user_1516@sip.example.org clrtxt:secret ; +sip:user_1517@sip.example.org clrtxt:secret ; +sip:user_1518@sip.example.org clrtxt:secret ; +sip:user_1519@sip.example.org clrtxt:secret ; +sip:user_1520@sip.example.org clrtxt:secret ; +sip:user_1521@sip.example.org clrtxt:secret ; +sip:user_1522@sip.example.org clrtxt:secret ; +sip:user_1523@sip.example.org clrtxt:secret ; +sip:user_1524@sip.example.org clrtxt:secret ; +sip:user_1525@sip.example.org clrtxt:secret ; +sip:user_1526@sip.example.org clrtxt:secret ; +sip:user_1527@sip.example.org clrtxt:secret ; +sip:user_1528@sip.example.org clrtxt:secret ; +sip:user_1529@sip.example.org clrtxt:secret ; +sip:user_1530@sip.example.org clrtxt:secret ; +sip:user_1531@sip.example.org clrtxt:secret ; +sip:user_1532@sip.example.org clrtxt:secret ; +sip:user_1533@sip.example.org clrtxt:secret ; +sip:user_1534@sip.example.org clrtxt:secret ; +sip:user_1535@sip.example.org clrtxt:secret ; +sip:user_1536@sip.example.org clrtxt:secret ; +sip:user_1537@sip.example.org clrtxt:secret ; +sip:user_1538@sip.example.org clrtxt:secret ; +sip:user_1539@sip.example.org clrtxt:secret ; +sip:user_1540@sip.example.org clrtxt:secret ; +sip:user_1541@sip.example.org clrtxt:secret ; +sip:user_1542@sip.example.org clrtxt:secret ; +sip:user_1543@sip.example.org clrtxt:secret ; +sip:user_1544@sip.example.org clrtxt:secret ; +sip:user_1545@sip.example.org clrtxt:secret ; +sip:user_1546@sip.example.org clrtxt:secret ; +sip:user_1547@sip.example.org clrtxt:secret ; +sip:user_1548@sip.example.org clrtxt:secret ; +sip:user_1549@sip.example.org clrtxt:secret ; +sip:user_1550@sip.example.org clrtxt:secret ; +sip:user_1551@sip.example.org clrtxt:secret ; +sip:user_1552@sip.example.org clrtxt:secret ; +sip:user_1553@sip.example.org clrtxt:secret ; +sip:user_1554@sip.example.org clrtxt:secret ; +sip:user_1555@sip.example.org clrtxt:secret ; +sip:user_1556@sip.example.org clrtxt:secret ; +sip:user_1557@sip.example.org clrtxt:secret ; +sip:user_1558@sip.example.org clrtxt:secret ; +sip:user_1559@sip.example.org clrtxt:secret ; +sip:user_1560@sip.example.org clrtxt:secret ; +sip:user_1561@sip.example.org clrtxt:secret ; +sip:user_1562@sip.example.org clrtxt:secret ; +sip:user_1563@sip.example.org clrtxt:secret ; +sip:user_1564@sip.example.org clrtxt:secret ; +sip:user_1565@sip.example.org clrtxt:secret ; +sip:user_1566@sip.example.org clrtxt:secret ; +sip:user_1567@sip.example.org clrtxt:secret ; +sip:user_1568@sip.example.org clrtxt:secret ; +sip:user_1569@sip.example.org clrtxt:secret ; +sip:user_1570@sip.example.org clrtxt:secret ; +sip:user_1571@sip.example.org clrtxt:secret ; +sip:user_1572@sip.example.org clrtxt:secret ; +sip:user_1573@sip.example.org clrtxt:secret ; +sip:user_1574@sip.example.org clrtxt:secret ; +sip:user_1575@sip.example.org clrtxt:secret ; +sip:user_1576@sip.example.org clrtxt:secret ; +sip:user_1577@sip.example.org clrtxt:secret ; +sip:user_1578@sip.example.org clrtxt:secret ; +sip:user_1579@sip.example.org clrtxt:secret ; +sip:user_1580@sip.example.org clrtxt:secret ; +sip:user_1581@sip.example.org clrtxt:secret ; +sip:user_1582@sip.example.org clrtxt:secret ; +sip:user_1583@sip.example.org clrtxt:secret ; +sip:user_1584@sip.example.org clrtxt:secret ; +sip:user_1585@sip.example.org clrtxt:secret ; +sip:user_1586@sip.example.org clrtxt:secret ; +sip:user_1587@sip.example.org clrtxt:secret ; +sip:user_1588@sip.example.org clrtxt:secret ; +sip:user_1589@sip.example.org clrtxt:secret ; +sip:user_1590@sip.example.org clrtxt:secret ; +sip:user_1591@sip.example.org clrtxt:secret ; +sip:user_1592@sip.example.org clrtxt:secret ; +sip:user_1593@sip.example.org clrtxt:secret ; +sip:user_1594@sip.example.org clrtxt:secret ; +sip:user_1595@sip.example.org clrtxt:secret ; +sip:user_1596@sip.example.org clrtxt:secret ; +sip:user_1597@sip.example.org clrtxt:secret ; +sip:user_1598@sip.example.org clrtxt:secret ; +sip:user_1599@sip.example.org clrtxt:secret ; +sip:user_1600@sip.example.org clrtxt:secret ; +sip:user_1601@sip.example.org clrtxt:secret ; +sip:user_1602@sip.example.org clrtxt:secret ; +sip:user_1603@sip.example.org clrtxt:secret ; +sip:user_1604@sip.example.org clrtxt:secret ; +sip:user_1605@sip.example.org clrtxt:secret ; +sip:user_1606@sip.example.org clrtxt:secret ; +sip:user_1607@sip.example.org clrtxt:secret ; +sip:user_1608@sip.example.org clrtxt:secret ; +sip:user_1609@sip.example.org clrtxt:secret ; +sip:user_1610@sip.example.org clrtxt:secret ; +sip:user_1611@sip.example.org clrtxt:secret ; +sip:user_1612@sip.example.org clrtxt:secret ; +sip:user_1613@sip.example.org clrtxt:secret ; +sip:user_1614@sip.example.org clrtxt:secret ; +sip:user_1615@sip.example.org clrtxt:secret ; +sip:user_1616@sip.example.org clrtxt:secret ; +sip:user_1617@sip.example.org clrtxt:secret ; +sip:user_1618@sip.example.org clrtxt:secret ; +sip:user_1619@sip.example.org clrtxt:secret ; +sip:user_1620@sip.example.org clrtxt:secret ; +sip:user_1621@sip.example.org clrtxt:secret ; +sip:user_1622@sip.example.org clrtxt:secret ; +sip:user_1623@sip.example.org clrtxt:secret ; +sip:user_1624@sip.example.org clrtxt:secret ; +sip:user_1625@sip.example.org clrtxt:secret ; +sip:user_1626@sip.example.org clrtxt:secret ; +sip:user_1627@sip.example.org clrtxt:secret ; +sip:user_1628@sip.example.org clrtxt:secret ; +sip:user_1629@sip.example.org clrtxt:secret ; +sip:user_1630@sip.example.org clrtxt:secret ; +sip:user_1631@sip.example.org clrtxt:secret ; +sip:user_1632@sip.example.org clrtxt:secret ; +sip:user_1633@sip.example.org clrtxt:secret ; +sip:user_1634@sip.example.org clrtxt:secret ; +sip:user_1635@sip.example.org clrtxt:secret ; +sip:user_1636@sip.example.org clrtxt:secret ; +sip:user_1637@sip.example.org clrtxt:secret ; +sip:user_1638@sip.example.org clrtxt:secret ; +sip:user_1639@sip.example.org clrtxt:secret ; +sip:user_1640@sip.example.org clrtxt:secret ; +sip:user_1641@sip.example.org clrtxt:secret ; +sip:user_1642@sip.example.org clrtxt:secret ; +sip:user_1643@sip.example.org clrtxt:secret ; +sip:user_1644@sip.example.org clrtxt:secret ; +sip:user_1645@sip.example.org clrtxt:secret ; +sip:user_1646@sip.example.org clrtxt:secret ; +sip:user_1647@sip.example.org clrtxt:secret ; +sip:user_1648@sip.example.org clrtxt:secret ; +sip:user_1649@sip.example.org clrtxt:secret ; +sip:user_1650@sip.example.org clrtxt:secret ; +sip:user_1651@sip.example.org clrtxt:secret ; +sip:user_1652@sip.example.org clrtxt:secret ; +sip:user_1653@sip.example.org clrtxt:secret ; +sip:user_1654@sip.example.org clrtxt:secret ; +sip:user_1655@sip.example.org clrtxt:secret ; +sip:user_1656@sip.example.org clrtxt:secret ; +sip:user_1657@sip.example.org clrtxt:secret ; +sip:user_1658@sip.example.org clrtxt:secret ; +sip:user_1659@sip.example.org clrtxt:secret ; +sip:user_1660@sip.example.org clrtxt:secret ; +sip:user_1661@sip.example.org clrtxt:secret ; +sip:user_1662@sip.example.org clrtxt:secret ; +sip:user_1663@sip.example.org clrtxt:secret ; +sip:user_1664@sip.example.org clrtxt:secret ; +sip:user_1665@sip.example.org clrtxt:secret ; +sip:user_1666@sip.example.org clrtxt:secret ; +sip:user_1667@sip.example.org clrtxt:secret ; +sip:user_1668@sip.example.org clrtxt:secret ; +sip:user_1669@sip.example.org clrtxt:secret ; +sip:user_1670@sip.example.org clrtxt:secret ; +sip:user_1671@sip.example.org clrtxt:secret ; +sip:user_1672@sip.example.org clrtxt:secret ; +sip:user_1673@sip.example.org clrtxt:secret ; +sip:user_1674@sip.example.org clrtxt:secret ; +sip:user_1675@sip.example.org clrtxt:secret ; +sip:user_1676@sip.example.org clrtxt:secret ; +sip:user_1677@sip.example.org clrtxt:secret ; +sip:user_1678@sip.example.org clrtxt:secret ; +sip:user_1679@sip.example.org clrtxt:secret ; +sip:user_1680@sip.example.org clrtxt:secret ; +sip:user_1681@sip.example.org clrtxt:secret ; +sip:user_1682@sip.example.org clrtxt:secret ; +sip:user_1683@sip.example.org clrtxt:secret ; +sip:user_1684@sip.example.org clrtxt:secret ; +sip:user_1685@sip.example.org clrtxt:secret ; +sip:user_1686@sip.example.org clrtxt:secret ; +sip:user_1687@sip.example.org clrtxt:secret ; +sip:user_1688@sip.example.org clrtxt:secret ; +sip:user_1689@sip.example.org clrtxt:secret ; +sip:user_1690@sip.example.org clrtxt:secret ; +sip:user_1691@sip.example.org clrtxt:secret ; +sip:user_1692@sip.example.org clrtxt:secret ; +sip:user_1693@sip.example.org clrtxt:secret ; +sip:user_1694@sip.example.org clrtxt:secret ; +sip:user_1695@sip.example.org clrtxt:secret ; +sip:user_1696@sip.example.org clrtxt:secret ; +sip:user_1697@sip.example.org clrtxt:secret ; +sip:user_1698@sip.example.org clrtxt:secret ; +sip:user_1699@sip.example.org clrtxt:secret ; +sip:user_1700@sip.example.org clrtxt:secret ; +sip:user_1701@sip.example.org clrtxt:secret ; +sip:user_1702@sip.example.org clrtxt:secret ; +sip:user_1703@sip.example.org clrtxt:secret ; +sip:user_1704@sip.example.org clrtxt:secret ; +sip:user_1705@sip.example.org clrtxt:secret ; +sip:user_1706@sip.example.org clrtxt:secret ; +sip:user_1707@sip.example.org clrtxt:secret ; +sip:user_1708@sip.example.org clrtxt:secret ; +sip:user_1709@sip.example.org clrtxt:secret ; +sip:user_1710@sip.example.org clrtxt:secret ; +sip:user_1711@sip.example.org clrtxt:secret ; +sip:user_1712@sip.example.org clrtxt:secret ; +sip:user_1713@sip.example.org clrtxt:secret ; +sip:user_1714@sip.example.org clrtxt:secret ; +sip:user_1715@sip.example.org clrtxt:secret ; +sip:user_1716@sip.example.org clrtxt:secret ; +sip:user_1717@sip.example.org clrtxt:secret ; +sip:user_1718@sip.example.org clrtxt:secret ; +sip:user_1719@sip.example.org clrtxt:secret ; +sip:user_1720@sip.example.org clrtxt:secret ; +sip:user_1721@sip.example.org clrtxt:secret ; +sip:user_1722@sip.example.org clrtxt:secret ; +sip:user_1723@sip.example.org clrtxt:secret ; +sip:user_1724@sip.example.org clrtxt:secret ; +sip:user_1725@sip.example.org clrtxt:secret ; +sip:user_1726@sip.example.org clrtxt:secret ; +sip:user_1727@sip.example.org clrtxt:secret ; +sip:user_1728@sip.example.org clrtxt:secret ; +sip:user_1729@sip.example.org clrtxt:secret ; +sip:user_1730@sip.example.org clrtxt:secret ; +sip:user_1731@sip.example.org clrtxt:secret ; +sip:user_1732@sip.example.org clrtxt:secret ; +sip:user_1733@sip.example.org clrtxt:secret ; +sip:user_1734@sip.example.org clrtxt:secret ; +sip:user_1735@sip.example.org clrtxt:secret ; +sip:user_1736@sip.example.org clrtxt:secret ; +sip:user_1737@sip.example.org clrtxt:secret ; +sip:user_1738@sip.example.org clrtxt:secret ; +sip:user_1739@sip.example.org clrtxt:secret ; +sip:user_1740@sip.example.org clrtxt:secret ; +sip:user_1741@sip.example.org clrtxt:secret ; +sip:user_1742@sip.example.org clrtxt:secret ; +sip:user_1743@sip.example.org clrtxt:secret ; +sip:user_1744@sip.example.org clrtxt:secret ; +sip:user_1745@sip.example.org clrtxt:secret ; +sip:user_1746@sip.example.org clrtxt:secret ; +sip:user_1747@sip.example.org clrtxt:secret ; +sip:user_1748@sip.example.org clrtxt:secret ; +sip:user_1749@sip.example.org clrtxt:secret ; +sip:user_1750@sip.example.org clrtxt:secret ; +sip:user_1751@sip.example.org clrtxt:secret ; +sip:user_1752@sip.example.org clrtxt:secret ; +sip:user_1753@sip.example.org clrtxt:secret ; +sip:user_1754@sip.example.org clrtxt:secret ; +sip:user_1755@sip.example.org clrtxt:secret ; +sip:user_1756@sip.example.org clrtxt:secret ; +sip:user_1757@sip.example.org clrtxt:secret ; +sip:user_1758@sip.example.org clrtxt:secret ; +sip:user_1759@sip.example.org clrtxt:secret ; +sip:user_1760@sip.example.org clrtxt:secret ; +sip:user_1761@sip.example.org clrtxt:secret ; +sip:user_1762@sip.example.org clrtxt:secret ; +sip:user_1763@sip.example.org clrtxt:secret ; +sip:user_1764@sip.example.org clrtxt:secret ; +sip:user_1765@sip.example.org clrtxt:secret ; +sip:user_1766@sip.example.org clrtxt:secret ; +sip:user_1767@sip.example.org clrtxt:secret ; +sip:user_1768@sip.example.org clrtxt:secret ; +sip:user_1769@sip.example.org clrtxt:secret ; +sip:user_1770@sip.example.org clrtxt:secret ; +sip:user_1771@sip.example.org clrtxt:secret ; +sip:user_1772@sip.example.org clrtxt:secret ; +sip:user_1773@sip.example.org clrtxt:secret ; +sip:user_1774@sip.example.org clrtxt:secret ; +sip:user_1775@sip.example.org clrtxt:secret ; +sip:user_1776@sip.example.org clrtxt:secret ; +sip:user_1777@sip.example.org clrtxt:secret ; +sip:user_1778@sip.example.org clrtxt:secret ; +sip:user_1779@sip.example.org clrtxt:secret ; +sip:user_1780@sip.example.org clrtxt:secret ; +sip:user_1781@sip.example.org clrtxt:secret ; +sip:user_1782@sip.example.org clrtxt:secret ; +sip:user_1783@sip.example.org clrtxt:secret ; +sip:user_1784@sip.example.org clrtxt:secret ; +sip:user_1785@sip.example.org clrtxt:secret ; +sip:user_1786@sip.example.org clrtxt:secret ; +sip:user_1787@sip.example.org clrtxt:secret ; +sip:user_1788@sip.example.org clrtxt:secret ; +sip:user_1789@sip.example.org clrtxt:secret ; +sip:user_1790@sip.example.org clrtxt:secret ; +sip:user_1791@sip.example.org clrtxt:secret ; +sip:user_1792@sip.example.org clrtxt:secret ; +sip:user_1793@sip.example.org clrtxt:secret ; +sip:user_1794@sip.example.org clrtxt:secret ; +sip:user_1795@sip.example.org clrtxt:secret ; +sip:user_1796@sip.example.org clrtxt:secret ; +sip:user_1797@sip.example.org clrtxt:secret ; +sip:user_1798@sip.example.org clrtxt:secret ; +sip:user_1799@sip.example.org clrtxt:secret ; +sip:user_1800@sip.example.org clrtxt:secret ; +sip:user_1801@sip.example.org clrtxt:secret ; +sip:user_1802@sip.example.org clrtxt:secret ; +sip:user_1803@sip.example.org clrtxt:secret ; +sip:user_1804@sip.example.org clrtxt:secret ; +sip:user_1805@sip.example.org clrtxt:secret ; +sip:user_1806@sip.example.org clrtxt:secret ; +sip:user_1807@sip.example.org clrtxt:secret ; +sip:user_1808@sip.example.org clrtxt:secret ; +sip:user_1809@sip.example.org clrtxt:secret ; +sip:user_1810@sip.example.org clrtxt:secret ; +sip:user_1811@sip.example.org clrtxt:secret ; +sip:user_1812@sip.example.org clrtxt:secret ; +sip:user_1813@sip.example.org clrtxt:secret ; +sip:user_1814@sip.example.org clrtxt:secret ; +sip:user_1815@sip.example.org clrtxt:secret ; +sip:user_1816@sip.example.org clrtxt:secret ; +sip:user_1817@sip.example.org clrtxt:secret ; +sip:user_1818@sip.example.org clrtxt:secret ; +sip:user_1819@sip.example.org clrtxt:secret ; +sip:user_1820@sip.example.org clrtxt:secret ; +sip:user_1821@sip.example.org clrtxt:secret ; +sip:user_1822@sip.example.org clrtxt:secret ; +sip:user_1823@sip.example.org clrtxt:secret ; +sip:user_1824@sip.example.org clrtxt:secret ; +sip:user_1825@sip.example.org clrtxt:secret ; +sip:user_1826@sip.example.org clrtxt:secret ; +sip:user_1827@sip.example.org clrtxt:secret ; +sip:user_1828@sip.example.org clrtxt:secret ; +sip:user_1829@sip.example.org clrtxt:secret ; +sip:user_1830@sip.example.org clrtxt:secret ; +sip:user_1831@sip.example.org clrtxt:secret ; +sip:user_1832@sip.example.org clrtxt:secret ; +sip:user_1833@sip.example.org clrtxt:secret ; +sip:user_1834@sip.example.org clrtxt:secret ; +sip:user_1835@sip.example.org clrtxt:secret ; +sip:user_1836@sip.example.org clrtxt:secret ; +sip:user_1837@sip.example.org clrtxt:secret ; +sip:user_1838@sip.example.org clrtxt:secret ; +sip:user_1839@sip.example.org clrtxt:secret ; +sip:user_1840@sip.example.org clrtxt:secret ; +sip:user_1841@sip.example.org clrtxt:secret ; +sip:user_1842@sip.example.org clrtxt:secret ; +sip:user_1843@sip.example.org clrtxt:secret ; +sip:user_1844@sip.example.org clrtxt:secret ; +sip:user_1845@sip.example.org clrtxt:secret ; +sip:user_1846@sip.example.org clrtxt:secret ; +sip:user_1847@sip.example.org clrtxt:secret ; +sip:user_1848@sip.example.org clrtxt:secret ; +sip:user_1849@sip.example.org clrtxt:secret ; +sip:user_1850@sip.example.org clrtxt:secret ; +sip:user_1851@sip.example.org clrtxt:secret ; +sip:user_1852@sip.example.org clrtxt:secret ; +sip:user_1853@sip.example.org clrtxt:secret ; +sip:user_1854@sip.example.org clrtxt:secret ; +sip:user_1855@sip.example.org clrtxt:secret ; +sip:user_1856@sip.example.org clrtxt:secret ; +sip:user_1857@sip.example.org clrtxt:secret ; +sip:user_1858@sip.example.org clrtxt:secret ; +sip:user_1859@sip.example.org clrtxt:secret ; +sip:user_1860@sip.example.org clrtxt:secret ; +sip:user_1861@sip.example.org clrtxt:secret ; +sip:user_1862@sip.example.org clrtxt:secret ; +sip:user_1863@sip.example.org clrtxt:secret ; +sip:user_1864@sip.example.org clrtxt:secret ; +sip:user_1865@sip.example.org clrtxt:secret ; +sip:user_1866@sip.example.org clrtxt:secret ; +sip:user_1867@sip.example.org clrtxt:secret ; +sip:user_1868@sip.example.org clrtxt:secret ; +sip:user_1869@sip.example.org clrtxt:secret ; +sip:user_1870@sip.example.org clrtxt:secret ; +sip:user_1871@sip.example.org clrtxt:secret ; +sip:user_1872@sip.example.org clrtxt:secret ; +sip:user_1873@sip.example.org clrtxt:secret ; +sip:user_1874@sip.example.org clrtxt:secret ; +sip:user_1875@sip.example.org clrtxt:secret ; +sip:user_1876@sip.example.org clrtxt:secret ; +sip:user_1877@sip.example.org clrtxt:secret ; +sip:user_1878@sip.example.org clrtxt:secret ; +sip:user_1879@sip.example.org clrtxt:secret ; +sip:user_1880@sip.example.org clrtxt:secret ; +sip:user_1881@sip.example.org clrtxt:secret ; +sip:user_1882@sip.example.org clrtxt:secret ; +sip:user_1883@sip.example.org clrtxt:secret ; +sip:user_1884@sip.example.org clrtxt:secret ; +sip:user_1885@sip.example.org clrtxt:secret ; +sip:user_1886@sip.example.org clrtxt:secret ; +sip:user_1887@sip.example.org clrtxt:secret ; +sip:user_1888@sip.example.org clrtxt:secret ; +sip:user_1889@sip.example.org clrtxt:secret ; +sip:user_1890@sip.example.org clrtxt:secret ; +sip:user_1891@sip.example.org clrtxt:secret ; +sip:user_1892@sip.example.org clrtxt:secret ; +sip:user_1893@sip.example.org clrtxt:secret ; +sip:user_1894@sip.example.org clrtxt:secret ; +sip:user_1895@sip.example.org clrtxt:secret ; +sip:user_1896@sip.example.org clrtxt:secret ; +sip:user_1897@sip.example.org clrtxt:secret ; +sip:user_1898@sip.example.org clrtxt:secret ; +sip:user_1899@sip.example.org clrtxt:secret ; +sip:user_1900@sip.example.org clrtxt:secret ; +sip:user_1901@sip.example.org clrtxt:secret ; +sip:user_1902@sip.example.org clrtxt:secret ; +sip:user_1903@sip.example.org clrtxt:secret ; +sip:user_1904@sip.example.org clrtxt:secret ; +sip:user_1905@sip.example.org clrtxt:secret ; +sip:user_1906@sip.example.org clrtxt:secret ; +sip:user_1907@sip.example.org clrtxt:secret ; +sip:user_1908@sip.example.org clrtxt:secret ; +sip:user_1909@sip.example.org clrtxt:secret ; +sip:user_1910@sip.example.org clrtxt:secret ; +sip:user_1911@sip.example.org clrtxt:secret ; +sip:user_1912@sip.example.org clrtxt:secret ; +sip:user_1913@sip.example.org clrtxt:secret ; +sip:user_1914@sip.example.org clrtxt:secret ; +sip:user_1915@sip.example.org clrtxt:secret ; +sip:user_1916@sip.example.org clrtxt:secret ; +sip:user_1917@sip.example.org clrtxt:secret ; +sip:user_1918@sip.example.org clrtxt:secret ; +sip:user_1919@sip.example.org clrtxt:secret ; +sip:user_1920@sip.example.org clrtxt:secret ; +sip:user_1921@sip.example.org clrtxt:secret ; +sip:user_1922@sip.example.org clrtxt:secret ; +sip:user_1923@sip.example.org clrtxt:secret ; +sip:user_1924@sip.example.org clrtxt:secret ; +sip:user_1925@sip.example.org clrtxt:secret ; +sip:user_1926@sip.example.org clrtxt:secret ; +sip:user_1927@sip.example.org clrtxt:secret ; +sip:user_1928@sip.example.org clrtxt:secret ; +sip:user_1929@sip.example.org clrtxt:secret ; +sip:user_1930@sip.example.org clrtxt:secret ; +sip:user_1931@sip.example.org clrtxt:secret ; +sip:user_1932@sip.example.org clrtxt:secret ; +sip:user_1933@sip.example.org clrtxt:secret ; +sip:user_1934@sip.example.org clrtxt:secret ; +sip:user_1935@sip.example.org clrtxt:secret ; +sip:user_1936@sip.example.org clrtxt:secret ; +sip:user_1937@sip.example.org clrtxt:secret ; +sip:user_1938@sip.example.org clrtxt:secret ; +sip:user_1939@sip.example.org clrtxt:secret ; +sip:user_1940@sip.example.org clrtxt:secret ; +sip:user_1941@sip.example.org clrtxt:secret ; +sip:user_1942@sip.example.org clrtxt:secret ; +sip:user_1943@sip.example.org clrtxt:secret ; +sip:user_1944@sip.example.org clrtxt:secret ; +sip:user_1945@sip.example.org clrtxt:secret ; +sip:user_1946@sip.example.org clrtxt:secret ; +sip:user_1947@sip.example.org clrtxt:secret ; +sip:user_1948@sip.example.org clrtxt:secret ; +sip:user_1949@sip.example.org clrtxt:secret ; +sip:user_1950@sip.example.org clrtxt:secret ; +sip:user_1951@sip.example.org clrtxt:secret ; +sip:user_1952@sip.example.org clrtxt:secret ; +sip:user_1953@sip.example.org clrtxt:secret ; +sip:user_1954@sip.example.org clrtxt:secret ; +sip:user_1955@sip.example.org clrtxt:secret ; +sip:user_1956@sip.example.org clrtxt:secret ; +sip:user_1957@sip.example.org clrtxt:secret ; +sip:user_1958@sip.example.org clrtxt:secret ; +sip:user_1959@sip.example.org clrtxt:secret ; +sip:user_1960@sip.example.org clrtxt:secret ; +sip:user_1961@sip.example.org clrtxt:secret ; +sip:user_1962@sip.example.org clrtxt:secret ; +sip:user_1963@sip.example.org clrtxt:secret ; +sip:user_1964@sip.example.org clrtxt:secret ; +sip:user_1965@sip.example.org clrtxt:secret ; +sip:user_1966@sip.example.org clrtxt:secret ; +sip:user_1967@sip.example.org clrtxt:secret ; +sip:user_1968@sip.example.org clrtxt:secret ; +sip:user_1969@sip.example.org clrtxt:secret ; +sip:user_1970@sip.example.org clrtxt:secret ; +sip:user_1971@sip.example.org clrtxt:secret ; +sip:user_1972@sip.example.org clrtxt:secret ; +sip:user_1973@sip.example.org clrtxt:secret ; +sip:user_1974@sip.example.org clrtxt:secret ; +sip:user_1975@sip.example.org clrtxt:secret ; +sip:user_1976@sip.example.org clrtxt:secret ; +sip:user_1977@sip.example.org clrtxt:secret ; +sip:user_1978@sip.example.org clrtxt:secret ; +sip:user_1979@sip.example.org clrtxt:secret ; +sip:user_1980@sip.example.org clrtxt:secret ; +sip:user_1981@sip.example.org clrtxt:secret ; +sip:user_1982@sip.example.org clrtxt:secret ; +sip:user_1983@sip.example.org clrtxt:secret ; +sip:user_1984@sip.example.org clrtxt:secret ; +sip:user_1985@sip.example.org clrtxt:secret ; +sip:user_1986@sip.example.org clrtxt:secret ; +sip:user_1987@sip.example.org clrtxt:secret ; +sip:user_1988@sip.example.org clrtxt:secret ; +sip:user_1989@sip.example.org clrtxt:secret ; +sip:user_1990@sip.example.org clrtxt:secret ; +sip:user_1991@sip.example.org clrtxt:secret ; +sip:user_1992@sip.example.org clrtxt:secret ; +sip:user_1993@sip.example.org clrtxt:secret ; +sip:user_1994@sip.example.org clrtxt:secret ; +sip:user_1995@sip.example.org clrtxt:secret ; +sip:user_1996@sip.example.org clrtxt:secret ; +sip:user_1997@sip.example.org clrtxt:secret ; +sip:user_1998@sip.example.org clrtxt:secret ; +sip:user_1999@sip.example.org clrtxt:secret ; +sip:user_2000@sip.example.org clrtxt:secret ; diff --git a/tester/group_chat_tester.c b/tester/group_chat_tester.c index bc9bb7159..9ddfc9329 100644 --- a/tester/group_chat_tester.c +++ b/tester/group_chat_tester.c @@ -2430,6 +2430,7 @@ static void group_chat_room_migrate_from_basic_to_client_fail (void) { BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(paulineCr), 4, int, "%d"); // Activate groupchat on Pauline's side and wait for 5 seconds, the migration should now be done on next message sending + lp_config_set_int(linphone_core_get_config(marie->lc),"misc","basic_to_client_group_chat_room_migration_timer",5); linphone_core_set_linphone_specs(pauline->lc, "groupchat"); linphone_core_set_network_reachable(pauline->lc, FALSE); wait_for_list(coresList, &dummy, 1, 1000); @@ -2508,13 +2509,13 @@ static void group_chat_donot_room_migrate_from_basic_chat_room (void) { linphone_chat_message_send(msg); linphone_chat_message_unref(msg); BC_ASSERT_FALSE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreationPending, initialMarieStats.number_of_LinphoneChatRoomStateCreationPending + 1, 10000)); - BC_ASSERT_FALSE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreated, initialMarieStats.number_of_LinphoneChatRoomStateCreated + 1, 10000)); + BC_ASSERT_FALSE(wait_for_list(coresList, &marie->stat.number_of_LinphoneChatRoomStateCreated, initialMarieStats.number_of_LinphoneChatRoomStateCreated + 1, 3000)); BC_ASSERT_TRUE(linphone_chat_room_get_capabilities(marieCr) & LinphoneChatRoomCapabilitiesBasic); BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(marieCr), 1, int, "%d"); BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(marieCr), 2, int, "%d"); BC_ASSERT_FALSE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreationPending, initialPaulineStats.number_of_LinphoneChatRoomStateCreationPending + 1, 10000)); - BC_ASSERT_FALSE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreated, initialPaulineStats.number_of_LinphoneChatRoomStateCreated + 1, 10000)); + BC_ASSERT_FALSE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneChatRoomStateCreated, initialPaulineStats.number_of_LinphoneChatRoomStateCreated + 1, 3000)); BC_ASSERT_TRUE(linphone_chat_room_get_capabilities(paulineCr) & LinphoneChatRoomCapabilitiesBasic); BC_ASSERT_EQUAL(linphone_chat_room_get_nb_participants(paulineCr), 1, int, "%d"); BC_ASSERT_TRUE(wait_for_list(coresList, &pauline->stat.number_of_LinphoneMessageReceived, initialPaulineStats.number_of_LinphoneMessageReceived + 1, 1000)); diff --git a/tester/presence_server_tester.c b/tester/presence_server_tester.c index 62bb8a364..db3f0ca07 100644 --- a/tester/presence_server_tester.c +++ b/tester/presence_server_tester.c @@ -788,7 +788,7 @@ static void presence_list_subscribe_network_changes(void) { linphone_core_set_presence_model(pauline->lc, presence); linphone_presence_model_unref(presence); - BC_ASSERT_TRUE(wait_for_until(laure->lc, pauline->lc, &laure->stat.number_of_LinphonePresenceActivityAway, 1, 6000)); + BC_ASSERT_TRUE(wait_for_until(laure->lc, pauline->lc, &laure->stat.number_of_LinphonePresenceActivityAway, 2, 6000)); lf = linphone_friend_list_find_friend_by_uri(linphone_core_get_default_friend_list(laure->lc), pauline_identity); BC_ASSERT_EQUAL(linphone_friend_get_status(lf), LinphoneStatusAway, int, "%d"); @@ -829,6 +829,28 @@ static void long_term_presence_base(const char* addr, bool_t exist, const char* linphone_friend_unref(friend2); linphone_core_manager_destroy(pauline); } + +static void long_term_presence_large_number_of_subs(void) { + int i=0; + LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc"); + linphone_core_set_user_agent(pauline->lc, "bypass", NULL); + LinphoneFriendList *friends = linphone_core_create_friend_list(pauline->lc); + linphone_friend_list_set_rls_uri(friends, "sip:rls@sip.example.org"); + for (i = 0 ; i <1000; i++ ) { + char user_id[256]; + snprintf(user_id, sizeof(user_id), "sip:user_%i@sip.example.org",i); + LinphoneFriend* friend2 =linphone_core_create_friend_with_address(pauline->lc, user_id); + linphone_friend_list_add_friend(friends,friend2); + linphone_friend_unref(friend2); + } + linphone_core_add_friend_list(pauline->lc, friends); + linphone_friend_list_unref(friends); + + BC_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_NotifyPresenceReceived,i)); + + linphone_core_manager_destroy(pauline); +} + static void long_term_presence_existing_friend(void) { // this friend is not online, but is known from flexisip to be registered (see flexisip/userdb.conf), // so we expect to get a report that he is currently not online @@ -1739,6 +1761,7 @@ test_t presence_server_tests[] = { TEST_ONE_TAG("Long term presence with +164 phone, without sip",long_term_presence_with_e164_phone_without_sip, "longterm"), TEST_ONE_TAG("Long term presence with phone, without sip",long_term_presence_with_phone_without_sip, "longterm"), TEST_ONE_TAG("Long term presence with cross references", long_term_presence_with_crossed_references,"longtern"), + TEST_ONE_TAG("Long term presence with large number of subs", long_term_presence_large_number_of_subs,"longtern"), TEST_NO_TAG("Subscriber no longer reachable using server",subscriber_no_longer_reachable), TEST_NO_TAG("Subscribe with late publish", subscribe_with_late_publish), TEST_NO_TAG("Multiple publish aggregation", multiple_publish_aggregation), diff --git a/tester/rcfiles/laure_call_logs_rc b/tester/rcfiles/laure_call_logs_rc index bbeafabeb..e5a964f72 100644 --- a/tester/rcfiles/laure_call_logs_rc +++ b/tester/rcfiles/laure_call_logs_rc @@ -1,7 +1,7 @@ [sip] -sip_port=5092 -sip_tcp_port=5092 -sip_tls_port=5093 +sip_port=-1 +sip_tcp_port=-1 +sip_tls_port=-1 default_proxy=0 ping_with_options=0 diff --git a/tester/rcfiles/laure_rc_udp b/tester/rcfiles/laure_rc_udp index c4016c4fa..e221c248a 100644 --- a/tester/rcfiles/laure_rc_udp +++ b/tester/rcfiles/laure_rc_udp @@ -1,7 +1,7 @@ [sip] -sip_port=5092 -sip_tcp_port=5092 -sip_tls_port=5093 +sip_port=-1 +sip_tcp_port=-1 +sip_tls_port=-1 default_proxy=0 ping_with_options=0 diff --git a/tester/rcfiles/laure_tcp_rc b/tester/rcfiles/laure_tcp_rc index 8ed5de984..912db8271 100644 --- a/tester/rcfiles/laure_tcp_rc +++ b/tester/rcfiles/laure_tcp_rc @@ -1,7 +1,7 @@ [sip] -sip_port=5092 -sip_tcp_port=5092 -sip_tls_port=5093 +sip_port=-1 +sip_tcp_port=-1 +sip_tls_port=-1 default_proxy=0 ping_with_options=0 diff --git a/tester/rcfiles/marie_rc b/tester/rcfiles/marie_rc index ce4c4877f..7c511b311 100644 --- a/tester/rcfiles/marie_rc +++ b/tester/rcfiles/marie_rc @@ -29,7 +29,7 @@ subscribe=0 [misc] enable_basic_to_client_group_chat_room_migration=1 -basic_to_client_group_chat_room_migration_timer=10 +basic_to_client_group_chat_room_migration_timer=180 [rtp] audio_rtp_port=18070-28000 diff --git a/tester/rcfiles/multi_account_rc b/tester/rcfiles/multi_account_rc index 8aefbfcaf..3c1e52020 100644 --- a/tester/rcfiles/multi_account_rc +++ b/tester/rcfiles/multi_account_rc @@ -1,7 +1,7 @@ [sip] -sip_port=5072 -sip_tcp_port=5072 -sip_tls_port=5073 +sip_port=-1 +sip_tcp_port=-1 +sip_tls_port=-1 default_proxy=0 [auth_info_0] diff --git a/tester/tester.c b/tester/tester.c index f6d4069e7..067ea1905 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -19,6 +19,8 @@ #include #include #include "linphone/core.h" +#include "linphone/logging.h" +#include "logging-private.h" #include "liblinphone_tester.h" #include #include "tester_utils.h" @@ -504,7 +506,7 @@ void linphone_core_manager_uninit(LinphoneCoreManager *mgr) { linphone_core_cbs_unref(mgr->cbs); manager_count--; - linphone_core_set_log_level(old_log_level); + linphone_core_set_log_level_mask(old_log_level); } void linphone_core_manager_wait_for_stun_resolution(LinphoneCoreManager *mgr) { diff --git a/wrappers/cpp/class_impl.mustache b/wrappers/cpp/class_impl.mustache index 3002c3c9c..f780ed6e5 100644 --- a/wrappers/cpp/class_impl.mustache +++ b/wrappers/cpp/class_impl.mustache @@ -21,6 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include #include #include +#include #include "linphone++/linphone.hh" #include "tools.hh"