Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Protocol cannot be None" when decoding RX IPv4 frame in escaped API mode #11

Closed
mikewadsten opened this issue Jan 5, 2018 · 1 comment

Comments

@mikewadsten
Copy link
Contributor

mikewadsten commented Jan 5, 2018

Seen when testing sending UDP packets from an XBee Cellular 3G unit to our loopback service, using escaped API mode.

2018-01-05 16:59:15,872 digi.xbee.reader: DEBUG: /dev/xbib2RECEIVED    OperatingMode.ESCAPED_API_MODE7E 04 0B B0 34 2B 79 4D 00 00 27 7D 31 00 00 3B 0A 7D 5D 71 49 4D 6C 4C 5A 7C 78 66 71 5B 75 45 39 7C 75 21 7D 5D 74 30 7A 4E 4D 28 39 28 24 70 2A 47 3B 69 78 33 36 68 42 65 28 70 52 42 4D 74 4F 6C 75 21 22 53 2E 5E 2E 0A 48 70 5F 3A 2D 4B 4D 09 0C 56 61 30 3D 51 52 5B 76 66 7A 31 2E 4B 66 69 2B 2D 44 6F 76 48 45 3A 7D 5E 09 58 25 69 20 5E 5F 29 4D 46 46 0B 45 47 3D 4A 4C 3F 77 76 0D 4F 0A 33 5E 40 36 67 72 60 7A 52 49 38 5E 0D 34 59 63 2E 43 31 6A 37 3E 22 3D 33 48 4E 35 41 2B 71 25 30 65 45 5E 7D 5D 6A 0D 6A 2B 46 0C 43 73 6A 64 72 6B 4F 31 26 65 52 2D 68 73 33 62 38 38 25 26 2B 48 29 65 3F 0B 73 6B 2F 26 72 4F 3D 3D 4B 24 6A 3E 58 55 39 63 4F 0B 64 4C 45 23 37 58 6D 56 30 2F 41 6D 3D 53 38 42 6E 71 42 5B 65 54 7D 5E 3B 49 3F 37 4C 45 4D 47 7D 5D 66 46 73 44 6A 64 79 7D 5E 4F 66 09 75 7D 5E 56 2E 57 65 32 5A 55 26 4A 60 23 47 79 76 38 72 7A 45 0A 54 2D 3C 71 09 3C 0C 6C 7B 40 4E 43 77 75 50 0B 48 69 22 7A 66 44 2D 61 0C 6A 7D 5D 66 6E 66 79 61 40 48 0B 6D 3E 20 21 72 44 31 39 40 4F 20 3D 52 5C 28 6E 24 52 7C 4B 43 33 52 6D 46 62 45 35 53 77 0B 2C 40 2F 09 60 24 2A 72 09 78 7D 5D 53 35 28 48 34 64 79 36 62 4D 65 52 3E 34 7C 48 44 36 23 7B 09 46 55 36 6E 63 4E 30 66 34 3D 45 51 29 23 61 2E 3A 2D 3A 23 6C 2C 3F 4D 62 7D 5D 28 3C 7B 70 5D 4E 29 59 4A 40 72 49 5C 33 36 36 5E 4A 25 66 78 6C 4D 29 63 53 54 0A 57 38 45 58 22 2F 2F 51 78 32 4B 57 35 55 4D 75 60 5C 51 33 73 70 3A 52 7C 3B 2A 40 5E 79 73 3C 40 3D 0C 3F 35 3F 4C 26 44 36 45 46 75 39 52 42 5A 21 65 59 34 3B 25 43 4C 38 48 56 37 52 6D 4E 70 3F 71 39 5D 63 61 4A 5C 47 6F 32 7A 56 6E 7D 5E 48 59 39 6A 29 2E 6E 4D 75 69 5D 6E 3C 4B 33 71 75 6F 72 6E 29 27 73 60 5B 5A 77 6D 4A 5C 52 59 6C 61 2A 56 60 3C 79 2D 35 5C 35 25 27 71 64 0C 4B 3F 69 46 6F 33 75 52 51 2F 2F 0B 73 59 42 4D 40 0D 46 61 33 56 5C 35 0A 54 42 42 49 6E 51 5D 7D 5D 69 3E 3C 44 39 3D 58 28 5E 46 68 67 71 7D 5E 40 34 4F 7D 5E 63 7D 5E 4D 2C 50 22 4C 48 48 49 74 0B 72 54 49 71 7D 5D 2C 46 54 48 4A 69 6F 38 6E 6F 74 5F 57 33 25 28 4C 62 2E 29 5E 54 39 51 2B 34 5A 57 55 3C 49 72 6D 67 61 68 2C 4E 40 3B 74 57 6B 09 21 74 2D 4E 62 79 28 56 58 59 2A 54 29 62 4C 4B 55 60 75 73 3C 25 0C 3D 58 35 57 39 36 7C 69 3F 6A 6B 63 37 31 6C 4B 70 77 70 0B 23 0D 2D 51 5A 68 45 0D 58 21 6C 61 52 64 49 29 49 37 22 3F 3D 72 3E 4E 45 52 58 59 6D 6C 4C 0A 0B 60 35 44 33 3D 4D 3E 4F 33 71 29 3A 3E 32 58 2B 3A 3C 43 77 72 09 28 3A 2E 21 3E 50 7A 76 41 78 6F 62 09 68 53 56 4A 63 4B 70 68 7B 43 70 3A 6C 40 4B 45 46 7D 5D 5F 4B 2B 35 6F 28 77 3C 70 33 0A 4A 53 77 5F 4B 38 23 3D 50 69 7A 68 7D 5D 7D 5D 4F 2A 58 35 2C 46 65 2B 34 49 43 3D 7C 24 61 21 51 62 62 6C 64 2B 2C 64 61 2D 46 24 23 21 70 25 63 61 63 61 2D 64 40 4A 4D 36 27 45 62 3F 5E 43 32 0D 4B 69 5D 0C 43 37 5C 57 54 6A 6D 5A 50 7D 5E 70 57 74 67 23 22 45 79 70 6C 27 66 6D 56 35 38 60 6A 62 30 79 6B 38 38 41 6C 6E 6E 5F 3D 4E 6D 28 35 48 46 62 5E 68 4C 77 7D 5D 41 20 6F 0B 53 36 6A 77 47 42 43 53 09 25 72 53 61 69 3F 77 3E 6A 5B 2B 40 7D 5D 32 34 5B 66 7D 5E 40 37 54 0C 5D 4F 3B 28 5E 6F 4E 09 20 0A 5C 63 51 23 36 24 33 2E 59 72 70 3E 2F 6B 4F 70 5B 68 6F 40 7D 5D 68 29 4D 3C 5E 51 37 68 6C 6E 2B 74 5B 49 09 55 48 42 2C 75 2B 6E 79 32 43 53 68 77 41 66 38 31 43 37 5D 7B 73 5D 5A 6A 20 36 EE
2018-01-05 16:59:15,891 digi.xbee.reader: ERROR: Protocol cannot be None
Traceback (most recent call last):
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/reader.py", line 325, in run
    self.__execute_user_callbacks(read_packet, remote)
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/reader.py", line 612, in __execute_user_callbacks
    xbee_packet.dest_port, xbee_packet.ip_protocol, xbee_packet.data))
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/models/message.py", line 247, in __init__
    raise ValueError("Protocol cannot be None")
