Browse Source

Handle encryption errors

connman
adityapk00 5 years ago
parent
commit
935082ebe4
  1. 15
      app/src/main/java/com/adityapk/zcash/zqwandroid/DataModel.kt
  2. 22
      app/src/main/java/com/adityapk/zcash/zqwandroid/MainActivity.kt

15
app/src/main/java/com/adityapk/zcash/zqwandroid/DataModel.kt

@ -68,7 +68,9 @@ object DataModel {
*/
}
fun parseResponse(response: String) : Boolean {
data class ParseResponse(val updateTxns: Boolean, val error: String?)
fun parseResponse(response: String) : ParseResponse {
val json = Parser.default().parse(StringBuilder(response)) as JsonObject
// Check if input string is encrypted
@ -76,10 +78,15 @@ object DataModel {
return parseResponse(decrypt(json["nonce"].toString(), json["payload"].toString()))
}
// Check if it has errored out
if (json.containsKey("error")) {
return ParseResponse(false, json["error"].toString())
}
return when (json.string("command")) {
"getInfo" -> {
mainResponseData = Klaxon().parse<MainResponse>(response)
return false
return ParseResponse(false, null)
}
"getTransactions" -> {
transactions = json.array<JsonObject>("transactions").orEmpty().map { tx ->
@ -92,9 +99,9 @@ object DataModel {
tx.string("txid") ?: "",
tx.long("confirmations") ?: 0)
}
return true
return ParseResponse(true, null)
}
else -> false
else -> ParseResponse(false, null)
}
}

22
app/src/main/java/com/adityapk/zcash/zqwandroid/MainActivity.kt

@ -342,6 +342,12 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
updateUI(true)
}
private fun clearConnection() {
Log.i(TAG, "Clearing connection")
connStatus = ConnectionStatus.DISCONNECTED
DataModel.ws?.close(1000, "Forcibly closing connection")
}
private inner class EchoWebSocketListener : WebSocketListener() {
@ -352,8 +358,15 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
override fun onMessage(webSocket: WebSocket?, text: String?) {
Log.i(TAG, "Recieving $text")
updateUI(DataModel.parseResponse(text!!))
Log.i(TAG, "parsed successfully")
val r = DataModel.parseResponse(text!!)
if (r.error == null) {
updateUI(r.updateTxns)
Log.i(TAG, "parsed successfully")
} else {
Snackbar.make(layoutConnect, "Couldn't connect: ${r.error}", Snackbar.LENGTH_LONG).show()
clearConnection()
}
}
override fun onMessage(webSocket: WebSocket?, bytes: ByteString) {
@ -369,11 +382,12 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
Log.e(TAG,"Failed $t")
connStatus = ConnectionStatus.DISCONNECTED
if (t is ConnectException) {
Snackbar.make(layoutConnect, t.localizedMessage, Snackbar.LENGTH_SHORT).show()
}
disconnected()
clearConnection()
}
}

Loading…
Cancel
Save