Exemplo n.º 1
0
    def receive_frag(self, bbuf, dtag):
        # the ack timer can be cancelled here, because it's been done whether
        # both rule_id and dtag in the fragment are matched to this session
        # at process_received_packet().
        self.cancel_ack_wait_timer(
        )  # the timeout is canceled but has to be set
        # when an ack should be received
        self.resend = False
        #
        schc_frag = schcmsg.frag_sender_rx(self.rule, bbuf)
        print(
            "-----------------------  Sender Frag Received -----------------------"
        )
        print("fragment received -> {}".format(schc_frag.__dict__))
        if ((self.rule[T_FRAG][T_FRAG_PROF][T_FRAG_W] is None
             or schc_frag.win == schcmsg.get_win_all_1(self.rule))
                and schc_frag.cbit == 1
                and schc_frag.remaining.allones() == True):
            print(
                "-----------------------  Receiver Abort rid={} dtag={} -----------------------"
                .format(self.rule[T_RULEID], self.dtag))
            #self.resend = False
            self.state = self.RECEIVER_ABORT

            return
        if schc_frag.cbit == 1:
            print(
                "----------------------- ACK Success rid={} dtag={} -----------------------"
                .format(self.rule[T_RULEID], self.dtag))
            #self.resend = False
            self.state = self.ACK_SUCCESS

            try:
                f = open("client_server_simulation.txt", "r+")
            except IOError:
                f = open("client_server_simulation.txt", "w+")
                f = open("client_server_simulation.txt", "r+")
            content = f.read()
            seconds = time.time()
            f.seek(0, 0)
            f.write(str(int(seconds)) + '\n' + content)
            f.close()

            return
        if schc_frag.cbit == 0:
            print(
                "----------------------- ACK Failure rid={} dtag={} -----------------------"
                .format(self.rule[T_RULEID], self.dtag))
            #self.resend = False
            #self.all1_send = False
            self.state = self.ACK_FAILURE
            self.resend_frag(schc_frag)
            return
Exemplo n.º 2
0
 def receive_frag(self, bbuf, dtag):
     # in No-Ack mode, only Receiver Abort message can be acceptable.
     schc_frag = schcmsg.frag_sender_rx(self.rule, bbuf)
     print("sender frag received:", schc_frag.__dict__)
     if ((self.rule["WSize"] is 0
          or schc_frag.win == schcmsg.get_win_all_1(self.rule))
             and schc_frag.cbit == 1
             and schc_frag.remaining.allones() == True):
         print("Receiver Abort rid={} dtag={}".format(
             self.rule.ruleID, self.dtag))
         return
     else:
         print("XXX Unacceptable message has been received.")
Exemplo n.º 3
0
    def receive_frag(self, bbuf, dtag):
        # the ack timer can be cancelled here, because it's been done whether
        # both rule_id and dtag in the fragment are matched to this session
        # at process_received_packet().
        self.cancel_ack_wait_timer(
        )  # the timeout is canceled but has to be set
        # when an ack should be received
        self.resend = False
        #
        schc_frag = schcmsg.frag_sender_rx(self.rule, bbuf)
        print(
            "-----------------------  sender frag received -----------------------"
        )
        print("fragment received -> {}".format(schc_frag.__dict__))
        if ((self.rule["WSize"] is None
             or schc_frag.win == schcmsg.get_win_all_1(self.rule))
                and schc_frag.cbit == 1
                and schc_frag.remaining.allones() == True):
            print(
                "-----------------------  Receiver Abort rid={} dtag={} -----------------------"
                .format(self.rule.ruleID, self.dtag))
            #self.resend = False
            self.state = self.RECEIVER_ABORT

            return
        if schc_frag.cbit == 1:
            print(
                "----------------------- ACK Success rid={} dtag={} -----------------------"
                .format(self.rule.ruleID, self.dtag))
            #self.resend = False
            self.state = self.ACK_SUCCESS
            return
        if schc_frag.cbit == 0:
            print(
                "----------------------- ACK Failure rid={} dtag={} -----------------------"
                .format(self.rule.ruleID, self.dtag))
            #self.resend = False
            #self.all1_send = False
            self.state = self.ACK_FAILURE
            self.resend_frag(schc_frag)
            return
Exemplo n.º 4
0
 def receive_frag(self, bbuf, dtag):
     # the ack timer can be cancelled here, because it's been done whether
     # both rule_id and dtag in the fragment are matched to this session
     # at process_received_packet().
     self.cancel_ack_wait_timer()
     #
     schc_frag = schcmsg.frag_sender_rx(self.rule, bbuf)
     print("sender frag received:", schc_frag.__dict__)
     if ((self.rule["WSize"] is None
          or schc_frag.win == schcmsg.get_win_all_1(self.rule))
             and schc_frag.cbit == 1
             and schc_frag.remaining.allones() == True):
         print("Receiver Abort rid={} dtag={}".format(
             self.rule.ruleID, self.dtag))
         return
     if schc_frag.cbit == 1:
         print("ACK Success rid={} dtag={}".format(self.rule.ruleID,
                                                   self.dtag))
         return
     if schc_frag.cbit == 0:
         print("ACK Failure rid={} dtag={}".format(self.rule.ruleID,
                                                   self.dtag))
         self.resend_frag(schc_frag)
         return