In attended call transfer, check if peer supports REPLACES header

This commit is contained in:
Juha Heinanen
2026-04-03 14:13:58 +03:00
parent bdaee6f013
commit cc3fc1b23d
6 changed files with 27 additions and 5 deletions

View File

@ -1414,6 +1414,14 @@ JNIEXPORT jboolean JNICALL Java_com_tutpro_baresip_Api_call_1ismuted(
return audio_ismuted(call_audio((struct call *)call));
}
JNIEXPORT jboolean JNICALL Java_com_tutpro_baresip_Api_call_1supported(
JNIEnv *env, jobject obj, jlong call, jint tags)
{
(void)env;
(void)obj;
return call_supported((struct call *)call, tags);
}
JNIEXPORT jint JNICALL Java_com_tutpro_baresip_Api_call_1transfer(
JNIEnv *env, jobject obj, jlong call, jstring jPeer)
{

View File

@ -104,6 +104,8 @@ object Api {
external fun call_replace_transfer(xfer_callp: Long, callp: Long): Boolean
external fun call_peer_uri(callp: Long): String
external fun call_diverter_uri(callp: Long): String
external fun call_supported(callp: Long, header: Int): Boolean
external fun call_destroy(callp: Long)
external fun calls_mute(mute: Boolean)

View File

@ -129,6 +129,8 @@ class Call(val callp: Long, val ua: UserAgent, val peerUri: String, val dir: Str
companion object {
const val REPLACES = 1
fun calls(): ArrayList<Call> {
return BaresipService.calls
}

View File

@ -1579,13 +1579,20 @@ private fun CallRow(
enabled = call.transferButtonEnabled.value,
onClick = {
if (call.onHoldCall != null) {
val connection = ConnectionService.connections[call.callp]
connection?.onHold()
if (!call.executeTransfer()) {
alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.transfer_failed)
if (!Api.call_supported(call.callp, Call.REPLACES)) {
alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.replaces_not_supported)
showAlert.value = true
}
else {
val connection = ConnectionService.connections[call.callp]
connection?.onHold()
if (!call.executeTransfer()) {
alertTitle.value = ctx.getString(R.string.notice)
alertMessage.value = ctx.getString(R.string.transfer_failed)
showAlert.value = true
}
}
}
else
showTransferDialog = true

View File

@ -521,6 +521,7 @@
<string name="allow_video_send">Salli video videon lähetys puhelussa \'%1$s\'\?</string>
<string name="allow_video_recv">Salli video videon vastaanotto puhelussa \'%1$s\'\?</string>
<string name="call_is_on_hold">Puhelu on pidossa</string>
<string name="call_is_connected">Puhelu on yhdistetty</string>
<string name="rec_in_call">Tallennus voidaan asettaa päälle tai pois vain silloin, kun puhelu
ei ole yhdistetty</string>
<string name="call_transfer">Puhelun siirto</string>
@ -530,6 +531,7 @@
<string name="choose_destination_uri">Valitse kohteen URI</string>
<string name="transfer">Siirto</string>
<string name="transfer_failed">Siirto epäonnistui</string>
<string name="replaces_not_supported">Toinen osapuoli ei tue REPLACES ominaisuutta</string>
<string name="dtmf">DTMF</string>
<string name="call_info">Puhelutiedot</string>
<string name="call_info_not_available">Ei saatavilla</string>

View File

@ -515,6 +515,7 @@
<string name="choose_destination_uri">Choose destination URI</string>
<string name="transfer">Transfer</string>
<string name="transfer_failed">Transfer failed</string>
<string name="replaces_not_supported">Peer does not support REPLACES feature</string>
<string name="dtmf">DTMF</string>
<string name="call_info">Call Info</string>
<string name="call_info_not_available">No info available</string>