mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-04 07:55:18 +00:00
update from trunk
git-svn-id: svn://bind10.isc.org/svn/bind10/branches/f2f200910@153 e5f2f494-b856-4b98-b285-d166d9295462
This commit is contained in:
@@ -20,6 +20,7 @@ import struct
|
|||||||
import Message
|
import Message
|
||||||
|
|
||||||
class ProtocolError(Exception): pass
|
class ProtocolError(Exception): pass
|
||||||
|
class NetworkError(Exception): pass
|
||||||
class SessionError(Exception): pass
|
class SessionError(Exception): pass
|
||||||
|
|
||||||
class Session:
|
class Session:
|
||||||
@@ -73,8 +74,8 @@ class Session:
|
|||||||
data = self._socket.recv(length)
|
data = self._socket.recv(length)
|
||||||
except:
|
except:
|
||||||
return None
|
return None
|
||||||
if not data: # server closed connection
|
if data == "": # server closed connection
|
||||||
return None
|
raise ProtocolError("Read of 0 bytes: connection closed")
|
||||||
|
|
||||||
self._recvbuffer += data
|
self._recvbuffer += data
|
||||||
if len(self._recvbuffer) < 4:
|
if len(self._recvbuffer) < 4:
|
||||||
@@ -84,7 +85,12 @@ class Session:
|
|||||||
|
|
||||||
length = self._recvlength - len(self._recvbuffer)
|
length = self._recvlength - len(self._recvbuffer)
|
||||||
while (length > 0):
|
while (length > 0):
|
||||||
data = self._socket.recv(length)
|
try:
|
||||||
|
data = self._socket.recv(length)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
if data == "": # server closed connection
|
||||||
|
raise ProtocolError("Read of 0 bytes: connection closed")
|
||||||
self._recvbuffer += data
|
self._recvbuffer += data
|
||||||
length -= len(data)
|
length -= len(data)
|
||||||
data = self._recvbuffer
|
data = self._recvbuffer
|
||||||
@@ -112,15 +118,17 @@ class Session:
|
|||||||
})
|
})
|
||||||
|
|
||||||
def group_sendmsg(self, msg, group, instance = "*", to = "*"):
|
def group_sendmsg(self, msg, group, instance = "*", to = "*"):
|
||||||
|
seq = self._next_sequence()
|
||||||
self.sendmsg({
|
self.sendmsg({
|
||||||
"type": "send",
|
"type": "send",
|
||||||
"from": self._lname,
|
"from": self._lname,
|
||||||
"to": to,
|
"to": to,
|
||||||
"group": group,
|
"group": group,
|
||||||
"instance": instance,
|
"instance": instance,
|
||||||
"seq": self._next_sequence(),
|
"seq": seq,
|
||||||
"msg": Message.to_wire(msg),
|
"msg": Message.to_wire(msg),
|
||||||
})
|
})
|
||||||
|
return seq
|
||||||
|
|
||||||
def group_recvmsg(self, nonblock = True):
|
def group_recvmsg(self, nonblock = True):
|
||||||
msg = self.recvmsg(nonblock)
|
msg = self.recvmsg(nonblock)
|
||||||
@@ -129,6 +137,20 @@ class Session:
|
|||||||
data = Message.from_wire(msg["msg"])
|
data = Message.from_wire(msg["msg"])
|
||||||
return (data, msg)
|
return (data, msg)
|
||||||
|
|
||||||
|
def group_reply(self, routing, msg):
|
||||||
|
seq = self._next_sequence()
|
||||||
|
self.sendmsg({
|
||||||
|
"type": "send",
|
||||||
|
"from": self._lname,
|
||||||
|
"to": routing["from"],
|
||||||
|
"group": routing["group"],
|
||||||
|
"instance": routing["instance"],
|
||||||
|
"seq": seq,
|
||||||
|
"reply": routing["seq"],
|
||||||
|
"msg": Message.to_wire(msg),
|
||||||
|
})
|
||||||
|
return seq
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import doctest
|
import doctest
|
||||||
doctest.testmod()
|
doctest.testmod()
|
||||||
|
Reference in New Issue
Block a user