Added Unique Contact URI setting

This commit is contained in:
Juha Heinanen
2026-03-11 03:24:49 +02:00
parent e63175edab
commit e247a57382
6 changed files with 55 additions and 1 deletions

View File

@ -21,7 +21,6 @@ audio_jitter_buffer_size 50
rtp_stats yes
rtp_timeout 60
rtp_rxmode thread
sip_cuser_random yes
module aaudio.so
module stun.so
module turn.so

View File

@ -115,6 +115,12 @@ object Config {
if (userAgent != "")
config = "${config}user_agent $userAgent\n"
val sipCuserRandom = previousVariable("sip_cuser_random")
config = if (sipCuserRandom != "")
"${config}sip_cuser_random $sipCuserRandom\n"
else
"${config}sip_cuser_random yes\n"
val darkTheme = previousVariable("dark_theme")
Preferences(ctx).displayTheme = if (darkTheme == "yes") {
config = "${config}dark_theme yes\n"

View File

@ -762,6 +762,35 @@ private fun SettingsContent(
}
}
@Composable
fun UniqueContactUri() {
val uniqueContactUriTitle = stringResource(R.string.unique_contact_uri)
val uniqueContactUriHelp = stringResource(R.string.unique_contact_uri_help)
Row(
Modifier
.fillMaxWidth()
.padding(end = 10.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
Text(text = uniqueContactUriTitle,
modifier = Modifier
.weight(1f)
.clickable {
alertTitle.value = uniqueContactUriTitle
alertMessage.value = uniqueContactUriHelp
showAlert.value = true
},
fontSize = 18.sp
)
val uniqueContactUri by viewModel.uniqueContactUri.collectAsState()
Switch(
checked = uniqueContactUri,
onCheckedChange = { viewModel.uniqueContactUri.value = it }
)
}
}
@Composable
fun AudioSettings(navController: NavController) {
Row(
@ -1318,6 +1347,7 @@ private fun SettingsContent(
VerifyServer()
CaFile(activity)
UserAgent()
UniqueContactUri()
AudioSettings(navController)
Contacts(activity)
Ringtone()
@ -1435,6 +1465,13 @@ private fun checkOnClick(ctx: Context, viewModel: SettingsViewModel): Boolean {
restart = true
}
if ((Config.variable("sip_cuser_random") == "yes") != viewModel.uniqueContactUri.value) {
Config.replaceVariable("sip_cuser_random",
if (viewModel.uniqueContactUri.value) "yes" else "no")
save = true
restart = true
}
val ringtoneUri = viewModel.ringtoneUri.value
Preferences(ctx).ringtoneUri = ringtoneUri
BaresipService.rt = RingtoneManager.getRingtone(ctx, ringtoneUri.toUri())

View File

@ -24,6 +24,7 @@ class SettingsViewModel: ViewModel() {
val verifyServer = MutableStateFlow(false)
val caFile = MutableStateFlow(false)
val userAgent = MutableStateFlow("")
val uniqueContactUri = MutableStateFlow(true)
val contactsMode = MutableStateFlow("")
val ringtoneUri = MutableStateFlow("")
val batteryOptimizations = MutableStateFlow(false)
@ -62,6 +63,8 @@ class SettingsViewModel: ViewModel() {
userAgent.value = Config.variable("user_agent")
uniqueContactUri.value = Config.variable("sip_cuser_random") == "yes"
contactsMode.value = Config.variable("contacts_mode").lowercase()
ringtoneUri.value = if (Preferences(ctx).ringtoneUri == "")

View File

@ -382,6 +382,11 @@
nimeltään \'ca_certs.crt\' ladataan Download-kansiosta.
</string>
<string name="no_read_permission">Ei ulkoisen muistin lukuoikeutta</string>
<string name="unique_contact_uri">Uniikki Contact URI</string>
<string name="unique_contact_uri_help">Jos merkitty, Contact URI:n taataan olevan uniikki.
Merkittävä, jos on useammalla tilillä on same SIP URI:n käyttäjäosa, mutta myös
suojaa tilejä hyökkäyksiltä.
</string>
<string name="audio_settings">Audio-asetukset</string>
<string name="speaker_phone">Kaiutin</string>
<string name="speaker_phone_help">Jos merkitty, kaiutin kytketään sutomaattisesti päälle

View File

@ -364,6 +364,10 @@
TLS certificates of such Certificate Authorities that are not included in Android OS.
In Android version 9, a file called \'ca_certs.crt\' is loaded from Download folder.</string>
<string name="no_read_permission">No External Storage read permission</string>
<string name="unique_contact_uri">Unique Contact URI</string>
<string name="unique_contact_uri_help">If checked, Contact URI is guaranteed to be unique.
Needs to be checked if there is more than one account with the same SIP URI userpart,
but also improves protection of the accounts from attacks.</string>
<string name="audio_settings">Audio Settings</string>
<string name="speaker_phone">Speaker Phone</string>
<string name="speaker_phone_help">If checked, speaker phone is turned automatically on