Fixed race condition and missing returns.

This commit is contained in:
Felix Ableitner 2015-09-11 02:17:21 +02:00
parent 5aef929229
commit f695508fdd
1 changed files with 8 additions and 6 deletions

View File

@ -188,25 +188,27 @@ class ChatService extends Service {
getResources.getString(R.string.default_max_connections)).toInt getResources.getString(R.string.default_max_connections)).toInt
if (connections().size == maxConnections) { if (connections().size == maxConnections) {
Log.i(Tag, "Maximum number of connections reached") Log.i(Tag, "Maximum number of connections reached")
false return false
} }
val info = msg.body.asInstanceOf[ConnectionInfo] val info = msg.body.asInstanceOf[ConnectionInfo]
val sender = crypto.calculateAddress(info.key) val sender = crypto.calculateAddress(info.key)
if (sender == Address.Broadcast || sender == Address.Null) { if (sender == Address.Broadcast || sender == Address.Null) {
Log.i(Tag, "Ignoring ConnectionInfo message with invalid sender " + sender) Log.i(Tag, "Ignoring ConnectionInfo message with invalid sender " + sender)
false return false
} }
if (crypto.havePublicKey(sender) && !crypto.verify(msg, crypto.getPublicKey(sender))) { if (crypto.havePublicKey(sender) && !crypto.verify(msg, crypto.getPublicKey(sender))) {
Log.i(Tag, "Ignoring ConnectionInfo message with invalid signature") Log.i(Tag, "Ignoring ConnectionInfo message with invalid signature")
false return false
} }
synchronized {
if (!crypto.havePublicKey(sender)) { if (!crypto.havePublicKey(sender)) {
crypto.addPublicKey(sender, info.key) crypto.addPublicKey(sender, info.key)
Log.i(Tag, "Added public key for new device " + sender.toString) Log.i(Tag, "Added public key for new device " + sender.toString)
} }
}
Log.i(Tag, "Node " + sender + " connected") Log.i(Tag, "Node " + sender + " connected")
sendTo(sender, new UserInfo(preferences.getString(SettingsFragment.KeyUserName, ""), sendTo(sender, new UserInfo(preferences.getString(SettingsFragment.KeyUserName, ""),