Example #1
0
 def execute(self):
     # Read packets and process
     while True:
         message, client_addr = self.server_socket.recvfrom(5000)
         
         packet = struct.unpack('IHH' + str(len(message) - 8) + 's', message)
         
         # Drop packet
         if random.random() <= self.packet_drop_probability:
             self.logger.info('Sequence Number %d - Packet Dropped', packet[0])
             continue
         
         self.logger.info('Sequence Number %d - Packet Received', packet[0])
         
         # Verify packet checksum
         if not Checksum.verify(message):
             self.logger.info('Sequence Number %d - Packet is Corrupt', packet[0])
             continue
         
         self.process(packet, client_addr)
    def get_next_ack(self):
        message = self.socket.recv(self.mss)
        packet = struct.unpack('IHH', message)

        # Drop ack based on probability
        if random.random() <= self.packet_drop_probability:
            self.logger.info(
                'Acknowledgement Number %d - Acknowledgement Dropped',
                packet[0])
            return False

        self.logger.info(
            'Acknowledgement Number %d - Acknowledgement Received', packet[0])

        # Packet corrupted, ignore
        if not Checksum.verify(message):
            self.logger.info(
                'Acknowledgement Number %d - Acknowledgement Corrupted',
                packet[0])
            return False

        return packet
Example #3
0
    def startListening(self):
        while True:
            try:
                data, addr = self.serverSock.recvfrom(1024)
                packet = Packet()
                packet.deserializePacket(data)
                # print('addr: ', addr)

                if (self.simulatePacketLoss()):
                    print("Simulating packet loss for packet with seq no: ",
                          packet.seq_num)
                    continue

                if (Checksum.verify(packet.data, packet.checksum)):
                    ack_num, discard = self.protocol.receive_packet(packet)
                    if (discard):
                        print("Discarding packet with sequence number " +
                              str(packet.seq_num))
                    else:
                        print("Received Segment: ", str(packet.seq_num))
                    _ = self.serverSock.sendto(str(ack_num).encode(),
                                               addr)  #sending ack with ack_num
                    print("ACK Sent: ", str(ack_num))
                else:
                    print(
                        "Discarding packet with invalid checksum, packet no: ",
                        packet.seq_num)

            except KeyboardInterrupt:
                print('Interrupted')
                os._exit(0)
            except ConnectionResetError:
                pass  # Do nothing.
            except Exception:
                raise Exception
        return