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
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.")
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
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