Improved node registry so it should provide better nodes
This commit is contained in:
		| @@ -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) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user