From 8419734df8ccc632d1e2fb55d228b405dacf8b86 Mon Sep 17 00:00:00 2001 From: Mygod Date: Tue, 2 Oct 2018 22:36:45 +0800 Subject: [PATCH] Ignore extra records coming later This can happen when the application is terminated incorrectly. Due to how we add routing rules, new client-wise rules are always added to the top. Therefore, we should always assume that the input at the top is the correct one. --- .../mygod/vpnhotspot/net/TrafficRecorder.kt | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/TrafficRecorder.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/TrafficRecorder.kt index 0a83187d..16e52a72 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/TrafficRecorder.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/TrafficRecorder.kt @@ -88,13 +88,21 @@ object TrafficRecorder { ip = ip, upstream = upstream, downstream = downstream, + sentPackets = -1, + sentBytes = -1, + receivedPackets = -1, + receivedBytes = -1, previousId = oldRecord.id) if (isReceive) { - record.receivedPackets = columns[0].toLong() - record.receivedBytes = columns[1].toLong() + if (record.receivedPackets == -1L && record.receivedBytes == -1L) { + record.receivedPackets = columns[0].toLong() + record.receivedBytes = columns[1].toLong() + } } else { - record.sentPackets = columns[0].toLong() - record.sentBytes = columns[1].toLong() + if (record.sentPackets == -1L && record.sentBytes == -1L) { + record.sentPackets = columns[0].toLong() + record.sentBytes = columns[1].toLong() + } } if (oldRecord.id != null) { check(records.put(key, record) == oldRecord) @@ -109,7 +117,13 @@ object TrafficRecorder { Crashlytics.logException(e) } } - for ((_, record) in records) if (record.id == null) AppDatabase.instance.trafficRecordDao.insert(record) + for ((_, record) in records) if (record.id == null) { + check(record.sentPackets >= 0) + check(record.sentBytes >= 0) + check(record.receivedPackets >= 0) + check(record.receivedBytes >= 0) + AppDatabase.instance.trafficRecordDao.insert(record) + } foregroundListeners(records.values, oldRecords) scheduleUpdateLocked() }