From 7b98f353ee8df21016f04fc4171e14ec80e0ef3c Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Fri, 22 Jun 2018 19:19:27 +0300 Subject: [PATCH] try to avoid loosing registrations by using ;expires=3600 and by registering UAs every 10 minutes fixed account help clicks --- .../com/tutpro/baresip/AccountActivity.kt | 37 ++++++++--------- .../com/tutpro/baresip/BaresipService.kt | 11 +++++ .../kotlin/com/tutpro/baresip/UserAgent.kt | 8 ++-- app/src/main/res/layout/activity_account.xml | 41 +++++++++++-------- app/src/main/res/values/strings.xml | 4 +- 5 files changed, 58 insertions(+), 43 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt index 1f7e9c3d..3b1c5911 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt @@ -19,7 +19,7 @@ class AccountActivity : AppCompatActivity() { internal lateinit var authPass: EditText internal lateinit var outbound1: EditText internal lateinit var outbound2: EditText - internal lateinit var regint: EditText + internal lateinit var regCheck: CheckBox internal lateinit var mediaEnc: String private var newCodecs = ArrayList() @@ -50,8 +50,8 @@ class AccountActivity : AppCompatActivity() { outbound2.setText(acc.outbound[1]) } - regint = findViewById(R.id.RegInt) as EditText - regint.setText(acc.regint.toString()) + regCheck = findViewById(R.id.Register) as CheckBox + regCheck.isChecked = acc.regint > 0 val audioCodecs = ArrayList(Api.audio_codecs().split(",")) newCodecs.addAll(audioCodecs) @@ -206,22 +206,19 @@ class AccountActivity : AppCompatActivity() { save = true } - val ri = regint.text.toString().trim() - if (Utils.checkUint(ri)) { - if (ri.toInt() != acc.regint) { - if (account_set_regint(acc.accp, ri.toInt()) == 0) { - acc.regint = account_regint(acc.accp) - Log.d("Baresip", "New regint is ${acc.regint}") - save = true - } else { - Log.e("Baresip", "Setting of regint $ri failed") - } + var newRegint = -1 + if (regCheck.isChecked) + if (acc.regint != 3600) newRegint = 3600 + else + if (acc.regint != 0) newRegint = 0 + if (newRegint != -1) + if (account_set_regint(acc.accp, newRegint) == 0) { + acc.regint = account_regint(acc.accp) + Log.d("Baresip", "New regint is ${acc.regint}") + save = true + } else { + Log.e("Baresip", "Setting of regint failed") } - } else { - Utils.alertView(this, "Notice", - "Invalid Registration Interval: $ri") - return false - } val ac = ArrayList(LinkedHashSet(newCodecs.filter { it != "" } as ArrayList)) if (ac != acc.audioCodec) { @@ -299,8 +296,8 @@ class AccountActivity : AppCompatActivity() { Utils.alertView(this, "Outbound Proxies", getString(R.string.obProxies)) } - findViewById(R.id.RegIntTitle) -> { - Utils.alertView(this, "Registration Interval", getString(R.string.regInt)) + findViewById(R.id.RegTitle) -> { + Utils.alertView(this, "Register", getString(R.string.register)) } findViewById(R.id.AudioCodecsTitle) -> { Utils.alertView(this, "Audio Codecs", getString(R.string.auCodecs)) diff --git a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt index 27a8eeac..9d47224b 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/BaresipService.kt @@ -10,6 +10,7 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.net.NetworkInfo +import android.os.Handler import android.os.IBinder import android.support.annotation.Keep import android.support.v4.app.NotificationCompat @@ -116,6 +117,16 @@ class BaresipService: Service() { BaresipService.IS_SERVICE_RUNNING = true registerReceiver(nr, IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")) showNotification() + + val handler = Handler() + val delay = 1000 * 600L + handler.postDelayed(object : Runnable { + override fun run() { + Log.d(LOG_TAG, "Handler based registration") + UserAgent.register(MainActivity.uas) + handler.postDelayed(this, delay) + } + }, delay) } "UpdateNotification" -> { diff --git a/app/src/main/kotlin/com/tutpro/baresip/UserAgent.kt b/app/src/main/kotlin/com/tutpro/baresip/UserAgent.kt index 28824387..823deb2f 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/UserAgent.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/UserAgent.kt @@ -9,9 +9,6 @@ class UserAgent (val uap: String) { fun register() { if (account.regint > 0) { Log.d("Baresip", "Registering ${account.aor} UA ${uap}") - val accp = ua_account(uap) - val reg_int = account_regint(accp) - Log.d("Baresip", "reg_int is $reg_int") if (ua_register(uap) != 0) Log.e("Baresip", "Registering failed") } @@ -52,8 +49,9 @@ class UserAgent (val uap: String) { fun register(uas: ArrayList) { for (ua in uas) { - if (ua_register(ua.uap) != 0) - Log.e("Baresip", "Failed to register ${ua.account.aor}") + if (ua.account.regint > 0) + if (ua_register(ua.uap) != 0) + Log.e("Baresip", "Failed to register ${ua.account.aor}") } } } diff --git a/app/src/main/res/layout/activity_account.xml b/app/src/main/res/layout/activity_account.xml index f2c5c39e..3ca60d22 100644 --- a/app/src/main/res/layout/activity_account.xml +++ b/app/src/main/res/layout/activity_account.xml @@ -21,8 +21,7 @@ android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@android:color/black" - android:focusable="true" - android:focusableInTouchMode="true" + android:onClick="onClick" android:text="Display Name" > @@ -41,6 +40,7 @@ android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@android:color/black" + android:onClick="onClick" android:text="Authentication Username" > @@ -58,6 +58,7 @@ android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@android:color/black" + android:onClick="onClick" android:text="Authentication Password" > @@ -76,6 +77,7 @@ android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@android:color/black" + android:onClick="onClick" android:text="Outbound Proxies" > @@ -97,22 +99,27 @@ android:layout_width="fill_parent"> - - - - - + android:orientation="horizontal" > + + + + + @@ -137,6 +145,7 @@ android:paddingTop="10dp" android:textSize="18sp" android:textColor="@android:color/black" + android:onClick="onClick" android:text="Media Encryption" > diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5908c203..ed116ea6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,8 +20,8 @@ one that responds. If no outbound proxy is given, requests are sent based on DNS NAPTR/SRV/A record lookup of callee URI hostpart.\nExample:\nsip:foo.com:5060;transport=tls - Tells how often (in seconds) REGISTER requests are sent. Value 0 - disables registration. + If checked, registration is enabled and REGISTER requests are sent at + 10 minute intervals. List of supported audio codecs in priority order. Selects media transport encryption protocol.\n