Commit 9c8d5612 authored by Timothée Jaussoin's avatar Timothée Jaussoin 🤔
Browse files

Add 489 Bad Event support

Add linphone_event_remove_custom_header and C++ implementation
Remote unused ChatMessage customHeader code
parent a064dd10
......@@ -56,6 +56,8 @@ SalReason _sal_reason_from_sip_code(int code) {
return SalReasonNone;
case 488:
return SalReasonNotAcceptable;
case 489:
return SalReasonBadEvent;
case 491:
return SalReasonRequestPending;
case 500:
......
......@@ -95,6 +95,8 @@ const char *linphone_reason_to_string(LinphoneReason err){
return "Moved permanently";
case LinphoneReasonGone:
return "Gone";
case LinphoneReasonBadEvent:
return "Bad event";
case LinphoneReasonTemporarilyUnavailable:
return "Temporarily unavailable";
case LinphoneReasonAddressIncomplete:
......@@ -132,6 +134,7 @@ static const error_code_reason_map_t error_code_reason_map[] = {
{ 484, LinphoneReasonAddressIncomplete },
{ 486, LinphoneReasonBusy },
{ 488, LinphoneReasonNotAcceptable },
{ 489, LinphoneReasonBadEvent },
{ 501, LinphoneReasonNotImplemented },
{ 502, LinphoneReasonBadGateway },
{ 503, LinphoneReasonIOError },
......
......@@ -429,6 +429,10 @@ void *linphone_event_get_user_data(const LinphoneEvent *ev){
return ev->userdata;
}
void linphone_event_remove_custom_header(LinphoneEvent *ev, const char *name){
ev->send_custom_headers=sal_custom_header_remove(ev->send_custom_headers, name);
}
void linphone_event_add_custom_header(LinphoneEvent *ev, const char *name, const char *value){
ev->send_custom_headers=sal_custom_header_append(ev->send_custom_headers, name, value);
}
......@@ -536,6 +540,10 @@ static const LinphoneAddress *_linphone_event_cache_remote_contact (const Linpho
return lev->remote_contact_address;
}
const LinphoneAddress *linphone_event_get_to (const LinphoneEvent *lev) {
return _linphone_event_cache_to(lev);
}
const LinphoneAddress *linphone_event_get_from (const LinphoneEvent *lev) {
if (lev->is_out_of_dialog_op && lev->dir == LinphoneSubscriptionOutgoing)
return _linphone_event_cache_to(lev);
......@@ -570,7 +578,7 @@ void _linphone_event_notify_notify_response(LinphoneEvent *lev) {
LinphoneEventCbsNotifyResponseCb cb = linphone_event_cbs_get_notify_response(lev->callbacks);
if (cb)
cb(lev);
bctbx_list_t *callbacksCopy = bctbx_list_copy(linphone_event_get_callbacks_list(lev));
for (bctbx_list_t *it = callbacksCopy; it; it = bctbx_list_next(it)) {
linphone_event_set_current_callbacks(lev, reinterpret_cast<LinphoneEventCbs *>(bctbx_list_get_data(it)));
......
......@@ -771,7 +771,7 @@ void linphone_core_set_log_collection_path(const char *path) {
liblinphone_log_collection_path = NULL;
}
if (path != NULL) {
ortp_mutex_lock(&liblinphone_log_collection_mutex);
ortp_mutex_lock(&liblinphone_log_collection_mutex);
_close_log_collection_file();
liblinphone_log_collection_path = ms_strdup(path);
_open_log_collection_file();
......@@ -1222,7 +1222,7 @@ static void net_config_read(LinphoneCore *lc) {
} else {
bctbx_warning("Failed to create nat policy from ref [%s]", nat_policy_ref);
}
}
if (lc->nat_policy == NULL){
/*this will create a default nat policy according to deprecated config keys, or an empty nat policy otherwise*/
......@@ -1270,7 +1270,7 @@ static void build_sound_devices_table(LinphoneCore *lc){
old=lc->sound_conf.cards;
lc->sound_conf.cards=devices;
if (old!=NULL) ms_free((void *)old);
L_GET_PRIVATE_FROM_C_OBJECT(lc)->computeAudioDevicesList();
linphone_core_notify_audio_devices_list_updated(lc);
}
......@@ -1792,7 +1792,7 @@ static PayloadType* find_payload_type_from_list(const char* type, int rate, int
static bool_t linphone_core_codec_supported(LinphoneCore *lc, SalStreamType type, const char *mime){
if (type == SalVideo && lc->codecs_conf.dont_check_video_codec_support){
return TRUE;
return TRUE;
} else if (type == SalAudio && lc->codecs_conf.dont_check_audio_codec_support){
return TRUE;
} else if (type == SalText) {
......@@ -1952,9 +1952,9 @@ static void codecs_config_read(LinphoneCore *lc){
/*in rtp io mode, we don't transcode audio, thus we can support a format for which we have no encoder nor decoder.*/
lc->codecs_conf.dont_check_audio_codec_support = linphone_config_get_int(lc->config,"sound","rtp_io", FALSE);
/*in rtp io mode, we don't transcode video, thus we can support a format for which we have no encoder nor decoder.*/
lc->codecs_conf.dont_check_video_codec_support = linphone_config_get_int(lc->config,"video","rtp_io", FALSE) ||
lc->codecs_conf.dont_check_video_codec_support = linphone_config_get_int(lc->config,"video","rtp_io", FALSE) ||
linphone_config_get_int(lc->config, "video", "dont_check_codecs", FALSE);
for (i=0;get_codec(lc,SalAudio,i,&pt);i++){
if (pt){
audio_codecs=codec_append_if_new(audio_codecs, pt);
......@@ -2546,7 +2546,7 @@ static void update_proxy_config_push_params(LinphoneCore *core) {
if (core->push_notification_enabled) {
computedPushParams = linphone_core_get_push_notification_contact_uri_parameters(core);
}
bctbx_list_t* proxies = (bctbx_list_t*)linphone_core_get_proxy_config_list(core);
for (; proxies != NULL; proxies = proxies->next) {
LinphoneProxyConfig *proxy = (LinphoneProxyConfig *)proxies->data;
......@@ -2604,7 +2604,7 @@ void linphone_core_update_push_notification_information(LinphoneCore *core, cons
char * linphone_core_get_push_notification_contact_uri_parameters(LinphoneCore *core) {
if (!core->push_notification_enabled) return NULL;
if (!core->push_notification_param || !core->push_notification_prid) return NULL;
bool_t use_legacy_params = !!linphone_config_get_int(core->config, "net", "use_legacy_push_notification_params", FALSE);
const char *format = "pn-provider=%s;pn-param=%s;pn-prid=%s;pn-timeout=0;pn-silent=1";
if (use_legacy_params) {
......@@ -2820,7 +2820,7 @@ LinphoneStatus linphone_core_start (LinphoneCore *lc) {
}
linphone_core_set_state(lc, LinphoneGlobalStartup, "Starting up");
L_GET_PRIVATE_FROM_C_OBJECT(lc)->init();
//to give a chance to change uuid before starting
......@@ -3600,7 +3600,7 @@ static LinphoneStatus _linphone_core_set_sip_transports(LinphoneCore *lc, const
LinphoneStatus linphone_core_set_sip_transports(LinphoneCore *lc, const LinphoneSipTransports * tr_config /*config to be saved*/){
return _linphone_core_set_sip_transports(lc, tr_config, TRUE);
}
LinphoneStatus linphone_core_set_transports(LinphoneCore *lc, const LinphoneTransports * transports){
......@@ -4697,7 +4697,7 @@ bool_t linphone_core_get_disable_record_on_mute(LinphoneCore *lc) {
void linphone_core_set_disable_record_on_mute(LinphoneCore *lc, bool_t disable) {
lc->sound_conf.disable_record_on_mute = disable;
if (linphone_core_ready(lc)){
linphone_config_set_bool(lc->config,"sound","disable_record_on_mute",lc->sound_conf.disable_record_on_mute);
}
......@@ -6538,13 +6538,13 @@ static void sound_config_uninit(LinphoneCore *lc)
linphone_config_set_float(lc->config,"sound","playback_gain_db",config->soft_play_lev);
linphone_config_set_float(lc->config,"sound","mic_gain_db",config->soft_mic_lev);
linphone_config_set_bool(lc->config,"sound","disable_record_on_mute",config->disable_record_on_mute);
if (config->local_ring) ms_free(config->local_ring);
if (config->remote_ring) ms_free(config->remote_ring);
lc->tones=bctbx_list_free_with_data(lc->tones, (void (*)(void*))linphone_tone_description_destroy);
lc->sound_conf = {0};
}
static void video_config_uninit(LinphoneCore *lc)
{
const LinphoneVideoDefinition *vdef = linphone_core_get_preferred_video_definition(lc);
......@@ -7731,7 +7731,7 @@ LinphoneConference *linphone_core_create_conference_with_params(LinphoneCore *lc
/* In server mode, it is allowed to create multiple conferences. */
if (lc->conf_ctx == NULL || serverMode) {
LinphoneConferenceParams *params2 = linphone_conference_params_clone(params);
conf_method_name = linphone_config_get_string(lc->config, "misc", "conference_type", "local");
if (strcasecmp(conf_method_name, "local") == 0) {
conf = linphone_local_conference_new_with_params(lc, params2);
......@@ -7853,6 +7853,7 @@ bool_t _linphone_core_is_conference_creation (const LinphoneCore *lc, const Linp
// Do not compare ports
linphone_address_set_port(factoryAddr, 0);
LinphoneAddress *testedAddr = linphone_address_clone(addr);
linphone_address_set_port(testedAddr, 0);
bool_t result = linphone_address_weak_equal(factoryAddr, testedAddr);
linphone_address_unref(factoryAddr);
......
......@@ -355,6 +355,8 @@ SalReason linphone_reason_to_sal(LinphoneReason reason){
return SalReasonUnauthorized;
case LinphoneReasonUnsupportedContent:
return SalReasonUnsupportedContent;
case LinphoneReasonBadEvent:
return SalReasonBadEvent;
case LinphoneReasonNoMatch:
return SalReasonNoMatch;
case LinphoneReasonMovedPermanently:
......@@ -428,6 +430,9 @@ LinphoneReason linphone_reason_from_sal(SalReason r){
case SalReasonUnsupportedContent:
ret=LinphoneReasonUnsupportedContent;
break;
case SalReasonBadEvent:
ret=LinphoneReasonBadEvent;
break;
case SalReasonNoMatch:
ret=LinphoneReasonNoMatch;
break;
......
......@@ -296,6 +296,11 @@ LINPHONE_PUBLIC const char *linphone_address_get_uri_param (const LinphoneAddres
*/
LINPHONE_PUBLIC void linphone_address_set_uri_param (LinphoneAddress *address, const char *uri_param_name, const char *uri_param_value);
/**
* Set the value of the parameters of the URI of the address
* @param[in] address #LinphoneAddress object
* @param[in] params The parameters string
*/
LINPHONE_PUBLIC void linphone_address_set_uri_params (LinphoneAddress *address, const char *params);
/**
......
......@@ -169,6 +169,13 @@ LINPHONE_PUBLIC void *linphone_event_get_user_data(const LinphoneEvent *linphone
**/
LINPHONE_PUBLIC void linphone_event_add_custom_header(LinphoneEvent *linphone_event, const char *name, const char *value);
/**
* Remove custom header to an outgoing susbscription or publish.
* @param ev the #LinphoneEvent
* @param name header's name
**/
LINPHONE_PUBLIC void linphone_event_remove_custom_header(LinphoneEvent *ev, const char *name);
/**
* Obtain the value of a given header for an incoming subscription.
* @param linphone_event the #LinphoneEvent @notnil
......@@ -217,6 +224,11 @@ LINPHONE_PUBLIC const char *linphone_event_get_name(const LinphoneEvent *linphon
**/
LINPHONE_PUBLIC const LinphoneAddress *linphone_event_get_from(const LinphoneEvent *linphone_event);
/**
* Get the "to" address of the subscription.
**/
LINPHONE_PUBLIC const LinphoneAddress *linphone_event_get_to(const LinphoneEvent *lev);
/**
* Get the resource address of the subscription or publish.
* @param linphone_event #LinphoneEvent object @notnil
......
......@@ -933,6 +933,7 @@ typedef enum _LinphoneReason{
LinphoneReasonNotAnswered, /**< The call was not answered in time (request timeout) */
LinphoneReasonBusy, /**< Phone line was busy */
LinphoneReasonUnsupportedContent, /**< Unsupported content */
LinphoneReasonBadEvent, /**< Bad event */
LinphoneReasonIOError, /**< Transport error: connection failures, disconnections etc... */
LinphoneReasonDoNotDisturb, /**< Do not disturb reason */
LinphoneReasonUnauthorized, /**< Operation is unauthorized because missing credential */
......
......@@ -552,9 +552,9 @@ if(ENABLE_SHARED)
"${CMAKE_CURRENT_SOURCE_DIR}/../share/rootca.pem"
"${CMAKE_CURRENT_SOURCE_DIR}/../share/ringback.wav"
) # Keep it relative to current dir to allow CMakeList inclusion
set_source_files_properties(${SWIFT_MODULE_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Modules)
add_library(linphone SHARED ${LINPHONE_RESOURCES} ${SWIFT_MODULE_FILES} ${LINPHONE_HEADER_FILES}
${LINPHONE_CXX_OBJECTS_PRIVATE_HEADER_FILES} ${LINPHONE_CXX_OBJECTS_SOURCE_FILES} ${LINPHONE_OBJC_SOURCE_FILES}
$<TARGET_OBJECTS:linphone-coreapi>
......@@ -634,7 +634,7 @@ if(ENABLE_SHARED)
FRAMEWORK DESTINATION Frameworks
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
endif()
if(ICONV_FOUND)
......
......@@ -681,6 +681,7 @@ const char* sal_reason_to_string(const SalReason reason) {
case SalReasonNotFound: return "SalReasonNotFound";
case SalReasonDoNotDisturb: return "SalReasonDoNotDisturb";
case SalReasonUnsupportedContent: return "SalReasonUnsupportedContent";
case SalReasonBadEvent: return "SalReasonBadEvent";
case SalReasonForbidden: return "SalReasonForbidden";
case SalReasonUnknown: return "SalReasonUnknown";
case SalReasonServiceUnavailable: return "SalReasonServiceUnavailable";
......
......@@ -407,6 +407,7 @@ typedef enum SalReason{
SalReasonNotFound,
SalReasonDoNotDisturb,
SalReasonUnsupportedContent,
SalReasonBadEvent,
SalReasonForbidden,
SalReasonUnknown,
SalReasonServiceUnavailable,
......
......@@ -80,7 +80,7 @@ public:
bool isMarkedAsRead () const;
void setImdnMessageId (const std::string &imdnMessageId);
void setForwardInfo (const std::string &fInfo);
void enableEphemeralWithTime (long time);
......@@ -234,9 +234,6 @@ private:
bool isAutoDownloadAttachedFilesInProgress = false;
std::string callId;
// TODO: to replace salCustomheaders
std::unordered_map<std::string, std::string> customHeaders;
mutable LinphoneErrorInfo *errorInfo = nullptr;
SalOp *salOp = nullptr;
SalCustomHeader *salCustomHeaders = nullptr;
......
......@@ -563,7 +563,7 @@ void ChatMessagePrivate::notifyReceiving () {
// Legacy.
AbstractChatRoomPrivate *dChatRoom = q->getChatRoom()->getPrivate();
dChatRoom->notifyChatMessageReceived(q->getSharedFromThis());
static_cast<ChatRoomPrivate *>(dChatRoom)->sendDeliveryNotification(q->getSharedFromThis());
}
......@@ -958,7 +958,7 @@ void ChatMessagePrivate::send () {
// Remove internal content as it is not needed anymore and will confuse some old methods like getContentType()
internalContent.setBody("");
internalContent.setContentType(ContentType(""));
// Wait for message to be either Sent or NotDelivered unless it is an IMDN or COMPOSING
if (getContentType() == ContentType::Imdn || getContentType() == ContentType::ImIsComposing) {
q->getChatRoom()->getPrivate()->removeTransientChatMessage(q->getSharedFromThis());
......@@ -1308,30 +1308,6 @@ void ChatMessage::setInternalContent (const Content &content) {
d->internalContent = content;
}
string ChatMessage::getCustomHeaderValue (const string &headerName) const {
L_D();
try {
return d->customHeaders.at(headerName);
} catch (const exception &) {
// Key doesn't exist.
}
return nullptr;
}
void ChatMessage::addCustomHeader (const string &headerName, const string &headerValue) {
L_D();
if (d->isReadOnly) return;
d->customHeaders[headerName] = headerValue;
}
void ChatMessage::removeCustomHeader (const string &headerName) {
L_D();
if (d->isReadOnly) return;
d->customHeaders.erase(headerName);
}
void ChatMessage::send () {
L_D();
......
......@@ -136,11 +136,6 @@ public:
const Content &getInternalContent () const;
void setInternalContent (const Content &content);
// TODO: to replace salCustomheaders
std::string getCustomHeaderValue (const std::string &headerName) const;
void addCustomHeader (const std::string &headerName, const std::string &headerValue);
void removeCustomHeader (const std::string &headerName);
bool downloadFile (FileTransferContent *content);
bool isFileTransferInProgress () const;
......
......@@ -18,7 +18,6 @@
*/
#include "call-session-params-p.h"
#include "call-session-params.h"
using namespace std;
......@@ -124,6 +123,11 @@ void CallSessionParams::addCustomHeader (const string &headerName, const string
d->customHeaders = sal_custom_header_append(d->customHeaders, headerName.c_str(), headerValue.c_str());
}
void CallSessionParams::removeCustomHeader (const string &headerName) {
L_D();
d->customHeaders = sal_custom_header_remove(d->customHeaders, headerName.c_str());
}
void CallSessionParams::clearCustomHeaders () {
L_D();
d->setCustomHeaders(nullptr);
......
......@@ -60,6 +60,7 @@ public:
void setPrivacy (LinphonePrivacyMask privacy);
void addCustomHeader (const std::string &headerName, const std::string &headerValue);
void removeCustomHeader (const std::string &headerName);
void clearCustomHeaders ();
const char * getCustomHeader (const std::string &headerName) const;
......
......@@ -68,8 +68,8 @@ IdentityAddress CorePrivate::getDefaultLocalAddress(const IdentityAddress *peerA
proxy = linphone_core_lookup_known_proxy(cCore, cPeerAddress);
linphone_address_unref(cPeerAddress);
}
}
}
if (!proxy)
proxy = linphone_core_get_default_proxy_config(cCore);
......@@ -87,7 +87,7 @@ IdentityAddress CorePrivate::getDefaultLocalAddress(const IdentityAddress *peerA
//
static string getConferenceFactoryUri(const shared_ptr<Core> &core, const IdentityAddress &localAddress) {
Address addr(localAddress);
Address addr(localAddress);
LinphoneProxyConfig *proxy = linphone_core_lookup_proxy_by_identity(core->getCCore(), L_GET_C_BACK_PTR(&addr));
if (!proxy) {
......@@ -211,7 +211,7 @@ shared_ptr<AbstractChatRoom> CorePrivate::createBasicChatRoom (
}else{
capabilities.unset(ChatRoom::Capabilities::Migratable);
}
#ifdef HAVE_ADVANCED_IM
if ((capabilities & ChatRoom::Capabilities::Migratable) && !conferenceFactoryUri.empty()) {
chatRoom.reset(new BasicToClientGroupChatRoom(shared_ptr<BasicChatRoom>(basicChatRoom)));
......@@ -297,13 +297,13 @@ shared_ptr<AbstractChatRoom> CorePrivate::createChatRoom(const shared_ptr<ChatRo
return nullptr;
}
if (!linphone_factory_is_chatroom_backend_available(
linphone_factory_get(),
linphone_factory_get(),
static_cast<LinphoneChatRoomBackend>(params->getChatRoomBackend()))
) {
lWarning() << "Tying to create chat room with unavailable backend";
return nullptr;
}
shared_ptr<AbstractChatRoom> chatRoom;
if (params->getChatRoomBackend() == ChatRoomParams::ChatRoomBackend::FlexisipChat) {
#ifdef HAVE_ADVANCED_IM
......@@ -320,12 +320,12 @@ shared_ptr<AbstractChatRoom> CorePrivate::createChatRoom(const shared_ptr<ChatRo
ChatRoomParams::toCapabilities(params),
params,
false);
if (!chatRoom) {
lWarning() << "Cannot create createClientGroupChatRoom with subject [" << params->getSubject() <<"]";
return nullptr;
}
if (!chatRoom->addParticipants(participants, nullptr, false)) {
lWarning() << "Couldn't add participants to newly created chat room, aborting";
return nullptr;
......@@ -340,7 +340,7 @@ shared_ptr<AbstractChatRoom> CorePrivate::createChatRoom(const shared_ptr<ChatRo
return nullptr;
}
ChatRoom::CapabilitiesMask capabilities = ChatRoomParams::toCapabilities(params);
chatRoom = createBasicChatRoom(ConferenceId(IdentityAddress(participants.front()), localAddr),
capabilities,
params);
......
......@@ -883,6 +883,8 @@ int toSipCode (SalReason reason) {
return 488; // Or maybe 606 Not Acceptable?
case SalReasonNoMatch:
return 481;
case SalReasonBadEvent:
return 489;
case SalReasonRequestTimeout:
return 408;
case SalReasonMovedPermanently:
......
......@@ -324,7 +324,7 @@ if(NOT IOS OR NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
endif()
# on mobile platforms, we compile the tester as a library so that we can link with it directly from native applications
if(ANDROID OR IOS)
if(ANDROID OR IOS OR UNIX)
add_library(linphonetester SHARED ${HEADER_FILES} ${SOURCE_FILES_C} ${SOURCE_FILES_CXX})
target_include_directories(linphonetester PRIVATE ${LINPHONE_INCLUDE_DIRS} ${LIBXSD_INCLUDE_DIRS})
target_link_libraries(linphonetester ${LINPHONE_LIBS_FOR_TOOLS} ${OTHER_LIBS_FOR_TESTER})
......
......@@ -38,7 +38,7 @@ aliases=localhost sip2.linphone.org sipopen.example.org sip.example.org auth.exa
# Default value: sip:*
#transports=sip:192.168.56.101:5060 sips:192.168.56.101:5061
#note: the ip addresses are explicitely specified here because the machine has several interfaces. In a simple case, using '*' instead of the explicit ip address is sufficient,
#note: the ip addresses are explicitely specified here because the machine has several interfaces. In a simple case, using '*' instead of the explicit ip address is sufficient,
#and there is no need to specify the ipv6 transport addresses.
transports=sip:94.23.19.176:5060 sips:94.23.19.176:5061;tls-certificates-dir=/etc/flexisip/tls/certificates/cn sips:94.23.19.176:5062;tls-certificates-dir=/etc/flexisip/tls/certificates/altname sips:94.23.19.176:5063;tls-verify-incoming=1 sip:94.23.19.176:5064 sip:[2001:41d0:2:14b0::1]:5060 sips:[2001:41d0:2:14b0::1]:5061;tls-certificates-dir=/etc/flexisip/tls/certificates/cn sips:[2001:41d0:2:14b0::1]:5062;tls-certificates-dir=/etc/flexisip/tls/certificates/altname sips:[2001:41d0:2:14b0::1]:5063;tls-verify-incoming=1 sip:[2001:41d0:2:14b0::1]:5064
......@@ -107,12 +107,12 @@ no-403=user-agent contains 'tester-no-403'
# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain
# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org')
# && (user-agent == 'Linphone v2')
# Default value:
filter= from.uri.domain contains 'sip.example.org' || from.uri.domain contains 'auth.example.org' || from.uri.domain contains 'auth1.example.org' || from.uri.domain contains 'auth2.example.org' || from.uri.domain contains 'anonymous.invalid'
# Default value:
filter= from.uri.domain contains 'sip.example.org' || from.uri.domain contains 'auth.example.org' || from.uri.domain contains 'auth1.example.org' || from.uri.domain contains 'auth2.example.org' || from.uri.domain contains 'anonymous.invalid'
# List of whitespace separated domain names to challenge. Others
# are denied.
# Default value:
# Default value:
auth-domains= sip.example.org auth.example.org auth1.example.org auth2.example.org
#regexp for test "TLS authentication - client rejected due to unmatched certificate subject" of Flexisip test suite.
......@@ -120,7 +120,7 @@ tls-client-certificate-required-subject=galadrielle|sip:sip.example.org
# List of whitespace separated IP which will not be challenged.
# Default value:
# Default value:
trusted-hosts=127.0.0.1 94.23.19.176
# Database backend implementation [odbc, file].
......@@ -650,3 +650,8 @@ outbound-proxy=sip:127.0.0.1:5060;transport=tcp
database-backend=mysql
database-connection-string=db='flexisip_conference_sip_test' user='flexisip_user' password='cotcot' host='127.0.0.1' port='3307'
# Local domains managed by the conference server, the other messages will
# be forwarded to the outbound-proxy. Space separated list.
# Default value: when empty, the conference server default domain
local-domains=
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment