Changeset - 44cf81f3b6b8
[Not reviewed]
default
0 1 0
Laman - 8 years ago 2017-10-01 20:35:44

server can also serve data blocks
1 file changed with 25 insertions and 12 deletions:
0 comments (0 inline, 0 general)
src/server.py
Show inline comments
 
@@ -41,7 +41,7 @@ class Server:
 
		self._ss.bind(("", conf.port))
 
		self._ss.listen(1)
 

	
 
		self._lastWrite=-1
 
		self._lastIndex=-1
 
		self._dataFile=None
 

	
 
	def serve(self):
 
@@ -62,7 +62,10 @@ class Server:
 
			outcoming.writeMsg({"command": "ack"})
 

	
 
		elif jsonData["command"]=="req":
 
			outcoming.writeMsg(*self._requestHash(jsonData))
 
			if jsonData["dataType"]=="data":
 
				outcoming.writeMsg(*self._requestData(jsonData["index"]))
 
			else:
 
				outcoming.writeMsg(*self._requestHash(jsonData["index"]))
 

	
 
		elif jsonData["command"]=="send" and jsonData["dataType"]=="data":
 
			outcoming.writeMsg(*self._receiveData(jsonData,binData))
 
@@ -76,13 +79,23 @@ class Server:
 

	
 
		return True
 

	
 
	def _requestHash(self,jsonData):
 
		log.info("received request for node #{0}".format(jsonData["index"]))
 
		assert jsonData["index"]<len(self._tree.store)
 
		nodeHash=self._tree.store[jsonData["index"]]
 
	def _requestHash(self,index):
 
		log.info("received request for node #{0}".format(index))
 
		assert index<len(self._tree.store)
 
		nodeHash=self._tree.store[index]
 

	
 
		jsonResponse={"command":"send", "index":index, "dataType":"hash"}
 
		binResponse=nodeHash
 

	
 
		jsonResponse={"command":"send", "index":jsonData["index"], "dataType":"hash"}
 
		binResponse=nodeHash
 
		return (jsonResponse,binResponse)
 

	
 
	def _requestData(self,index):
 
		log.info("received request for data block #{0}".format(index))
 

	
 
		jsonResponse={"command":"send", "index":index, "dataType":"data"}
 
		if self._lastIndex+1!=index:
 
			self._dataFile.seek(index*self.BLOCK_SIZE)
 
		binResponse=self._dataFile.read(self.BLOCK_SIZE)
 

	
 
		return (jsonResponse,binResponse)
 

	
 
@@ -92,12 +105,12 @@ class Server:
 
		if not self._dataFile:
 
			self._dataFile=open(self._filename, mode="rb+")
 
		i=jsonData["index"]
 
		if self._lastWrite+1!=i:
 
			self._dataFile.seek(i * self.BLOCK_SIZE)
 
		if self._lastIndex+1!=i:
 
			self._dataFile.seek(i*self.BLOCK_SIZE)
 
		self._dataFile.write(binData)
 
		self._lastWrite=i
 
		self._lastIndex=i
 
		if self._treeFile:
 
			self._newLeaves[i + self._tree.leafStart]= hashlib.sha256(binData).digest()[HashTree.HASH_LEN:]
 
			self._newLeaves[i+self._tree.leafStart]=hashlib.sha256(binData).digest()[HashTree.HASH_LEN:]
 

	
 
		return ({"command": "ack", "index": i},)
 

	
0 comments (0 inline, 0 general)