def send(self, server): """ Overriden send method @param server: SWAP server object to be used for transmission """ self.srcAddress = server.devaddress self.data[1] = self.srcAddress # Update security option according to server's one self.security = server.security self.data[2] |= self.security & 0x0F # Keep copy of the current packet before encryption packet_before_encrypt = copy.copy(self) # Smart encryption enabled? if self.security & 0x02: # Encrypt packet self.smart_encryption(server.password) # AES-128 encryption enabled? elif self.security & 0x04: # Encrypt packet self.aes_encryption(server.password) CcPacket.send(self, server.modem) # Notify event server._eventHandler.swapPacketSent(packet_before_encrypt)
def send(self, server): """ Overriden send method @param server: SWAP server object to be used for transmission """ self.srcAddress = server.devaddress self.data[1] = self.srcAddress # Update security option according to server's one self.security = server.security self.data[2] |= self.security & 0x0F # Keep copy of the current packet before encryption packet_before_encrypt = copy.copy(self) # Smart encryption enabled? if self.security & 0x02: # Encrypt packet self.smart_encryption(server.password) # AES-128 encryption enabled? elif self.security & 0x04: # Encrypt packet self.aes_encryption(server.password) CcPacket.send(self, server.modem) # Notify event server._eventHandler.swapPacketSent(packet_before_encrypt)
def write(self, text): """ Add new line into the log window @param text: Text string to be displayed in the log window """ if text: if len( text ) > 1: # Condition added to avoid printing single white spaces msg = None image = None if text.startswith("Rved: "): if len(text) > 20: if text[6] == '(' and text[12] == ')': image = self.arrow_left_icon elif text.startswith("Sent: "): image = self.arrow_right_icon elif text.startswith("SwapException occurred: "): msgtype = "ERROR" msg = text[24:] image = self.warning_icon if image in [self.arrow_left_icon, self.arrow_right_icon]: text = text[6:] try: ccpacket = CcPacket(text) swpacket = SwapPacket(ccpacket) if swpacket.function == SwapFunction.COMMAND: msgtype = "command" elif swpacket.function == SwapFunction.QUERY: msgtype = "query" if swpacket.function == SwapFunction.STATUS: msgtype = "status" else: msgtype = "?????" msg = swpacket.toString() except SwapException: pass if msg is not None: index = self.log_list.GetItemCount() self.log_list.InsertStringItem(index, str(time.time())) self.log_list.SetStringItem(index, 1, msgtype) self.log_list.SetStringItem(index, 2, msg) self.log_list.SetItemImage(index, image) self.log_list.EnsureVisible(index)
def __init__(self, ccPacket=None, destAddr=SwapAddress.BROADCAST_ADDR, hop=0, nonce=0, function=SwapFunction.STATUS, regAddr=0, regId=0, value=None, extended_addr=False): """ Class constructor @param ccPacket: Raw CcPacket where to take the information from @param destAddr: Destination address @param hop: Transmission hop count @param nonce: Security nonce @param function: SWAP function code (see SwapDefs.SwapFunction for more details) @param regAddr: Register address (address of the mote where the register really resides) @param regId: Register ID @param value: Register value """ CcPacket.__init__(self) ## Extended address disabled by default self.extended_address = extended_addr ## Destination address self.destAddress = destAddr ## Source address self.srcAddress = regAddr ## Hop count for repeating purposes self.hop = hop ## Security option self.security = 0 ## Security nonce self.nonce = nonce ## Function code self.function = function ## Register address self.regAddress = regAddr ## Register ID self.regId = regId ## SWAP value self.value = value if ccPacket is not None: if len(ccPacket.data) < 7: raise SwapException("Packet received is too short") # Hop count for repeating purposes self.hop = (ccPacket.data[2] >> 4) & 0x0F # Security option self.security = ccPacket.data[2] & 0x0F # Security nonce self.nonce = ccPacket.data[3] # Superclass attributes ## RSSI byte self.rssi = ccPacket.rssi ## LQI byte self.lqi = ccPacket.lqi ## CcPacket data field self.data = ccPacket.data # Smart Encryption enabled? if self.security & 0x02 and SwapPacket.smart_encrypt_pwd is not None: # Decrypt packet self.smart_encryption(SwapPacket.smart_encrypt_pwd, decrypt=True) # AES-128 Encryption enabled? elif self.security & 0x04 and SwapPacket.aes_encrypt_pwd is not None: # Decrypt packet self.aes_encryption(SwapPacket.aes_encrypt_pwd, decrypt=True) elif self.security & 0x06: return # Function code self.function = ccPacket.data[4] & 0x7F # Extended address indicator self.extended_address = (ccPacket.data[4] & 0x80) != 0 if self.extended_address: # Destination address self.destAddress = (ccPacket.data[0] << 8) | ccPacket.data[1] # Source address self.srcAddress = (ccPacket.data[5] << 8) | ccPacket.data[6] # Register address self.regAddress = (ccPacket.data[7] << 8) | ccPacket.data[8] # Register ID self.regId = ccPacket.data[9] # Register value if len(ccPacket.data) >= 11: self.value = SwapValue(ccPacket.data[10:]) else: # Destination address self.destAddress = ccPacket.data[0] # Source address self.srcAddress = ccPacket.data[1] # Register address self.regAddress = ccPacket.data[5] # Register ID self.regId = ccPacket.data[6] # Register value if len(ccPacket.data) >= 8: self.value = SwapValue(ccPacket.data[7:]) else: self._update_ccdata()
def __init__(self, ccPacket=None, destAddr=SwapAddress.BROADCAST_ADDR, hop=0, nonce=0, function=SwapFunction.STATUS, regAddr=0, regId=0, value=None, extended_addr=False): """ Class constructor @param ccPacket: Raw CcPacket where to take the information from @param destAddr: Destination address @param hop: Transmission hop count @param nonce: Security nonce @param function: SWAP function code (see SwapDefs.SwapFunction for more details) @param regAddr: Register address (address of the mote where the register really resides) @param regId: Register ID @param value: Register value """ CcPacket.__init__(self) ## Extended address disabled by default self.extended_address = extended_addr ## Destination address self.destAddress = destAddr ## Source address self.srcAddress = regAddr ## Hop count for repeating purposes self.hop = hop ## Security option self.security = 0 ## Security nonce self.nonce = nonce ## Function code self.function = function ## Register address self.regAddress = regAddr ## Register ID self.regId = regId ## SWAP value self.value = value if ccPacket is not None: if len(ccPacket.data) < 7: raise SwapException("Packet received is too short") # Hop count for repeating purposes self.hop = (ccPacket.data[2] >> 4) & 0x0F # Security option self.security = ccPacket.data[2] & 0x0F # Security nonce self.nonce = ccPacket.data[3] # Superclass attributes ## RSSI byte self.rssi = ccPacket.rssi ## LQI byte self.lqi = ccPacket.lqi ## CcPacket data field self.data = ccPacket.data # Smart Encryption enabled? if self.security & 0x02 and SwapPacket.smart_encrypt_pwd is not None: # Decrypt packet self.smart_encryption(SwapPacket.smart_encrypt_pwd, decrypt=True) # AES-128 Encryption enabled? elif self.security & 0x04 and SwapPacket.aes_encrypt_pwd is not None: # Decrypt packet self.aes_encryption(SwapPacket.aes_encrypt_pwd, decrypt=True) elif self.security & 0x06: return # Function code self.function = ccPacket.data[4] & 0x7F # Extended address indicator self.extended_address = (ccPacket.data[4] & 0x80) != 0 if self.extended_address: # Destination address self.destAddress = (ccPacket.data[0] << 8) | ccPacket.data[1] # Source address self.srcAddress = (ccPacket.data[5] << 8) | ccPacket.data[6] # Register address self.regAddress = (ccPacket.data[7] << 8) | ccPacket.data[8] # Register ID self.regId = ccPacket.data[9] # Register value if len(ccPacket.data) >= 11: self.value = SwapValue(ccPacket.data[10:]) else: # Destination address self.destAddress = ccPacket.data[0] # Source address self.srcAddress = ccPacket.data[1] # Register address self.regAddress = ccPacket.data[5] # Register ID self.regId = ccPacket.data[6] # Register value if len(ccPacket.data) >= 8: self.value = SwapValue(ccPacket.data[7:]) else: self._update_ccdata()