From c08769cedd7a15ea0a30d788ef1d9b35f1c1dba7 Mon Sep 17 00:00:00 2001
From: Clemence Him <clemence.him@belledonne-communications.com>
Date: Fri, 7 Feb 2025 16:10:58 +0100
Subject: [PATCH] Fix: Apply proxy default values when creating AccountParams

---
 console/commands.c                      |   2 +-
 coreapi/help/examples/C/buddy_status.c  |   2 +-
 coreapi/help/examples/C/notify.c        |   2 +-
 coreapi/help/examples/C/registration.c  |   2 +-
 coreapi/proxy.c                         |   4 +-
 daemon/commands/register.cc             |   2 +-
 include/linphone/api/c-account-params.h |   3 +-
 src/account/account-params.cpp          | 163 +++++++++++++++---------
 src/account/account-params.h            |   2 +-
 src/account_creator/main.cpp            |  10 +-
 src/account_creator/utils.cpp           |   2 +-
 src/c-wrapper/api/c-account-params.cpp  |   4 +-
 src/c-wrapper/api/c-account.cpp         |   2 +-
 tester/account_tester.c                 |   2 +-
 tester/call-twisted-cases.cpp           |   2 +-
 tools/lpsendmsg.c                       |   2 +-
 tools/test_numbers.c                    |   2 +-
 17 files changed, 124 insertions(+), 84 deletions(-)

diff --git a/console/commands.c b/console/commands.c
index de5678c8bb..0ddd2b3211 100644
--- a/console/commands.c
+++ b/console/commands.c
@@ -1368,7 +1368,7 @@ static void linphonec_proxy_add(LinphoneCore *lc) {
 			continue;
 		}
 
