diff --git a/coapthon/layers/messagelayer.py b/coapthon/layers/messagelayer.py index f4cba32..da455bf 100644 --- a/coapthon/layers/messagelayer.py +++ b/coapthon/layers/messagelayer.py @@ -1,6 +1,7 @@ import logging import random import time +import socket from coapthon.messages.message import Message from coapthon import defines from coapthon.messages.request import Request @@ -105,10 +106,11 @@ class MessageLayer(object): host, port = response.source except AttributeError: return + all_coap_nodes = defines.ALL_COAP_NODES_IPV6 if socket.getaddrinfo(host, None)[0][0] == socket.AF_INET6 else defines.ALL_COAP_NODES key_mid = str_append_hash(host, port, response.mid) - key_mid_multicast = str_append_hash(defines.ALL_COAP_NODES, port, response.mid) + key_mid_multicast = str_append_hash(all_coap_nodes, port, response.mid) key_token = str_append_hash(host, port, response.token) - key_token_multicast = str_append_hash(defines.ALL_COAP_NODES, port, response.token) + key_token_multicast = str_append_hash(all_coap_nodes, port, response.token) if key_mid in list(self._transactions.keys()): transaction = self._transactions[key_mid] if response.token != transaction.request.token: @@ -151,10 +153,11 @@ class MessageLayer(object): host, port = message.source except AttributeError: return + all_coap_nodes = defines.ALL_COAP_NODES_IPV6 if socket.getaddrinfo(host, None)[0][0] == socket.AF_INET6 else defines.ALL_COAP_NODES key_mid = str_append_hash(host, port, message.mid) - key_mid_multicast = str_append_hash(defines.ALL_COAP_NODES, port, message.mid) + key_mid_multicast = str_append_hash(all_coap_nodes, port, message.mid) key_token = str_append_hash(host, port, message.token) - key_token_multicast = str_append_hash(defines.ALL_COAP_NODES, port, message.token) + key_token_multicast = str_append_hash(all_coap_nodes, port, message.token) if key_mid in list(self._transactions.keys()): transaction = self._transactions[key_mid] elif key_token in self._transactions_token: diff --git a/coapthon/server/coap.py b/coapthon/server/coap.py index 99d2757..3b14f5b 100644 --- a/coapthon/server/coap.py +++ b/coapthon/server/coap.py @@ -88,20 +88,21 @@ class CoAP(object): mreq = struct.pack("4sl", socket.inet_aton(defines.ALL_COAP_NODES), socket.INADDR_ANY) self._socket.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) else: + # Bugfix for Python 3.6 for Windows ... missing IPPROTO_IPV6 constant + if not hasattr(socket, 'IPPROTO_IPV6'): + socket.IPPROTO_IPV6 = 41 + self._socket = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # Allow multiple copies of this program on one machine # (not strictly needed) self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self._socket.bind((defines.ALL_COAP_NODES_IPV6, self.server_address[1])) + self._socket.bind(('', self.server_address[1])) addrinfo_multicast = socket.getaddrinfo(defines.ALL_COAP_NODES_IPV6, 5683)[0] group_bin = socket.inet_pton(socket.AF_INET6, addrinfo_multicast[4][0]) mreq = group_bin + struct.pack('@I', 0) self._socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq) - self._unicast_socket = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) - self._unicast_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self._unicast_socket.bind(self.server_address) else: if addrinfo[0] == socket.AF_INET: # IPv4 self._socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)