Improved node registry so it should provide better nodes
This commit is contained in:
parent
072f732924
commit
33e932e630
@ -82,8 +82,8 @@ class SettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedP
|
|||||||
|
|
||||||
doAsync {
|
doAsync {
|
||||||
val bmc = Singleton.getBitmessageContext(ctx)
|
val bmc = Singleton.getBitmessageContext(ctx)
|
||||||
bmc.cleanup()
|
|
||||||
bmc.internals.nodeRegistry.clear()
|
bmc.internals.nodeRegistry.clear()
|
||||||
|
bmc.cleanup()
|
||||||
Preferences.cleanupExportDirectory(ctx)
|
Preferences.cleanupExportDirectory(ctx)
|
||||||
|
|
||||||
uiThread {
|
uiThread {
|
||||||
|
@ -11,9 +11,11 @@ import ch.dissem.bitmessage.ports.NodeRegistryHelper.loadStableNodes
|
|||||||
import ch.dissem.bitmessage.utils.Collections
|
import ch.dissem.bitmessage.utils.Collections
|
||||||
import ch.dissem.bitmessage.utils.SqlStrings
|
import ch.dissem.bitmessage.utils.SqlStrings
|
||||||
import ch.dissem.bitmessage.utils.Strings.hex
|
import ch.dissem.bitmessage.utils.Strings.hex
|
||||||
|
import ch.dissem.bitmessage.utils.UnixTime
|
||||||
import ch.dissem.bitmessage.utils.UnixTime.DAY
|
import ch.dissem.bitmessage.utils.UnixTime.DAY
|
||||||
import ch.dissem.bitmessage.utils.UnixTime.MINUTE
|
import ch.dissem.bitmessage.utils.UnixTime.MINUTE
|
||||||
import ch.dissem.bitmessage.utils.UnixTime.now
|
import ch.dissem.bitmessage.utils.UnixTime.now
|
||||||
|
import ch.dissem.bitmessage.utils.max
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.concurrent.getOrSet
|
import kotlin.concurrent.getOrSet
|
||||||
@ -132,7 +134,14 @@ class AndroidNodeRegistry(private val sql: SqlHelper) : NodeRegistry {
|
|||||||
values.put(COLUMN_ADDRESS, node.IPv6)
|
values.put(COLUMN_ADDRESS, node.IPv6)
|
||||||
values.put(COLUMN_PORT, node.port)
|
values.put(COLUMN_PORT, node.port)
|
||||||
values.put(COLUMN_SERVICES, node.services)
|
values.put(COLUMN_SERVICES, node.services)
|
||||||
values.put(COLUMN_TIME, node.time)
|
values.put(COLUMN_TIME,
|
||||||
|
if (node.time > UnixTime.now) {
|
||||||
|
// This might be an attack, let's not use those nodes with priority
|
||||||
|
UnixTime.now - 7 * UnixTime.DAY
|
||||||
|
} else {
|
||||||
|
node.time
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
sql.writableDatabase.insertOrThrow(TABLE_NAME, null, values)
|
sql.writableDatabase.insertOrThrow(TABLE_NAME, null, values)
|
||||||
} catch (e: SQLiteConstraintException) {
|
} catch (e: SQLiteConstraintException) {
|
||||||
@ -140,12 +149,19 @@ class AndroidNodeRegistry(private val sql: SqlHelper) : NodeRegistry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun update(node: NetworkAddress) {
|
override fun update(node: NetworkAddress) {
|
||||||
try {
|
try {
|
||||||
|
val time = if (node.time > UnixTime.now) {
|
||||||
|
// This might be an attack, let's not use those nodes with priority
|
||||||
|
UnixTime.now - 7 * UnixTime.DAY
|
||||||
|
} else {
|
||||||
|
node.time
|
||||||
|
}
|
||||||
|
|
||||||
// Create a new map of values, where column names are the keys
|
// Create a new map of values, where column names are the keys
|
||||||
val values = ContentValues()
|
val values = ContentValues()
|
||||||
values.put(COLUMN_SERVICES, node.services)
|
values.put(COLUMN_SERVICES, node.services)
|
||||||
values.put(COLUMN_TIME, node.time)
|
values.put(COLUMN_TIME, max(node.time, time))
|
||||||
|
|
||||||
sql.writableDatabase.update(
|
sql.writableDatabase.update(
|
||||||
TABLE_NAME,
|
TABLE_NAME,
|
||||||
@ -158,6 +174,30 @@ class AndroidNodeRegistry(private val sql: SqlHelper) : NodeRegistry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun remove(node: NetworkAddress) {
|
||||||
|
try {
|
||||||
|
sql.writableDatabase.delete(
|
||||||
|
TABLE_NAME,
|
||||||
|
"stream=${node.stream} AND address=X'${hex(node.IPv6)}' AND port=${node.port}",
|
||||||
|
null
|
||||||
|
)
|
||||||
|
} catch (e: SQLiteConstraintException) {
|
||||||
|
LOG.trace(e.message, e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun cleanup() {
|
||||||
|
try {
|
||||||
|
sql.writableDatabase.delete(
|
||||||
|
TABLE_NAME,
|
||||||
|
"time<${UnixTime.now - 8 * DAY}",
|
||||||
|
null
|
||||||
|
)
|
||||||
|
} catch (e: SQLiteConstraintException) {
|
||||||
|
LOG.trace(e.message, e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val LOG = LoggerFactory.getLogger(AndroidInventory::class.java)
|
private val LOG = LoggerFactory.getLogger(AndroidInventory::class.java)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user