-		params = linphone_account_params_new(lc);
+		params = linphone_account_params_new(lc, TRUE);
 		/*create account parameters*/
 		if (linphone_account_params_set_server_addr(params, clean) < 0) {
 			linphonec_out("Invalid sip address (sip:sip.domain.tld).\n");
diff --git a/coreapi/help/examples/C/buddy_status.c b/coreapi/help/examples/C/buddy_status.c
index bf775c43d7..4af11f0f79 100644
--- a/coreapi/help/examples/C/buddy_status.c
+++ b/coreapi/help/examples/C/buddy_status.c
@@ -129,7 +129,7 @@ int main(int argc, char *argv[]) {
 	/*sip proxy might be requested*/
 	if (identity != NULL) {
 		/*create account parameters*/
-		LinphoneAccountParams *params = linphone_account_params_new(NULL);
+		LinphoneAccountParams *params = linphone_account_params_new(nullptr, FALSE);
 		/*parse identity*/
 		LinphoneAddress *from = linphone_address_new(identity);
 		LinphoneAuthInfo *info;
diff --git a/coreapi/help/examples/C/notify.c b/coreapi/help/examples/C/notify.c
index 6aba31aaaa..7cee6d9927 100644
--- a/coreapi/help/examples/C/notify.c
+++ b/coreapi/help/examples/C/notify.c
@@ -122,7 +122,7 @@ int main(int argc, char *argv[]) {
 	lc = linphone_core_new(&vtable, NULL, NULL, data);
 
 	/*create account parameters*/
-	LinphoneAccountParams *params = linphone_account_params_new(NULL);
+	LinphoneAccountParams *params = linphone_account_params_new(nullptr, FALSE);
 	/*parse identity*/
 	LinphoneAddress *from = linphone_address_new(identity);
 	LinphoneAuthInfo *info;
diff --git a/coreapi/help/examples/C/registration.c b/coreapi/help/examples/C/registration.c
index c6a71da359..0f64b31b3b 100644
--- a/coreapi/help/examples/C/registration.c
+++ b/coreapi/help/examples/C/registration.c
@@ -95,7 +95,7 @@ int main(int argc, char *argv[]) {
 	lc = linphone_core_new(&vtable, NULL, NULL, NULL);
 
 	/*create account parameters*/
-	LinphoneAccountParams *params = linphone_account_params_new(NULL);
+	LinphoneAccountParams *params = linphone_account_params_new(nullptr, FALSE);
 	/*parse identity*/
 	LinphoneAddress *from = linphone_address_new(identity);
 	LinphoneAuthInfo *info;
diff --git a/coreapi/proxy.c b/coreapi/proxy.c
index dcf935e39e..07ad228504 100644
--- a/coreapi/proxy.c
+++ b/coreapi/proxy.c
@@ -75,7 +75,7 @@ linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig *cfg) {
 }
 
 static void linphone_proxy_config_init(LinphoneCore *lc, LinphoneProxyConfig *cfg) {
-	LinphoneAccountParams *params = linphone_account_params_new(lc);
+	LinphoneAccountParams *params = linphone_account_params_new(lc, TRUE);
 	cfg->account = linphone_account_new_with_config(lc, params, cfg);
 	linphone_account_params_unref(params);
 	cfg->edit = NULL;
@@ -553,7 +553,7 @@ const bctbx_list_t *linphone_core_get_proxy_config_list(const LinphoneCore *lc)
 }
 
 LinphoneAccountParams *linphone_core_create_account_params(LinphoneCore *core) {
-	return linphone_account_params_new(core);
+	return linphone_account_params_new(core, TRUE);
 }
 
 LinphoneAccount *linphone_core_create_account(LinphoneCore *core, LinphoneAccountParams *params) {
diff --git a/daemon/commands/register.cc b/daemon/commands/register.cc
index 8aca2f92bd..e22a5c0b0d 100644
--- a/daemon/commands/register.cc
+++ b/daemon/commands/register.cc
@@ -81,7 +81,7 @@ void RegisterCommand::exec(Daemon *app, const string &args) {
 			linphone_auth_info_unref(info);
 		}
 	}
-	LinphoneAccountParams *params = linphone_account_params_new(lc);
+	LinphoneAccountParams *params = linphone_account_params_new(lc, TRUE);
 	linphone_account_params_set_identity_address(params, from);
 	if (from) linphone_address_unref(from);
 	linphone_account_params_set_server_addr(params, cproxy);
diff --git a/include/linphone/api/c-account-params.h b/include/linphone/api/c-account-params.h
index 6cf4f44eb2..0eb3f9f917 100644
--- a/include/linphone/api/c-account-params.h
+++ b/include/linphone/api/c-account-params.h
@@ -36,9 +36,10 @@ extern "C" {
 /**
  * Create a new #LinphoneAccountParams object.
  * @param lc The #LinphoneCore object. @maybenil
+ * @param use_default_values If TRUE, use proxy default values
  * @return The newly created #LinphoneAccountParams object. @notnil
  */
-LINPHONE_PUBLIC LinphoneAccountParams *linphone_account_params_new(LinphoneCore *lc);
+LINPHONE_PUBLIC LinphoneAccountParams *linphone_account_params_new(LinphoneCore *lc, bool_t use_default_values);
 
 /**
  * Create a new #LinphoneAccountParams object from a configuration.
diff --git a/src/account/account-params.cpp b/src/account/account-params.cpp
index 2d49c2457a..51c21e753f 100644
--- a/src/account/account-params.cpp
+++ b/src/account/account-params.cpp
@@ -41,47 +41,65 @@ static string generate_account_id() {
 	return string("proxy_config_").append(id); // TODO: change to account
 }
 
-AccountParams::AccountParams(LinphoneCore *lc) {
-	mExpires = lc ? linphone_config_get_default_int(lc->config, "proxy", "reg_expires", 3600) : 3600;
-	mRegisterEnabled = lc ? !!linphone_config_get_default_int(lc->config, "proxy", "reg_sendregister", 1) : 1;
-	mInternationalPrefix = lc ? linphone_config_get_default_string(lc->config, "proxy", "dial_prefix", "") : "";
+AccountParams::AccountParams(LinphoneCore *lc, bool useDefaultValues) {
+	if (!lc && useDefaultValues) {
+		lWarning() << "Unable to apply proxy default values: LinphoneCore is null.";
+		useDefaultValues = false;
+	}
+
+	mExpires = useDefaultValues ? linphone_config_get_default_int(lc->config, "proxy", "reg_expires", 3600) : 3600;
+	mRegisterEnabled =
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "reg_sendregister", 1) : 1;
+	mInternationalPrefix =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "dial_prefix", "") : "";
 	mInternationalPrefixIsoCountryCode =
-	    lc ? linphone_config_get_default_string(lc->config, "proxy", "dial_prefix_iso_country_code", "") : "";
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "dial_prefix_iso_country_code", "")
+	                     : "";
 	mUseInternationalPrefixForCallsAndChats =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "use_dial_prefix_for_calls_and_chats", true) : true;
+	    useDefaultValues
+	        ? !!linphone_config_get_default_int(lc->config, "proxy", "use_dial_prefix_for_calls_and_chats", true)
+	        : true;
 	mDialEscapePlusEnabled =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "dial_escape_plus", false) : false;
-	mPrivacy = lc ? (LinphonePrivacyMask)linphone_config_get_default_int(lc->config, "proxy", "privacy",
-	                                                                     LinphonePrivacyDefault)
-	              : (LinphonePrivacyMask)LinphonePrivacyDefault;
-	mIdentity = lc ? linphone_config_get_default_string(lc->config, "proxy", "reg_identity", "") : "";
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "dial_escape_plus", false) : false;
+	mPrivacy = useDefaultValues ? (LinphonePrivacyMask)linphone_config_get_default_int(lc->config, "proxy", "privacy",
+	                                                                                   LinphonePrivacyDefault)
+	                            : (LinphonePrivacyMask)LinphonePrivacyDefault;
+	mIdentity = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "reg_identity", "") : "";
 	mIdentityAddress = Address::create(mIdentity);
-	mProxy = lc ? linphone_config_get_default_string(lc->config, "proxy", "reg_proxy", "") : "";
+	mProxy = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "reg_proxy", "") : "";
 	mProxyAddress = Address::create(mProxy);
-	string route = lc ? linphone_config_get_default_string(lc->config, "proxy", "reg_route", "") : "";
+	string route = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "reg_route", "") : "";
 	if (!route.empty()) {
 		const std::list<std::shared_ptr<Address>> routes{Address::create(route)};
 		setRoutes(routes);
 	}
-	mRealm = lc ? linphone_config_get_default_string(lc->config, "proxy", "realm", "") : "";
+	mRealm = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "realm", "") : "";
 	mQualityReportingEnabled =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "quality_reporting_enabled", false) : false;
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "quality_reporting_enabled", false)
+	                     : false;
 	mQualityReportingCollector =
-	    lc ? linphone_config_get_default_string(lc->config, "proxy", "quality_reporting_collector", "") : "";
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "quality_reporting_collector", "")
+	                     : "";
 	mQualityReportingInterval =
-	    lc ? linphone_config_get_default_int(lc->config, "proxy", "quality_reporting_interval", 0) : 0;
-	mContactParameters = lc ? linphone_config_get_default_string(lc->config, "proxy", "contact_parameters", "") : "";
+	    useDefaultValues ? linphone_config_get_default_int(lc->config, "proxy", "quality_reporting_interval", 0) : 0;
+	mContactParameters =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "contact_parameters", "") : "";
 	mContactUriParameters =
-	    lc ? linphone_config_get_default_string(lc->config, "proxy", "contact_uri_parameters", "") : "";
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "contact_uri_parameters", "") : "";
 	mAllowCpimMessagesInBasicChatRooms =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "cpim_in_basic_chat_rooms_enabled", false) : false;
-
-	mAvpfMode = lc ? static_cast<LinphoneAVPFMode>(
-	                     linphone_config_get_default_int(lc->config, "proxy", "avpf", LinphoneAVPFDefault))
-	               : LinphoneAVPFDefault;
-	mAvpfRrInterval = lc ? !!linphone_config_get_default_int(lc->config, "proxy", "avpf_rr_interval", 5) : 5;
-	mPublishExpires = lc ? linphone_config_get_default_int(lc->config, "proxy", "publish_expires", 600) : 600;
-	mPublishEnabled = lc ? !!linphone_config_get_default_int(lc->config, "proxy", "publish", false) : false;
+	    useDefaultValues
+	        ? !!linphone_config_get_default_int(lc->config, "proxy", "cpim_in_basic_chat_rooms_enabled", false)
+	        : false;
+
+	mAvpfMode = useDefaultValues ? static_cast<LinphoneAVPFMode>(linphone_config_get_default_int(
+	                                   lc->config, "proxy", "avpf", LinphoneAVPFDefault))
+	                             : LinphoneAVPFDefault;
+	mAvpfRrInterval =
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "avpf_rr_interval", 5) : 5;
+	mPublishExpires =
+	    useDefaultValues ? linphone_config_get_default_int(lc->config, "proxy", "publish_expires", 600) : 600;
+	mPublishEnabled =
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "publish", false) : false;
 
 	bool pushAllowedDefault = false;
 	bool remotePushAllowedDefault = false;
@@ -89,26 +107,30 @@ AccountParams::AccountParams(LinphoneCore *lc) {
 	pushAllowedDefault = true;
 #endif
 	mPushNotificationAllowed =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "push_notification_allowed", pushAllowedDefault)
-	       : pushAllowedDefault;
+	    useDefaultValues
+	        ? !!linphone_config_get_default_int(lc->config, "proxy", "push_notification_allowed", pushAllowedDefault)
+	        : pushAllowedDefault;
 	mRemotePushNotificationAllowed =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "remote_push_notification_allowed",
-	                                           remotePushAllowedDefault)
-	       : remotePushAllowedDefault;
-	mForceRegisterOnPush =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "force_register_on_push", false) : false;
-	mUnregisterAtStop = lc ? !!linphone_config_get_default_int(lc->config, "proxy", "unregister_at_stop", true) : true;
-	mRefKey = lc ? linphone_config_get_default_string(lc->config, "proxy", "refkey", "") : "";
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "remote_push_notification_allowed",
+	                                                         remotePushAllowedDefault)
+	                     : remotePushAllowedDefault;
+	mForceRegisterOnPush = useDefaultValues
+	                           ? !!linphone_config_get_default_int(lc->config, "proxy", "force_register_on_push", false)
+	                           : false;
+	mUnregisterAtStop =
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "unregister_at_stop", true) : true;
+	mRefKey = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "refkey", "") : "";
 
 	/* CAUTION: the nat_policy_ref meaning in default values is different than in usual [nat_policy_%i] section.
 	 * This is not consistent and error-prone.
 	 * Normally, the nat_policy_ref refers to a "ref" entry within a [nat_policy_%i] section.
 	 */
 
-	string natPolicyRef = lc ? linphone_config_get_default_string(lc->config, "proxy", "nat_policy_ref", "") : "";
+	string natPolicyRef =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "nat_policy_ref", "") : "";
 	if (!natPolicyRef.empty()) {
 		std::shared_ptr<NatPolicy> policy = nullptr;
-		if (linphone_config_has_section(lc->config, natPolicyRef.c_str())) {
+		if (lc && linphone_config_has_section(lc->config, natPolicyRef.c_str())) {
 			/* Odd method - to be deprecated, inconsistent */
 			policy = NatPolicy::create(L_GET_CPP_PTR_FROM_C_OBJECT(lc), NatPolicy::ConstructionMethod::FromSectionName,
 			                           natPolicyRef);
@@ -124,68 +146,85 @@ AccountParams::AccountParams(LinphoneCore *lc) {
 			         << "]";
 		}
 	}
-	mDependsOn = lc ? linphone_config_get_default_string(lc->config, "proxy", "depends_on", "") : "";
-	string idkey = lc ? linphone_config_get_default_string(lc->config, "proxy", "idkey", "") : "";
+	mDependsOn = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "depends_on", "") : "";
+	string idkey = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "idkey", "") : "";
 	if (!idkey.empty()) {
 		mIdKey = idkey;
 	} else {
 		mIdKey = generate_account_id();
 	}
 	string conferenceFactoryUri =
-	    lc ? linphone_config_get_default_string(lc->config, "proxy", "conference_factory_uri", "") : "";
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "conference_factory_uri", "") : "";
 	setConferenceFactoryUri(conferenceFactoryUri);
 
 	string audioVideoConferenceFactoryUri =
-	    lc ? linphone_config_get_default_string(lc->config, "proxy", "audio_video_conference_factory_uri", "") : "";
+	    useDefaultValues
+	        ? linphone_config_get_default_string(lc->config, "proxy", "audio_video_conference_factory_uri", "")
+	        : "";
 	mAudioVideoConferenceFactoryAddress = nullptr;
 	if (!audioVideoConferenceFactoryUri.empty()) {
 		mAudioVideoConferenceFactoryAddress = Address::create(audioVideoConferenceFactoryUri);
 	}
 
-	mCcmpServerUrl = lc ? linphone_config_get_default_string(lc->config, "proxy", "ccmp_server_url", "") : "";
-	mCcmpUserId = lc ? linphone_config_get_default_string(lc->config, "proxy", "ccmp_user_id", "") : "";
+	mCcmpServerUrl =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "ccmp_server_url", "") : "";
+	mCcmpUserId = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "ccmp_user_id", "") : "";
 
 	if (lc && lc->push_config) {
 		mPushNotificationConfig = PushNotificationConfig::toCpp(lc->push_config)->clone();
 	} else {
 		mPushNotificationConfig = new PushNotificationConfig();
-		mPushNotificationConfig->readPushParamsFromString(
-		    string(lc ? linphone_config_get_default_string(lc->config, "proxy", "push_parameters", "") : ""));
-	}
-	mRtpBundleEnabled =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "rtp_bundle", linphone_core_rtp_bundle_enabled(lc))
-	       : false;
-	mRtpBundleAssumption =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "rtp_bundle_assumption", false) : false;
-
-	string customContact = lc ? linphone_config_get_default_string(lc->config, "proxy", "custom_contact", "") : "";
+		mPushNotificationConfig->readPushParamsFromString(string(
+		    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "push_parameters", "") : ""));
+	}
+	mRtpBundleEnabled = useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "rtp_bundle",
+	                                                                         linphone_core_rtp_bundle_enabled(lc))
+	                                     : false;
+	mRtpBundleAssumption = useDefaultValues
+	                           ? !!linphone_config_get_default_int(lc->config, "proxy", "rtp_bundle_assumption", false)
+	                           : false;
+
+	string customContact =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "custom_contact", "") : "";
 	setCustomContact(customContact);
 
