Esempio n. 1
0
    def start(self):
        #TODO:if the file size is less than N packets, need to be handled
        # add the first N packets
        for i in range(self.N):
            p = self.get_packet()
            self.window.append(p)
            self.win_tail = self.win_tail + 1
            if self.eof:
                break

        #Send the packets in the window
        self.send_window()
        thread.start_new_thread(self.alram_trigerrer, ())

        while len(self.window) > 0:
            # receive data from client
            data, addr = self.sock.recvfrom(4096)

            #create ACK packet from the received data
            p = Packet.build_packet(data, is_ack=True)

            if (p.seq_num > self.win_head):
                new_pkts = self.update_window(p.seq_num - self.win_head)
                self.win_tail = self.win_tail + new_pkts
                self.win_head = p.seq_num
                self.logger.info("Rcvd ACK %d. Moving forward to %d" %
                                 (p.seq_num, self.win_tail))

            else:
                self.logger.info("Wrong ACK %d rcvd" % (p.seq_num))
                pass