
commit 39262870b9d8741f39ad10b07158020578a0cac7 Author: Arturo Filastò <art@fuffa.org> Date: Sat Nov 24 14:26:22 2012 +0100 Implement sr1 in txscapy --- ooni/utils/txscapy.py | 17 ++++++++++++++++- 1 files changed, 16 insertions(+), 1 deletions(-) diff --git a/ooni/utils/txscapy.py b/ooni/utils/txscapy.py index 2b108ca..d87a7a0 100644 --- a/ooni/utils/txscapy.py +++ b/ooni/utils/txscapy.py @@ -61,6 +61,10 @@ class ScapyProtocol(abstract.FileDescriptor): # twisted.internet.udp to see how this is done. self.receive = receive + # When 0 we stop when all the packets we have sent have received an + # answer + self.expected_answers = 0 + def fileno(self): return self.super_socket.ins.fileno() @@ -71,15 +75,25 @@ class ScapyProtocol(abstract.FileDescriptor): def processAnswer(self, packet, answer_hr): log.debug("Got a packet from %s" % packet.src) + log.debug("%s" % self.__hash__) for i in range(len(answer_hr)): if packet.answers(answer_hr[i]): self.answered_packets.append((answer_hr[i], packet)) if not self.multi: del(answer_hr[i]) break + if len(self.answered_packets) == len(self.sent_packets): - # All of our questions have been answered. + log.debug("All of our questions have been answered.") + log.debug("%s" % self.__hash__) self.stopSending() + return + + if self.expected_answers and \ + self.expected_answers == len(self.answered_packets): + log.debug("Got the number of expected answers") + self.stopSending() + def doRead(self): timeout = time.time() - self._start_time @@ -96,6 +110,7 @@ class ScapyProtocol(abstract.FileDescriptor): self.processAnswer(packet, answer_hr) def stopSending(self): + log.debug("Stopping sending") self.stopReading() self.super_socket.close() if hasattr(self, "d"):