-	string limeServerUrl = lc ? linphone_config_get_default_string(lc->config, "proxy", "lime_server_url", "") : "";
+	string limeServerUrl =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "lime_server_url", "") : "";
 	setLimeServerUrl(limeServerUrl);
 
-	string limeAlgo = lc ? linphone_config_get_default_string(lc->config, "proxy", "lime_algo", "") : "";
+	string limeAlgo = useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "lime_algo", "") : "";
 	setLimeAlgo(limeAlgo);
 
-	string pictureUri = lc ? linphone_config_get_default_string(lc->config, "proxy", "picture_uri", "") : "";
+	string pictureUri =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "picture_uri", "") : "";
 	setPictureUri(pictureUri);
 
-	string mwiServerUri = lc ? linphone_config_get_default_string(lc->config, "proxy", "mwi_server_uri", "") : "";
+	string mwiServerUri =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "mwi_server_uri", "") : "";
 	mMwiServerAddress = nullptr;
 	if (!mwiServerUri.empty()) {
 		setMwiServerAddress(Address::create(mwiServerUri));
 	}
 
-	string voicemailUri = lc ? linphone_config_get_default_string(lc->config, "proxy", "voicemail_uri", "") : "";
+	string voicemailUri =
+	    useDefaultValues ? linphone_config_get_default_string(lc->config, "proxy", "voicemail_uri", "") : "";
 	mVoicemailAddress = nullptr;
 	if (!voicemailUri.empty()) {
 		setVoicemailAddress(Address::create(voicemailUri));
 	}
 
 	mInstantMessagingEncryptionMandatory =
