1 ## Copyright 2002-2004 Andrew Loewenstern, All Rights Reserved
2 # see LICENSE.txt for license information
4 from twisted.python import log
6 from node import Node, NULL_ID
9 def checkSender(self, dict):
11 senderid = dict['rsp']['id']
13 log.msg("No peer id in response")
14 raise Exception, "No peer id in response."
16 if self.id != NULL_ID and senderid != self.id:
17 log.msg("Got response from different node than expected.")
18 self.table.invalidateNode(self)
22 def errBack(self, err):
27 df = self.conn.sendRequest('ping', {"id":id})
28 df.addErrback(self.errBack)
29 df.addCallback(self.checkSender)
33 df = self.conn.sendRequest('join', {"id":id})
34 df.addErrback(self.errBack)
35 df.addCallback(self.checkSender)
38 def findNode(self, id, target):
39 df = self.conn.sendRequest('find_node', {"target" : target, "id": id})
40 df.addErrback(self.errBack)
41 df.addCallback(self.checkSender)
44 class KNodeRead(KNodeBase):
45 def findValue(self, id, key):
46 df = self.conn.sendRequest('find_value', {"key" : key, "id" : id})
47 df.addErrback(self.errBack)
48 df.addCallback(self.checkSender)
51 def getValue(self, id, key, num):
52 df = self.conn.sendRequest('get_value', {"key" : key, "num": num, "id" : id})
53 df.addErrback(self.errBack)
54 df.addCallback(self.checkSender)
57 class KNodeWrite(KNodeRead):
58 def storeValue(self, id, key, value, token):
59 df = self.conn.sendRequest('store_value', {"key" : key, "value" : value, "token" : token, "id": id})
60 df.addErrback(self.errBack)
61 df.addCallback(self.checkSender)