Skip to content

Commit 738d6af

Browse files
Merge pull request #2124 from celzero/copilot/fix-2123
Add IP statistics functionality to group apps by allowed and blocked IPs
2 parents cf65d98 + 0f9fc8a commit 738d6af

File tree

4 files changed

+58
-22
lines changed

4 files changed

+58
-22
lines changed

app/src/full/java/com/celzero/bravedns/adapter/SummaryStatisticsAdapter.kt

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -447,30 +447,13 @@ class SummaryStatisticsAdapter(
447447
startDomainConnectionsActivity(appConnection, DomainConnectionsActivity.InputType.DOMAIN)
448448
}
449449
SummaryStatisticsType.MOST_BLOCKED_DOMAINS -> {
450-
io {
451-
val isDnsBypassed = FirewallManager.isAnyAppBypassesDns()
452-
uiCtx {
453-
if (appConfig.getBraveMode().isDnsMode()) {
454-
showDnsLogs(appConnection)
455-
}
456-
// if any app bypasses dns, then the decision made in flow() call
457-
// will be to show the network logs. Else, show the dns logs.
458-
if (isDnsBypassed) {
459-
showNetworkLogs(
460-
appConnection,
461-
SummaryStatisticsType.MOST_BLOCKED_DOMAINS
462-
)
463-
} else {
464-
showDnsLogs(appConnection)
465-
}
466-
}
467-
}
450+
startDomainConnectionsActivity(appConnection, DomainConnectionsActivity.InputType.DOMAIN, true)
468451
}
469452
SummaryStatisticsType.MOST_CONTACTED_IPS -> {
470-
showNetworkLogs(appConnection, SummaryStatisticsType.MOST_CONTACTED_IPS)
453+
startDomainConnectionsActivity(appConnection, DomainConnectionsActivity.InputType.IP)
471454
}
472455
SummaryStatisticsType.MOST_BLOCKED_IPS -> {
473-
showNetworkLogs(appConnection, SummaryStatisticsType.MOST_BLOCKED_IPS)
456+
startDomainConnectionsActivity(appConnection, DomainConnectionsActivity.InputType.IP, true)
474457
}
475458
SummaryStatisticsType.MOST_CONTACTED_COUNTRIES -> {
476459
startDomainConnectionsActivity(appConnection, DomainConnectionsActivity.InputType.FLAG)
@@ -485,7 +468,7 @@ class SummaryStatisticsAdapter(
485468
when (input) {
486469
DomainConnectionsActivity.InputType.DOMAIN -> {
487470
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_DOMAIN, appConnection.appOrDnsName)
488-
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_IS_BLOCKED, false)
471+
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_IS_BLOCKED, isBlocked)
489472
}
490473
DomainConnectionsActivity.InputType.ASN -> {
491474
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_ASN, appConnection.appOrDnsName)
@@ -494,6 +477,10 @@ class SummaryStatisticsAdapter(
494477
DomainConnectionsActivity.InputType.FLAG -> {
495478
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_FLAG, appConnection.flag)
496479
}
480+
DomainConnectionsActivity.InputType.IP -> {
481+
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_IP, appConnection.ipAddress)
482+
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_IS_BLOCKED, isBlocked)
483+
}
497484
}
498485
intent.putExtra(DomainConnectionsActivity.INTENT_EXTRA_TIME_CATEGORY, timeCategory.value)
499486
context.startActivity(intent)

app/src/full/java/com/celzero/bravedns/ui/activity/DomainConnectionsActivity.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,13 @@ class DomainConnectionsActivity : AppCompatActivity(R.layout.activity_domain_con
5252
const val INTENT_EXTRA_FLAG = "FLAG"
5353
const val INTENT_EXTRA_DOMAIN = "DOMAIN"
5454
const val INTENT_EXTRA_ASN = "ASN"
55+
const val INTENT_EXTRA_IP = "IP"
5556
const val INTENT_EXTRA_IS_BLOCKED = "IS_BLOCKED"
5657
const val INTENT_EXTRA_TIME_CATEGORY = "TIME_CATEGORY"
5758
}
5859

5960
enum class InputType(val type: Int) {
60-
DOMAIN(0), FLAG(1), ASN(2);
61+
DOMAIN(0), FLAG(1), ASN(2), IP(3);
6162
}
6263

6364
override fun onCreate(savedInstanceState: Bundle?) {
@@ -90,6 +91,12 @@ class DomainConnectionsActivity : AppCompatActivity(R.layout.activity_domain_con
9091
viewModel.setAsn(asn, isBlocked)
9192
b.dcTitle.text = asn
9293
}
94+
InputType.IP -> {
95+
val ip = intent.getStringExtra(INTENT_EXTRA_IP) ?: ""
96+
val isBlocked = intent.getBooleanExtra(INTENT_EXTRA_IS_BLOCKED, false)
97+
viewModel.setIp(ip, isBlocked)
98+
b.dcTitle.text = ip
99+
}
93100
}
94101
val tc = intent.getIntExtra(INTENT_EXTRA_TIME_CATEGORY, 0)
95102
val timeCategory =
@@ -149,6 +156,9 @@ class DomainConnectionsActivity : AppCompatActivity(R.layout.activity_domain_con
149156
InputType.ASN -> {
150157
viewModel.asnConnectionList
151158
}
159+
InputType.IP -> {
160+
viewModel.ipConnectionList
161+
}
152162
}
153163

