def __sendCnct(self): #create packet self.log("Creating init packet......\n") try: self.log("Setting flags...\n") flags = (True, False, False, False, False, False) except Exception as e: self.log("Exception: " + str(e)) sys.exit(0) self.log("Flags created...\n") try: cnctPacket = RxPacket.getCnct( srcPort = self.srcRxPPort, desPort = self.desRxPPort, seqNum = self.seqNum, ackNum = self.ackNum, winSize = self.recvWindowSize, ) except Exception as e: self.log("Exception: " + str(e)) sys.exit(0) #increment seq num self.log("Incrementing sequence number......\n") self.seqNum = self.seqNum + 1 #increment by number of bytes (20 byte header only) if self.seqNum > RxPacket.maxSeqNum(): self.seqNum = 0 #transfer packet resetsLeft = self.resetLimit self.log("Entering send loop for CNCT packet......\n") while resetsLeft: self.log("Sending init to IP: " + self.desAddr + " and Port:" + str(self.desUDPPort) +"...\n") try: self.sendto(cnctPacket.toByteArray(), (self.desAddr, self.desUDPPort)) except Exception as e: self.log("Exception while calling sendto: " + str(e) + "\n") self.log("SENT INIT PACKET!\n") try: self.log("Waiting for ack......\n") data, address = self.recvfrom(self.recvWindowSize) log("Packet received successfully, calling reconstructPacket from _sendCNCT...\n") packet = self.__reconstructPacket(data = bytearray(data)) log("Packet successfully reconstructed inside _sendCNCT...\n") if not packet: self.log("Checksum failed......\n") resetsLeft -= 1 continue except socket.timeout: resetsLeft -= 1 except Exception: resetsLeft -= 1 else: if packet.isAck() and packet.header['ackNum'] == self.seqNum: self.log("init has been acked......\n") break else: self.log("Wrong packet recieved, restarting cnct loop......\n") resetsLeft -= 1 if not resetsLeft: self.log("socket timeout......\n") raise Exception('socket timeout') return packet