úÎ3/0ª     None %Holds the configuration of a channel.[The UDP Socket from Network.Socket that the channel will use to send and receive messages.DPicoseconds after a package is re-send if no ACK for it is received.VTimes that the same package can be re-sended without ACK after considerating it lost.YFunction used to determinate if accept or not incomming packages from the given address._Max bytes that can be sent on this channel packages, larger packages will throw and exception.ˆTime that a received and delivired package will remain on memory in order to avoid duplicated receptions. The packages will be stored )recvRetention *resendTimeout * maxResendsY picoseconds after reception and after that, will be freed on the next getReceived call.(Queues a message that has been received.•Informs the ChannelStatus that it no longer needs to store the package from the address with the given id , since it was ACKed from the remote host.3Puts a new message to be sent on the ChannelStatus.’Receives the current CPUTime and a ChannelStatus, returns the messages to be sent and updates the ChannelStatus, assuming that they will be sent.ŠReceives the current CPUTime and a ChannelStatus, returns the messages that can be delivered and cleans the old ones that where retained.! !"#$%&'( !"#$%&   !"#$%&'(Safe)5Parses an unsigned Int from Word8's in little endian.*5Converts an unsigned Int to Word8's in little endian.+Returns the type of message (a for acknowledged, m for message or ?@ for unknown), it's identification label and the data on it.,-)*.+,-)*.+,-)*.+%Main module of the SecureUDP package.$(c) Francisco Casas Barrientos, 2017MITfranciscojacb@gmail.com experimentalPOSIXNone ¶Represents the status of a channel, also holds, internally, information about the threads that it uses. After a channel is created, it is used as an argument for the main functions. ;The configuration that was used to start the given channel. GGet the received messages and their sender addresses, then erases them.bIt's important that your program calls this once in a while or the packages will remain in memory. yGet the messages that weren't ACKed from the target recipent host and erases them. Useful to detect missing connections.gIt's also important that your program calls this once in a while or the packages will remain in memory. XTrought the given channel, send packages to the given addresses and message bytestrings.Returns False" if the channel has being closed, True otherwise. ~Starts a sending and a receiving threads for the protocol, returns a channel that can be used to insert and extract messages.ZTerminates a channel, ending its threads and making it unable to send or receive messages.+Check if the given channel has been closed./BExecution that sends messages (if there are on the ChannelStatus).08Execution that receives messages and returns their ACKs.  /0     /01      !"#$%&'()*+,-./012secur_EDpmbiiXylS5i0kGZ5nfkG SecureUDPChannel Auxiliars ChannelConfigsocket resendTimeout maxResendsallowed maxPacketSize recvRetention ChannelSt channelConf getReceivedgetLoss sendMessages startChannel closeChannel checkClosed receiveMsg registerACKqueueMsgnextForSendingnextForDeliverMessagemsgIdaddressstringlastSendresends ChannelStatusnextIdsentMsgs unsentMsgsrecvMsgs deliveredMsgsreceivingThread sendingThreadclosed emptyChannel $fOrdMessage $fEqMessageparseIntdataIntbstrKind char2word8 word82chardataInt'sendingChannelreceptionChannel