-	    lc ? !!linphone_config_get_default_int(lc->config, "proxy", "im_encryption_mandatory", 0) : 0;
+	    useDefaultValues ? !!linphone_config_get_default_int(lc->config, "proxy", "im_encryption_mandatory", 0) : 0;
 
-	if (lc) {
+	string supportedTags = lc ? linphone_config_get_default_string(lc->config, "proxy", "supported", "empty") : "empty";
+	if (useDefaultValues && supportedTags != "empty") {
+		vector<string> splitTags = bctoolbox::Utils::split(supportedTags, ",");
+		list<string> supportedTagsList;
+		for (const auto &tag : splitTags)
+			supportedTagsList.push_back(Utils::trim(tag));
+		mSupportedTagsList.mList = supportedTagsList;
+		mUseSupportedTags = true;
+	} else if (lc) {
 		vector<string> splitTags = bctoolbox::Utils::split(lc->sal->getSupportedTags(), ",");
 		list<string> supportedTagsList;
 		for (const auto &tag : splitTags)
@@ -194,7 +233,7 @@ AccountParams::AccountParams(LinphoneCore *lc) {
 	}
 }
 
-AccountParams::AccountParams(LinphoneCore *lc, int index) : AccountParams(nullptr) {
+AccountParams::AccountParams(LinphoneCore *lc, int index) : AccountParams(lc, false) {
 	LpConfig *config = lc->config;
 
 	char key[50];
diff --git a/src/account/account-params.h b/src/account/account-params.h
index e1b849073e..b34453d5aa 100644
--- a/src/account/account-params.h
+++ b/src/account/account-params.h
@@ -41,7 +41,7 @@ class LINPHONE_PUBLIC AccountParams : public bellesip::HybridObject<LinphoneAcco
 	friend class Account;
 
 public:
-	AccountParams(LinphoneCore *lc);
+	AccountParams(LinphoneCore *lc, bool useDefaultValues);
 	AccountParams(LinphoneCore *lc, int index);
 	AccountParams(const AccountParams &other);
 	virtual ~AccountParams();
diff --git a/src/account_creator/main.cpp b/src/account_creator/main.cpp
index 0c2622d290..44a5d0b11f 100644
--- a/src/account_creator/main.cpp
+++ b/src/account_creator/main.cpp
@@ -50,7 +50,7 @@ static void reset_field(char **field) {
 static unsigned int validate_uri(LinphoneCore *lc, const char *username, const char *domain, const char *display_name) {
 	LinphoneAddress *addr;
 	unsigned int status = 0;
-	LinphoneAccountParams *params = linphone_account_params_new(lc);
+	LinphoneAccountParams *params = linphone_account_params_new(lc, TRUE);
 	addr = linphone_address_new("sip:?@domain.com");
 	linphone_account_params_set_identity_address(params, addr);
 	if (addr) linphone_address_unref(addr);
@@ -94,7 +94,7 @@ LinphoneProxyConfig *linphone_account_creator_create_proxy_config(const Linphone
 
 LinphoneAccount *linphone_account_creator_create_account_in_core(const LinphoneAccountCreator *creator) {
 	LinphoneAuthInfo *info;
-	LinphoneAccountParams *params = linphone_account_params_new(creator->core);
+	LinphoneAccountParams *params = linphone_account_params_new(creator->core, TRUE);
 	char *identity_str = linphone_account_creator_get_identity(creator);
 	LinphoneAddress *identity = linphone_address_new(identity_str);
 	ms_free(identity_str);
@@ -256,7 +256,7 @@ LinphoneAccountCreatorPhoneNumberStatusMask linphone_account_creator_set_phone_n
 			return LinphoneAccountCreatorPhoneNumberStatusInvalidCountryCode;
 
 		if (!creator->account) {
-			LinphoneAccountParams *params = linphone_account_params_new(creator->core);
+			LinphoneAccountParams *params = linphone_account_params_new(creator->core, TRUE);
 			creator->account = linphone_core_create_account(creator->core, params);
 			linphone_account_params_unref(params);
 		}
@@ -441,7 +441,7 @@ LinphoneTransportType linphone_account_creator_get_transport(const LinphoneAccou
 
 LinphoneAccountCreatorStatus linphone_account_creator_set_route(LinphoneAccountCreator *creator, const char *route) {
 	if (!creator->account) {
-		LinphoneAccountParams *params = linphone_account_params_new(creator->core);
+		LinphoneAccountParams *params = linphone_account_params_new(creator->core, TRUE);
 		creator->account = linphone_core_create_account(creator->core, params);
 		linphone_account_params_unref(params);
 	}
@@ -550,7 +550,7 @@ LinphoneAccountCreator *linphone_account_creator_new(LinphoneCore *core, const c
 
 	creator->set_as_default = TRUE;
 
-	LinphoneAccountParams *params = linphone_account_params_new(core);
+	LinphoneAccountParams *params = linphone_account_params_new(core, TRUE);
 	creator->account = linphone_core_create_account(core, params);
 	linphone_account_params_unref(params);
 
diff --git a/src/account_creator/utils.cpp b/src/account_creator/utils.cpp
index 40a455dc40..19af98c57b 100644
--- a/src/account_creator/utils.cpp
+++ b/src/account_creator/utils.cpp
@@ -46,7 +46,7 @@ char *linphone_account_creator_get_identity(const LinphoneAccountCreator *creato
 	if (username) {
 		// we must escape username
 		LinphoneCore *lc = creator->core;
-		LinphoneAccountParams *params = linphone_account_params_new(lc);
+		LinphoneAccountParams *params = linphone_account_params_new(lc, TRUE);
 		LinphoneAccount *account = linphone_core_create_account(lc, params);
 		linphone_account_params_unref(params);
 		LinphoneAddress *addr = linphone_account_normalize_sip_uri(account, username);
diff --git a/src/c-wrapper/api/c-account-params.cpp b/src/c-wrapper/api/c-account-params.cpp
index fb5180a0f6..cc603a49ea 100644
--- a/src/c-wrapper/api/c-account-params.cpp
+++ b/src/c-wrapper/api/c-account-params.cpp
@@ -32,8 +32,8 @@
 
 using namespace LinphonePrivate;
 
-LinphoneAccountParams *linphone_account_params_new(LinphoneCore *lc) {
-	return AccountParams::createCObject(lc);
+LinphoneAccountParams *linphone_account_params_new(LinphoneCore *lc, bool_t use_default_values) {
+	return AccountParams::createCObject(lc, !!use_default_values);
 }
 
 LinphoneAccountParams *linphone_account_params_new_with_config(LinphoneCore *lc, int index) {
diff --git a/src/c-wrapper/api/c-account.cpp b/src/c-wrapper/api/c-account.cpp
index 804c1bf9dd..99769b8a16 100644
--- a/src/c-wrapper/api/c-account.cpp
+++ b/src/c-wrapper/api/c-account.cpp
@@ -362,7 +362,7 @@ char *linphone_account_normalize_phone_number(const LinphoneAccount *account, co
 		dial_prefix = linphone_account_params_get_international_prefix(accountParams);
 		dial_escape_plus = linphone_account_params_dial_escape_plus_enabled(accountParams);
 	} else {
-		LinphoneAccountParams *accountParams = linphone_account_params_new(NULL);
+		LinphoneAccountParams *accountParams = linphone_account_params_new(nullptr, FALSE);
 		dial_prefix = linphone_account_params_get_international_prefix(accountParams);
 		dial_escape_plus = linphone_account_params_dial_escape_plus_enabled(accountParams);
 		linphone_account_params_unref(accountParams);
diff --git a/tester/account_tester.c b/tester/account_tester.c
index 066d2f609e..b3ee26ccf7 100644
--- a/tester/account_tester.c
+++ b/tester/account_tester.c
@@ -489,7 +489,7 @@ static void account_dependency_to_self(void) {
 	linphone_core_clear_proxy_config(marie->lc);
 	BC_ASSERT_TRUE(wait_for(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationCleared, 2));
 
-	LinphoneAccountParams *marie_dependent_params = linphone_account_params_new(marie->lc);
+	LinphoneAccountParams *marie_dependent_params = linphone_account_params_new(marie->lc, TRUE);
 	linphone_account_params_set_identity_address(marie_dependent_params, marie_secondary_address);
 	linphone_account_params_set_server_addr(marie_dependent_params, "sip:external.example.org:5068;transport=tcp");
 
diff --git a/tester/call-twisted-cases.cpp b/tester/call-twisted-cases.cpp
index a2dea52052..50c2a3befe 100644
--- a/tester/call-twisted-cases.cpp
+++ b/tester/call-twisted-cases.cpp
@@ -166,7 +166,7 @@ static void call_challenged_after_180_base(bool_t with_account) {
 		identity_address = linphone_address_new(identity);
 		const char *realm = linphone_auth_info_get_realm(ai);
 
-		LinphoneAccountParams *account_params = linphone_account_params_new(marie->lc);
+		LinphoneAccountParams *account_params = linphone_account_params_new(marie->lc, TRUE);
 		char *agent_listening_uri = ms_strdup(agent.getListeningUriAsString().c_str());
 		server_address = linphone_address_new(agent_listening_uri);
 		linphone_account_params_set_server_address(account_params, server_address);
diff --git a/tools/lpsendmsg.c b/tools/lpsendmsg.c
index 401a4b356d..36df15de78 100644
--- a/tools/lpsendmsg.c
+++ b/tools/lpsendmsg.c
@@ -183,7 +183,7 @@ int main(int argc, char *argv[]) {
 		linphone_address_set_display_name(route, NULL);
 	}
 
-	LinphoneAccountParams *account_params = linphone_account_params_new(lc);
+	LinphoneAccountParams *account_params = linphone_account_params_new(lc, TRUE);
 	linphone_account_params_set_identity_address(account_params, from);
 	tmp = linphone_address_as_string(route);
 	linphone_account_params_set_server_addr(account_params, tmp);
diff --git a/tools/test_numbers.c b/tools/test_numbers.c
index c312ab3c86..1995ba4dbe 100644
--- a/tools/test_numbers.c
+++ b/tools/test_numbers.c
@@ -31,7 +31,7 @@ int main(int argc, char *argv[]) {
 	}
 	linphone_core_enable_logs(stderr);
 	linphone_core_set_log_level(ORTP_DEBUG);
-	LinphoneAccountParams *params = linphone_account_params_new(NULL);
+	LinphoneAccountParams *params = linphone_account_params_new(nullptr, FALSE);
 	if (argc > 2) linphone_account_params_set_international_prefix(params, argv[2]);
 	if (argc > 3 && strcmp(argv[3], "--escape-plus") == 0) linphone_account_params_set_dial_escape_plus(params, TRUE);
 	account = linphone_core_create_account(NULL, params);
-- 
GitLab