diff --git a/res/values/strings.xml b/res/values/strings.xml index a68b9c9..cbda608 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -187,6 +187,10 @@ Message filter help Online reference for APRS-IS filters +TCP socket timeout +Time before resetting the connection +Timeout value in seconds (0 = disable) + translator-credits diff --git a/res/xml/pref_tcp.xml b/res/xml/pref_tcp.xml index f5b8546..3d4eafe 100644 --- a/res/xml/pref_tcp.xml +++ b/res/xml/pref_tcp.xml @@ -36,6 +36,14 @@ + + diff --git a/src/backend/TcpUploader.scala b/src/backend/TcpUploader.scala index fe002c5..0926ec6 100644 --- a/src/backend/TcpUploader.scala +++ b/src/backend/TcpUploader.scala @@ -9,6 +9,7 @@ import _root_.java.net.{InetAddress, Socket} class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsIsUploader(prefs) { val TAG = "TcpUploader" val hostname = prefs.getString("tcp.server", "euro.aprs2.net") + val so_timeout = prefs.getStringInt("tcp.sotimeout", 120) var conn : TcpSocketThread = null createConnection() @@ -59,6 +60,7 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsIsUpl this.synchronized { socket = new Socket(host, port) socket.setKeepAlive(true) + socket.setSoTimeout(so_timeout*1000) reader = new BufferedReader(new InputStreamReader( socket.getInputStream()), 256) writer = new PrintWriter(new OutputStreamWriter( @@ -93,6 +95,10 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsIsUpl init_socket() } } catch { + case se : java.net.SocketTimeoutException => + Log.i(TAG, "restarting due to timeout") + shutdown() + init_socket() case e : Exception => Log.d(TAG, "Exception " + e) } }