Skip to content

Commit 71833f8

Browse files
committed
catch and log EOFException errors when reading ADB messages
1 parent b1aedb0 commit 71833f8

File tree

1 file changed

+31
-23
lines changed
  • sysbridge/src/main/java/io/github/sds100/keymapper/sysbridge/adb

1 file changed

+31
-23
lines changed

sysbridge/src/main/java/io/github/sds100/keymapper/sysbridge/adb/AdbClient.kt

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import io.github.sds100.keymapper.sysbridge.adb.AdbProtocol.A_WRTE
1717
import java.io.Closeable
1818
import java.io.DataInputStream
1919
import java.io.DataOutputStream
20+
import java.io.EOFException
2021
import java.net.ConnectException
2122
import java.net.Socket
2223
import java.net.SocketException
@@ -105,6 +106,9 @@ internal class AdbClient(private val host: String, private val port: Int, privat
105106
return AdbError.SslHandshakeError
106107
} catch (e: SocketException) {
107108
return AdbError.ConnectionError
109+
} catch (_: EOFException) {
110+
Timber.e("AdbClient.connect(): Caught EOF Exception when reading ADB message")
111+
return AdbError.ConnectionError
108112
}
109113

110114
return Success(Unit)
@@ -114,35 +118,39 @@ internal class AdbClient(private val host: String, private val port: Int, privat
114118
val localId = 1
115119
write(A_OPEN, localId, 0, "shell:$command")
116120

117-
var message = read()
118-
when (message.command) {
119-
A_OKAY -> {
120-
while (true) {
121-
message = read()
122-
123-
val remoteId = message.arg0
124-
if (message.command == A_WRTE) {
125-
if (message.data_length > 0) {
126-
listener(message.data!!)
121+
try {
122+
var message = read()
123+
when (message.command) {
124+
A_OKAY -> {
125+
while (true) {
126+
message = read()
127+
128+
val remoteId = message.arg0
129+
if (message.command == A_WRTE) {
130+
if (message.data_length > 0) {
131+
listener(message.data!!)
132+
}
133+
write(A_OKAY, localId, remoteId)
134+
} else if (message.command == A_CLSE) {
135+
write(A_CLSE, localId, remoteId)
136+
break
137+
} else {
138+
error("not A_WRTE or A_CLSE")
127139
}
128-
write(A_OKAY, localId, remoteId)
129-
} else if (message.command == A_CLSE) {
130-
write(A_CLSE, localId, remoteId)
131-
break
132-
} else {
133-
error("not A_WRTE or A_CLSE")
134140
}
135141
}
136-
}
137142

138-
A_CLSE -> {
139-
val remoteId = message.arg0
140-
write(A_CLSE, localId, remoteId)
141-
}
143+
A_CLSE -> {
144+
val remoteId = message.arg0
145+
write(A_CLSE, localId, remoteId)
146+
}
142147

143-
else -> {
144-
error("not A_OKAY or A_CLSE")
148+
else -> {
149+
error("not A_OKAY or A_CLSE")
150+
}
145151
}
152+
} catch (_: EOFException) {
153+
Timber.e("AdbClient.shellCommand(): Caught EOF Exception when reading ADB message")
146154
}
147155
}
148156

0 commit comments

Comments
 (0)