Use Long type instead of String to pass pointers

This commit is contained in:
Juha Heinanen
2022-03-08 17:23:35 +02:00
parent da9af943f1
commit c75f3c24e7
9 changed files with 402 additions and 569 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,7 +6,7 @@ import kotlin.collections.ArrayList
import java.net.URLEncoder
import java.net.URLDecoder
class Account(val accp: String) {
class Account(val accp: Long) {
var displayName = Api.account_display_name(accp)
val aor = Api.account_aor(accp)

View File

@ -9,59 +9,59 @@ object Api {
const val DTMFMODE_RTP_EVENT = 0
const val DTMFMODE_SIP_INFO = 1
external fun account_set_display_name(acc: String, dn: String): Int
external fun account_display_name(acc: String): String
external fun account_aor(acc: String): String
external fun account_luri(acc: String): String
external fun account_auth_user(acc: String): String
external fun account_set_auth_user(acc: String, user: String): Int
external fun account_auth_pass(acc: String): String
external fun account_set_auth_pass(acc: String, pass: String): Int
external fun account_outbound(acc: String, ix: Int): String
external fun account_set_outbound(acc: String, ob: String, ix: Int): Int
external fun account_set_sipnat(acc: String, sipnat: String): Int
external fun account_audio_codec(acc: String, ix: Int): String
external fun account_regint(acc: String): Int
external fun account_set_regint(acc: String, regint: Int): Int
external fun account_stun_uri(acc: String): String
external fun account_set_stun_uri(acc: String, uri: String): Int
external fun account_stun_user(acc: String): String
external fun account_set_stun_user(acc: String, user: String): Int
external fun account_stun_pass(acc: String): String
external fun account_set_stun_pass(acc: String, pass: String): Int
external fun account_mediaenc(acc: String): String
external fun account_set_mediaenc(acc: String, mediaenc: String): Int
external fun account_medianat(acc: String): String
external fun account_set_medianat(acc: String, medianat: String): Int
external fun account_set_audio_codecs(acc: String, codecs: String): Int
external fun account_set_video_codecs(acc: String, codecs: String): Int
external fun account_set_mwi(acc: String, value: String): Int
external fun account_vm_uri(acc: String): String
external fun account_answermode(acc: String): Int
external fun account_set_answermode(acc: String, mode: Int): Int
external fun account_dtmfmode(acc: String): Int
external fun account_set_dtmfmode(acc: String, mode: Int): Int
external fun account_extra(acc: String): String
external fun account_debug(acc: String)
external fun account_set_display_name(acc: Long, dn: String): Int
external fun account_display_name(acc: Long): String
external fun account_aor(acc: Long): String
external fun account_luri(acc: Long): String
external fun account_auth_user(acc: Long): String
external fun account_set_auth_user(acc: Long, user: String): Int
external fun account_auth_pass(acc: Long): String
external fun account_set_auth_pass(acc: Long, pass: String): Int
external fun account_outbound(acc: Long, ix: Int): String
external fun account_set_outbound(acc: Long, ob: String, ix: Int): Int
external fun account_set_sipnat(acc: Long, sipnat: String): Int
external fun account_audio_codec(acc: Long, ix: Int): String
external fun account_regint(acc: Long): Int
external fun account_set_regint(acc: Long, regint: Int): Int
external fun account_stun_uri(acc: Long): String
external fun account_set_stun_uri(acc: Long, uri: String): Int
external fun account_stun_user(acc: Long): String
external fun account_set_stun_user(acc: Long, user: String): Int
external fun account_stun_pass(acc: Long): String
external fun account_set_stun_pass(acc: Long, pass: String): Int
external fun account_mediaenc(acc: Long): String
external fun account_set_mediaenc(acc: Long, mediaenc: String): Int
external fun account_medianat(acc: Long): String
external fun account_set_medianat(acc: Long, medianat: String): Int
external fun account_set_audio_codecs(acc: Long, codecs: String): Int
external fun account_set_video_codecs(acc: Long, codecs: String): Int
external fun account_set_mwi(acc: Long, value: String): Int
external fun account_vm_uri(acc: Long): String
external fun account_answermode(acc: Long): Int
external fun account_set_answermode(acc: Long, mode: Int): Int
external fun account_dtmfmode(acc: Long): Int
external fun account_set_dtmfmode(acc: Long, mode: Int): Int
external fun account_extra(acc: Long): String
external fun account_debug(acc: Long)
external fun uag_reset_transp(register: Boolean, reinvite: Boolean)
external fun uag_enable_sip_trace(enable: Boolean)
external fun ua_account(ua: String): String
external fun ua_alloc(uri: String): String
external fun ua_update_account(ua: String): Int
external fun ua_destroy(ua: String)
external fun ua_register(ua: String): Int
external fun ua_isregistered(ua: String): Boolean
external fun ua_unregister(ua: String)
external fun ua_hangup(uap: String, callp: String, code: Int, reason: String)
external fun ua_call_alloc(uap: String, xcallp: String, video: Int): String
external fun ua_answer(uap: String, callp: String, video: Int)
external fun ua_debug(uap: String)
external fun ua_account(uap: Long): Long
external fun ua_alloc(uri: String): Long
external fun ua_update_account(uap: Long): Int
external fun ua_destroy(uap: Long)
external fun ua_register(uap: Long): Int
external fun ua_isregistered(uap: Long): Boolean
external fun ua_unregister(uap: Long)
external fun ua_hangup(uap: Long, callp: Long, code: Int, reason: String)
external fun ua_call_alloc(uap: Long, xcallp: Long, video: Int): Long
external fun ua_answer(uap: Long, callp: Long, video: Int)
external fun ua_debug(uap: Long)
external fun calls_mute(mute: Boolean)
external fun message_send(uap: String, peer_uri: String, message: String, time: String): Int
external fun message_send(uap: Long, peer_uri: String, message: String, time: String): Int
external fun audio_codecs(): String
external fun video_codecs(): String

View File

@ -431,8 +431,8 @@ class BaresipService: Service() {
}
"Call Answer" -> {
val uap = intent!!.getStringExtra("uap")!!
val callp = intent.getStringExtra("callp")!!
val uap = intent!!.getLongExtra("uap", 0L)
val callp = intent.getLongExtra("callp", 0L)
val vidMode = intent.getIntExtra("video", Api.VIDMODE_OFF)
stopRinging()
stopMediaPlayer()
@ -445,7 +445,7 @@ class BaresipService: Service() {
}
"Call Reject" -> {
val callp = intent!!.getStringExtra("callp")!!
val callp = intent!!.getLongExtra("callp", 0L)
val call = Call.ofCallp(callp)
if (call == null) {
Log.w(TAG, "onStartCommand did not find call $callp")
@ -459,7 +459,7 @@ class BaresipService: Service() {
}
"Transfer Deny" -> {
val callp = intent!!.getStringExtra("callp")!!
val callp = intent!!.getLongExtra("callp", 0L)
val call = Call.ofCallp(callp)
if (call == null)
Log.w(TAG, "onStartCommand did not find call $callp")
@ -469,7 +469,7 @@ class BaresipService: Service() {
}
"Message Save" -> {
val uap = intent!!.getStringExtra("uap")!!
val uap = intent!!.getLongExtra("uap", 0L)
val ua = UserAgent.ofUap(uap)
if (ua == null)
Log.w(TAG, "onStartCommand did not find UA $uap")
@ -482,7 +482,7 @@ class BaresipService: Service() {
}
"Message Delete" -> {
val uap = intent!!.getStringExtra("uap")!!
val uap = intent!!.getLongExtra("uap", 0L)
val ua = UserAgent.ofUap(uap)
if (ua == null)
Log.w(TAG, "onStartCommand did not find UA $uap")
@ -531,7 +531,7 @@ class BaresipService: Service() {
}
@Keep
fun uaAdd(uap: String) {
fun uaAdd(uap: Long) {
val ua = UserAgent(uap)
Log.d(TAG, "uaAdd ${ua.account.aor} at BaresipService")
uas.add(ua)
@ -549,7 +549,7 @@ class BaresipService: Service() {
@SuppressLint("UnspecifiedImmutableFlag")
@Keep
fun uaEvent(event: String, uap: String, callp: String) {
fun uaEvent(event: String, uap: Long, callp: Long) {
if (!isServiceRunning) return
@ -565,7 +565,7 @@ class BaresipService: Service() {
}
val call = Call.ofCallp(callp)
if (call == null && callp != "0" && ev[0] != "call incoming" && ev[0] != "call rejected") {
if (call == null && callp != 0L && ev[0] != "call incoming" && ev[0] != "call rejected") {
Log.w(TAG, "uaEvent $event did not find call $callp")
return
}
@ -922,7 +922,8 @@ class BaresipService: Service() {
}
}
postServiceEvent(ServiceEvent(newEvent ?: event, arrayListOf(uap, callp), System.nanoTime()))
postServiceEvent(ServiceEvent(newEvent ?: event, arrayListOf(uap, callp),
System.nanoTime()))
}
@ -938,7 +939,7 @@ class BaresipService: Service() {
@SuppressLint("UnspecifiedImmutableFlag")
@Keep
fun messageEvent(uap: String, peer: String, msg: ByteArray) {
fun messageEvent(uap: Long, peer: String, msg: ByteArray) {
var text = "Decoding of message failed!"
try {
text = String(msg, StandardCharsets.UTF_8)

View File

@ -3,7 +3,7 @@ package com.tutpro.baresip
import android.text.TextWatcher
import java.util.*
class Call(val callp: String, val ua: UserAgent, val peerUri: String, val dir: String,
class Call(val callp: Long, val ua: UserAgent, val peerUri: String, val dir: String,
var status: String, val dtmfWatcher: TextWatcher?) {
var onhold = false
@ -67,17 +67,17 @@ class Call(val callp: String, val ua: UserAgent, val peerUri: String, val dir: S
if (ua.account.mediaEnc != "") security = R.drawable.box_red
}
private external fun call_connect(callp: String, peer_uri: String): Int
private external fun call_hold(callp: String, hold: Boolean): Int
private external fun call_ismuted(callp: String): Boolean
private external fun call_transfer(callp: String, peer_uri: String): Int
private external fun call_send_digit(callp: String, digit: Char): Int
private external fun call_notify_sipfrag(callp: String, code: Int, reason: String)
private external fun call_start_audio(callp: String)
private external fun call_audio_codecs(callp: String): String
private external fun call_duration(callp: String): Int
private external fun call_stats(callp: String, stream: String): String
private external fun call_has_video(callp: String): Boolean
private external fun call_connect(callp: Long, peer_uri: String): Int
private external fun call_hold(callp: Long, hold: Boolean): Int
private external fun call_ismuted(callp: Long): Boolean
private external fun call_transfer(callp: Long, peer_uri: String): Int
private external fun call_send_digit(callp: Long, digit: Char): Int
private external fun call_notify_sipfrag(callp: Long, code: Int, reason: String)
private external fun call_start_audio(callp: Long)
private external fun call_audio_codecs(callp: Long): String
private external fun call_duration(callp: Long): Int
private external fun call_stats(callp: Long, stream: String): String
private external fun call_has_video(callp: Long): Boolean
companion object {
@ -92,7 +92,7 @@ class Call(val callp: String, val ua: UserAgent, val peerUri: String, val dir: S
return result
}
fun ofCallp(callp: String): Call? {
fun ofCallp(callp: Long): Call? {
for (c in BaresipService.calls)
if (c.callp == callp) return c
return null

View File

@ -93,7 +93,7 @@ class MainActivity : AppCompatActivity() {
private var atStartup = false
private var resumeUri = ""
private var resumeUap = ""
private var resumeUap = 0L
private var resumeCall: Call? = null
private var resumeAction = ""
private var firstRun = false
@ -808,7 +808,7 @@ class MainActivity : AppCompatActivity() {
Toast.LENGTH_SHORT).show()
return
}
val uap = intent.getStringExtra("uap")!!
val uap = intent.getLongExtra("uap", 0L)
val ua = UserAgent.ofUap(uap)
if (ua == null) {
Log.w(TAG, "handleIntent 'call' did not find ua $uap")
@ -820,7 +820,7 @@ class MainActivity : AppCompatActivity() {
ua.account.resumeUri = intent.getStringExtra("peer")!!
}
"call show", "call answer" -> {
val callp = intent.getStringExtra("callp")!!
val callp = intent.getLongExtra("callp", 0L)
val call = Call.ofCallp(callp)
if (call == null) {
Log.w(TAG, "handleIntent '$action' did not find call $callp")
@ -833,7 +833,7 @@ class MainActivity : AppCompatActivity() {
resumeCall = call
}
"call missed" -> {
val uap = intent.getStringExtra("uap")!!
val uap = intent.getLongExtra("uap", 0L)
val ua = UserAgent.ofUap(uap)
if (ua == null) {
Log.w(TAG, "handleIntent did not find ua $uap")
@ -844,7 +844,7 @@ class MainActivity : AppCompatActivity() {
resumeAction = action
}
"call transfer", "transfer show", "transfer accept" -> {
val callp = intent.getStringExtra("callp")!!
val callp = intent.getLongExtra("callp", 0L)
val call = Call.ofCallp(callp)
if (call == null) {
Log.w(TAG, "handleIntent '$action' did not find call $callp")
@ -859,7 +859,7 @@ class MainActivity : AppCompatActivity() {
intent.getStringExtra("uri")!!
}
"message", "message show", "message reply" -> {
val uap = intent.getStringExtra("uap")!!
val uap = intent.getLongExtra("uap", 0L)
val ua = UserAgent.ofUap(uap)
if (ua == null) {
Log.w(TAG, "onNewIntent did not find ua $uap")
@ -893,7 +893,7 @@ class MainActivity : AppCompatActivity() {
return super.onKeyDown(keyCode, event)
}
private fun handleServiceEvent(event: String, params: ArrayList<String>) {
private fun handleServiceEvent(event: String, params: ArrayList<Any>) {
fun handleNextEvent(logMessage: String? = null) {
if (logMessage != null)
@ -913,7 +913,7 @@ class MainActivity : AppCompatActivity() {
}
if (event == "started") {
val callActionUri = params[0]
val callActionUri = params[0] as String
Log.d(TAG, "Handling service event 'started' with '$callActionUri'")
if (!this::uaAdapter.isInitialized) {
// Android has restarted baresip when permission has been denied in app settings
@ -959,7 +959,7 @@ class MainActivity : AppCompatActivity() {
return
}
val uap = params[0]
val uap = params[0] as Long
val ua = UserAgent.ofUap(uap)
if (ua == null) {
handleNextEvent("handleServiceEvent '$event' did not find ua $uap")
@ -980,7 +980,7 @@ class MainActivity : AppCompatActivity() {
}
}
"call incoming", "call outgoing" -> {
val callp = params[1]
val callp = params[1] as Long
if (BaresipService.isMainVisible) {
if (aor != aorSpinner.tag)
spinToAor(aor)
@ -1011,7 +1011,7 @@ class MainActivity : AppCompatActivity() {
showCall(ua)
}
"call verify" -> {
val callp = params[1]
val callp = params[1] as Long
val call = Call.ofCallp(callp)
if (call == null) {
handleNextEvent("Call $callp to be verified is not found")
@ -1051,7 +1051,7 @@ class MainActivity : AppCompatActivity() {
}
}
"call verified", "call secure" -> {
val callp = params[1]
val callp = params[1] as Long
val call = Call.ofCallp(callp)
if (call == null) {
handleNextEvent("Call $callp that is verified is not found")
@ -1067,7 +1067,7 @@ class MainActivity : AppCompatActivity() {
}
}
"call transfer", "transfer show" -> {
val callp = params[1]
val callp = params[1] as Long
if (!BaresipService.isMainVisible) {
Log.d(TAG, "Reordering to front")
BaresipService.activities.clear()
@ -1099,7 +1099,7 @@ class MainActivity : AppCompatActivity() {
}
}
"transfer accept" -> {
val callp = params[1]
val callp = params[1] as Long
val call = Call.ofCallp(callp)
if (call in Call.calls())
Api.ua_hangup(uap, callp, 0, "")
@ -1132,7 +1132,7 @@ class MainActivity : AppCompatActivity() {
i.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
val b = Bundle()
b.putString("aor", aor)
b.putString("peer", params[1])
b.putString("peer", params[1] as String)
b.putBoolean("focus", ev[0] == "message reply")
i.putExtras(b)
chatRequests.launch(i)
@ -1611,8 +1611,8 @@ class MainActivity : AppCompatActivity() {
private fun call(ua: UserAgent, uri: String): Boolean {
if (ua.account.aor != aorSpinner.tag)
spinToAor(ua.account.aor)
val callp = Api.ua_call_alloc(ua.uap, "", Api.VIDMODE_OFF)
return if (callp != "") {
val callp = Api.ua_call_alloc(ua.uap, 0L, Api.VIDMODE_OFF)
return if (callp != 0L) {
Log.d(TAG, "Adding outgoing call ${ua.uap}/$callp/$uri")
val call = Call(callp, ua, uri, "out", "outgoing", Utils.dtmfWatcher(callp))
call.add()
@ -1632,7 +1632,7 @@ class MainActivity : AppCompatActivity() {
private fun acceptTransfer(ua: UserAgent, call: Call, uri: String) {
val newCallp = Api.ua_call_alloc(ua.uap, call.callp, Api.VIDMODE_OFF)
if (newCallp != "") {
if (newCallp != 0L) {
Log.d(TAG, "Adding outgoing call ${ua.uap}/$newCallp/$uri")
val newCall = Call(newCallp, ua, uri, "out", "transferring",
Utils.dtmfWatcher(newCallp))

View File

@ -1,3 +1,3 @@
package com.tutpro.baresip
class ServiceEvent (val event: String, val params: ArrayList<String>, val timeStamp: Long)
class ServiceEvent (val event: String, val params: ArrayList<Any>, val timeStamp: Long)

View File

@ -1,6 +1,6 @@
package com.tutpro.baresip
class UserAgent(val uap: String) {
class UserAgent(val uap: Long) {
val account = Account(Api.ua_account(uap))
@ -41,7 +41,7 @@ class UserAgent(val uap: String) {
return null
}
fun ofUap(uap: String): UserAgent? {
fun ofUap(uap: Long): UserAgent? {
for (ua in BaresipService.uas)
if (ua.uap == uap) return ua
return null
@ -49,7 +49,7 @@ class UserAgent(val uap: String) {
fun uaAlloc(uri: String): UserAgent? {
val uap = Api.ua_alloc(uri)
if (uap != "") return UserAgent(uap)
if (uap != 0L) return UserAgent(uap)
Log.e(TAG, "Failed to allocate UserAgent for $uri")
return null
}

View File

@ -414,7 +414,7 @@ object Utils {
return result
}
fun dtmfWatcher(callp: String): TextWatcher {
fun dtmfWatcher(callp: Long): TextWatcher {
return object : TextWatcher {
override fun beforeTextChanged(sequence: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(sequence: CharSequence, start: Int, before: Int, count: Int) {