http://hg.viff.dk/viff/rev/05bcb213270c
changeset: 1169:05bcb213270c
user: Martin Geisler <[email protected]>
date: Tue Apr 21 15:19:57 2009 +0200
summary: Make players ignore bad data.
diffstat:
1 file changed, 17 insertions(+), 15 deletions(-)
viff/runtime.py | 32 +++++++++++++++++---------------
diffs (45 lines):
diff -r 421a199020e9 -r 05bcb213270c viff/runtime.py
--- a/viff/runtime.py Wed Apr 15 11:30:07 2009 +0200
+++ b/viff/runtime.py Tue Apr 21 15:19:57 2009 +0200
@@ -302,24 +302,26 @@
self.transport.loseConnection()
self.factory.identify_peer(self)
else:
- # TODO: We cannot handle the empty string.
- pc_size, data_size, data_type = struct.unpack("!HHB", string[:5])
- fmt = "!%dI%ds" % (pc_size, data_size)
- unpacked = struct.unpack(fmt, string[5:])
+ try:
+ pc_size, data_size, data_type = struct.unpack("!HHB",
string[:5])
+ fmt = "!%dI%ds" % (pc_size, data_size)
+ unpacked = struct.unpack(fmt, string[5:])
- program_counter = unpacked[:pc_size]
- data = unpacked[-1]
+ program_counter = unpacked[:pc_size]
+ data = unpacked[-1]
- key = (program_counter, data_type)
+ key = (program_counter, data_type)
- deq = self.incoming_data.setdefault(key, deque())
- if deq and isinstance(deq[0], Deferred):
- deferred = deq.popleft()
- if not deq:
- del self.incoming_data[key]
- deferred.callback(data)
- else:
- deq.append(data)
+ deq = self.incoming_data.setdefault(key, deque())
+ if deq and isinstance(deq[0], Deferred):
+ deferred = deq.popleft()
+ if not deq:
+ del self.incoming_data[key]
+ deferred.callback(data)
+ else:
+ deq.append(data)
+ except struct.error, e:
+ print "*** bad data: %s" % e
def sendData(self, program_counter, data_type, data):
"""Send data to the peer.
_______________________________________________
viff-commits mailing list
[email protected]
http://lists.viff.dk/listinfo.cgi/viff-commits-viff.dk