def onGet(getOp, err, payload): del obj.getOps[getOp] if err >= 0: result, data, updateLevel, signature = payload if result >= 0: if verifySignature(publicKey, data, updateLevel, signature): obj.getResults.append((data, updateLevel, signature)) if not obj.getOps: if obj.getResults: maxUpdateLevel = max([x[1] for x in obj.getResults]) obj.getResults = [x for x in obj.getResults if x[1] == maxUpdateLevel] op.notify(obj.getResults)
def doPutKey( self, msg, ctx ) : publicKeyData,data,updateLevel,signature = msg if not verifySignature(publicKeyData,data,updateLevel,signature) : return entry = self.store.get( publicKeyData ) if entry is not None : oldData,oldUpdateLevel,oldSignature = entry if updateLevel <= oldUpdateLevel : ctx.response( (-1,oldData,oldUpdateLevel,oldSignature) ) return self.store.set( publicKeyData, data, updateLevel, signature, DEFAULT_DATA_TIMEOUT ) ctx.response( (0,data,updateLevel,signature) )
def doPutKey(self, msg, ctx): publicKeyData, data, updateLevel, signature = msg if not verifySignature(publicKeyData, data, updateLevel, signature): return entry = self.store.get(publicKeyData) if entry is not None: oldData, oldUpdateLevel, oldSignature = entry if updateLevel <= oldUpdateLevel: ctx.response((-1, oldData, oldUpdateLevel, oldSignature)) return self.store.set(publicKeyData, data, updateLevel, signature, DEFAULT_DATA_TIMEOUT) ctx.response((0, data, updateLevel, signature))
def onGet( getOp, err, payload ) : del obj.getOps[getOp] if err >= 0 : result,data,updateLevel,signature = payload if result >= 0 : if verifySignature(publicKey,data,updateLevel,\ signature) : obj.getResults.append( (data,updateLevel, signature) ) if not obj.getOps : if obj.getResults : maxUpdateLevel = max( [x[1] for x in obj.getResults] ) obj.getResults = [x for x in obj.getResults \ if x[1] == maxUpdateLevel] op.notify( obj.getResults )
def onPut(putOp, err, payload): del obj.putOps[putOp] if err >= 0: result, oldData, oldUpdateLevel, oldSignature = payload if result >= 0: obj.successCount += 1 elif oldUpdateLevel >= obj.updateLevel: if verifySignature(rsaKey, oldData, oldUpdateLevel, oldSignature): obj.updateLevel = oldUpdateLevel + 1 cancelPuts() obj.putOps.clear() obj.successCount = 0 obj.signature = computeSignature(rsaKey, data, obj.updateLevel) for nodeAddr in obj.nodes: doPutKey(nodeAddr) if not obj.putOps: doNotify()
def onPut( putOp, err, payload ) : del obj.putOps[putOp] if err >= 0 : result,oldData,oldUpdateLevel,oldSignature = payload if result >= 0 : obj.successCount += 1 elif oldUpdateLevel >= obj.updateLevel : if verifySignature(rsaKey,oldData, oldUpdateLevel,oldSignature) : obj.updateLevel = oldUpdateLevel + 1 cancelPuts() obj.putOps.clear() obj.successCount = 0 obj.signature = computeSignature( rsaKey, data, obj.updateLevel ) for nodeAddr in obj.nodes : doPutKey( nodeAddr ) if not obj.putOps : doNotify()