154164
liveData.observe(this) { recyclerAdapter.submitData(this.lifecycle, it) }

app/src/full/java/com/celzero/bravedns/viewmodel/DomainConnectionsViewModel.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class DomainConnectionsViewModel(private val statsDao: StatsSummaryDao) : ViewMo
3030
private var domains: MutableLiveData<String> = MutableLiveData()
3131
private var asn: MutableLiveData<String> = MutableLiveData()
3232
private var flag: MutableLiveData<String> = MutableLiveData()
33+
private var ip: MutableLiveData<String> = MutableLiveData()
3334
private var timeCategory: TimeCategory = TimeCategory.ONE_HOUR
3435
private var startTime: MutableLiveData<Long> = MutableLiveData()
3536
private var isBlocked: Boolean = false
@@ -56,6 +57,7 @@ class DomainConnectionsViewModel(private val statsDao: StatsSummaryDao) : ViewMo
5657
domains.postValue("")
5758
asn.postValue("")
5859
flag.postValue("")
60+
ip.postValue("")
5961
}
6062

6163
fun setDomain(domain: String, isBlocked: Boolean) {
@@ -72,6 +74,11 @@ class DomainConnectionsViewModel(private val statsDao: StatsSummaryDao) : ViewMo
7274
this.asn.postValue(asn)
7375
}
7476

77+
fun setIp(ip: String, isBlocked: Boolean) {
78+
this.isBlocked = isBlocked
79+
this.ip.postValue(ip)
80+
}
81+
7582
fun timeCategoryChanged(tc: TimeCategory) {
7683
timeCategory = tc
7784
when (tc) {
@@ -88,6 +95,7 @@ class DomainConnectionsViewModel(private val statsDao: StatsSummaryDao) : ViewMo
8895
asn.value = ""
8996
flag.value = ""
9097
domains.value = ""
98+
ip.value = ""
9199
}
92100

93101
val domainConnectionList = domains.switchMap { input ->
@@ -102,6 +110,10 @@ class DomainConnectionsViewModel(private val statsDao: StatsSummaryDao) : ViewMo
102110
fetchAsnConnections(input)
103111
}
104112

113+
val ipConnectionList = ip.switchMap { input ->
114+
fetchIpConnections(input)
115+
}
116+
105117
private fun fetchDomainConnections(input: String) =
106118
Pager(PagingConfig(pageSize = Constants.LIVEDATA_PAGE_SIZE)) {
107119
statsDao.getDomainDetails(input, startTime.value!!, isBlocked)
@@ -120,4 +132,9 @@ class DomainConnectionsViewModel(private val statsDao: StatsSummaryDao) : ViewMo
120132
statsDao.getAsnDetails(input, startTime.value!!)
121133
}
122134
}.liveData.cachedIn(viewModelScope)
135+
136+
private fun fetchIpConnections(input: String) =
137+
Pager(PagingConfig(pageSize = Constants.LIVEDATA_PAGE_SIZE)) {
138+
statsDao.getIpDetails(input, startTime.value!!, isBlocked)
139+
}.liveData.cachedIn(viewModelScope)
123140
}

app/src/main/java/com/celzero/bravedns/database/StatsSummaryDao.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -981,4 +981,26 @@ interface StatsSummaryDao {
981981
"""
982982
)
983983
fun getAllDomainsByUid(uid: Int, to: Long): PagingSource<Int, AppConnection>
984+
985+
@Query(
986+
"""
987+
SELECT uid AS uid,
988+
ipAddress AS ipAddress,
989+
0 AS port,
990+
COUNT(id) AS count,
991+
flag AS flag,
992+
isBlocked AS blocked,
993+
appName AS appOrDnsName,
994+
SUM(uploadBytes) AS uploadBytes,
995+
SUM(downloadBytes) AS downloadBytes,
996+
SUM(downloadBytes + uploadBytes) AS totalBytes
997+
FROM ConnectionTracker
998+
WHERE timeStamp > :to
999+
AND ipAddress = :ip
1000+
AND isBlocked = :isBlocked
1001+
GROUP BY uid
1002+
ORDER BY count DESC
1003+
"""
1004+
)
1005+
fun getIpDetails(ip: String, to: Long, isBlocked: Boolean): PagingSource<Int, AppConnection>
9841006
}

0 commit comments

Comments
 (0)