diff --git a/app/src/main/cpp/baresip.c b/app/src/main/cpp/baresip.c index 115c040e..821f00b9 100644 --- a/app/src/main/cpp/baresip.c +++ b/app/src/main/cpp/baresip.c @@ -1198,35 +1198,10 @@ Java_com_tutpro_baresip_Api_ua_1hangup(JNIEnv *env, jobject thiz, (*env)->ReleaseStringUTFChars(env, reason, native_reason); } -JNIEXPORT jstring JNICALL -Java_com_tutpro_baresip_Api_ua_1connect(JNIEnv *env, jobject thiz, jstring javaUA, jstring javaURI, jint javaVidMode) { - struct call *call; - struct ua *ua; - int err; - const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); - const char *native_uri = (*env)->GetStringUTFChars(env, javaURI, 0); - char call_buf[32]; - LOGD("connecting ua %s to %s %s video\n", native_ua, native_uri, - javaVidMode == 0 ? "without" : "with"); - ua = (struct ua *)strtoul(native_ua, NULL, 10); - re_thread_enter(); - err = ua_connect(ua, &call, NULL, native_uri, (enum vidmode)javaVidMode); - re_thread_leave(); - if (err) { - LOGW("connecting to %s failed with error %d\n", native_uri, err); - call_buf[0] = '\0'; - } else { - sprintf(call_buf, "%lu", (unsigned long)call); - } - (*env)->ReleaseStringUTFChars(env, javaUA, native_ua); - (*env)->ReleaseStringUTFChars(env, javaURI, native_uri); - return (*env)->NewStringUTF(env, call_buf); -} - JNIEXPORT jstring JNICALL Java_com_tutpro_baresip_Api_ua_1call_1alloc(JNIEnv *env, jobject thiz, jstring javaUA, jstring javaXCall, jint javaVidMode) { - struct call *xcall, *call = NULL; + struct call *xcall = NULL, *call = NULL; struct ua *ua; int err; const char *native_ua = (*env)->GetStringUTFChars(env, javaUA, 0); @@ -1234,7 +1209,8 @@ Java_com_tutpro_baresip_Api_ua_1call_1alloc(JNIEnv *env, jobject thiz, jstring j char call_buf[32]; LOGD("allocating new call for ua %s xcall %s\n", native_ua, native_xcall); ua = (struct ua *)strtoul(native_ua, NULL, 10); - xcall = (struct call *)strtoul(native_xcall, NULL, 10); + if (strlen(native_xcall) > 0) + xcall = (struct call *)strtoul(native_xcall, NULL, 10); re_thread_enter(); err = ua_call_alloc(&call, ua, (enum vidmode)javaVidMode, NULL, xcall, call_localuri(xcall), true); re_thread_leave(); diff --git a/app/src/main/kotlin/com/tutpro/baresip/Api.kt b/app/src/main/kotlin/com/tutpro/baresip/Api.kt index 40e85890..c17b1029 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Api.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Api.kt @@ -54,7 +54,6 @@ object Api { external fun ua_register(ua: String): Int external fun ua_isregistered(ua: String): Boolean external fun ua_unregister(ua: String) - external fun ua_connect(uap: String, peer_uri: String, video: Int): 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) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 41320650..e621edc3 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -551,7 +551,11 @@ class BaresipService: Service() { return } "call outgoing" -> { - val call = Call.ofCallp(callp) ?: return + val call = Call.ofCallp(callp) + if (call == null) { + Log.w(TAG, "Call $callp that is outgoing is not found") + return + } if (call.status == "transferring") break stopMediaPlayer() diff --git a/app/src/main/kotlin/com/tutpro/baresip/Call.kt b/app/src/main/kotlin/com/tutpro/baresip/Call.kt index 7276888d..511e44a9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Call.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Call.kt @@ -24,10 +24,6 @@ class Call(val callp: String, val ua: UserAgent, val peerUri: String, val dir: S return call_connect(callp, uri) } - fun startAudio() { - call_start_audio(callp) - } - fun hold(): Int { return call_hold(callp, true) } diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index a36baa6c..50f13c95 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1058,7 +1058,8 @@ class MainActivity : AppCompatActivity() { if (acc.missedCalls) callsButton.setImageResource(R.drawable.calls_missed) } - if (speakerIcon != null) speakerIcon!!.setIcon(R.drawable.speaker_off) + if (speakerIcon != null) + speakerIcon!!.setIcon(R.drawable.speaker_off) val param = ev[1].trim() if ((param != "") && (Call.uaCalls(ua, "").size == 0)) { if (param[0].isDigit()) @@ -1556,12 +1557,19 @@ 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_connect(ua.uap, uri, Api.VIDMODE_OFF) + val callp = Api.ua_call_alloc(ua.uap, "", Api.VIDMODE_OFF) return if (callp != "") { Log.d(TAG, "Adding outgoing call ${ua.uap}/$callp/$uri") - Call(callp, ua, uri, "out", "outgoing", Utils.dtmfWatcher(callp)).add() - showCall(ua) - true + val call = Call(callp, ua, uri, "out", "outgoing", Utils.dtmfWatcher(callp)) + call.add() + val err = call.connect(uri) + if (err == 0) { + showCall(ua) + true + } else { + Log.w(TAG, "call_connect $callp failed with error $err") + false + } } else { Log.w(TAG, "ua_connect ${ua.uap}/$uri failed") false