ValueError: Protocol cannot be None

This error does not appear when using normal API mode, and also this frame is decoded by XCTU just fine.

This is when using the master version (840c024) after doing pip3 install -e git://github.com/digidotcom/python-xbee#egg=digi-xbee.

@mikewadsten
Copy link
Contributor Author

I think I found the cause. RXIPv4Packets.create_packet takes raw, unescapes it into _raw, but then reads every field except for the data out of raw (i.e. the escaped data).

After correcting this, I then got the following exception (note that line numbers may not match the master version identically, I added some print calls to my code):

Traceback (most recent call last):
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/reader.py", line 325, in run
    self.__execute_user_callbacks(read_packet, remote)
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/reader.py", line 610, in __execute_user_callbacks
    print(xbee_packet)
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/packets/base.py", line 120, in __str__
    return str(self.to_dict())
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/packets/base.py", line 161, in to_dict
    DictKeys.FRAME_SPEC_DATA: self._get_frame_spec_data_dict(),
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/packets/base.py", line 333, in _get_frame_spec_data_dict
    DictKeys.API_DATA:   self._get_api_packet_spec_data_dict()}
  File "/home/mike/.envs/env/src/digi-xbee/digi/xbee/packets/network.py", line 246, in _get_api_packet_spec_data_dict
    DictKeys.DATA:          bytearray(self.__data)}
  File "/home/mike/.envs/env/lib/python3.6/enum.py", line 324, in __getattr__
    raise AttributeError(name) from None
AttributeError: DATA

which is because there is no DATA item in DictKeys. There is, however, RF_DATA.

I will submit a pull request with these fixes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant