def encode_to_coap(self): # try: # parsed = urllib.parse.urlparse(self.to.get_endpoint(), allow_fragments=False) # address = (parsed.hostname, parsed.port) # except KeyError: # address = None # return msg2, address request = Request() request.type = NON # request.token = generate_random_token(2) request.destination = destination # request.destination = (sender, 5683) request.multicast = self.multicast request.source = (sender, None) request.code = self.code request.uri_path = self.to.href option = Option() option.number = defines.OptionRegistry.CONTENT_TYPE.number option.value = 10000 request.add_option(option) option = Option() option.number = defines.OptionRegistry.URI_QUERY.number option.value = self.encode_query( self.query) # todo разобраться что тут надо request.add_option(option)
def _prepare_request(self, operation, to, data=None, *, secure=False, multicast=False, query=None, **kwargs): # secure = kwargs.get('secure', False) # multicast = kwargs.get('multicast', False) scheme = 'coaps' if secure else 'coap' family = to['family'] request = Request() request.type = NON request.scheme = scheme request.multicast = multicast request.family = family request.source = (to['net_interface'], None) if multicast: request.destination = (self.coap_discovery[family][0], self.coap_discovery_port) else: request.destination = to[scheme] request.code = self.map_crudn_to_coap_code(operation) request.uri_path = to.get('href', '') option = Option() option.number = defines.OptionRegistry.CONTENT_TYPE.number option.value = 10000 request.add_option(option) # request.accept = 10000 # query = kwargs.get('query') if query: request.query = query if data: request.encode_payload(data) return request
async def discover(): timeout = kwargs.get('timeout') _protocol = [] if self.ipv4: _protocol.append(self.eps_coap_ipv4) if self.ipv6: _protocol.append(self.eps_coap_ipv6) _res = None _token = self.coap.message_layer.fetch_token() _mid = self.coap.message_layer.fetch_mid() for elem in _protocol: for ip in elem: for port in elem[ip]: ep = elem[ip][port] request = Request() request.token = _token request.query = { 'owned': ['TRUE'] if kwargs.get('owned') else ['FALSE'] } request.mid = _mid request.type = NON request.code = Code.GET request.uri_path = '/oic/sec/doxm' # request.content_type = 10000 request.accept = 10000 request.source = ep.address request.multicast = True request.family = ep.family request.scheme = ep.scheme option = Option() option.number = defines.OptionRegistry.OCF_ACCEPT_CONTENT_FORMAT_VERSION.number option.value = 2048 request.add_option(option) request.destination = ( self.coap_discovery[ep.family][0], self.coap_discovery_port) _res = asyncio.create_task( self.coap.send_message(request, timeout=timeout)) # _res.append(self.coap.send_message(request)) return await _res # все вернется одновременно потому что токен один
def create_request_get_doxm(sender, destination): request = Request() request.type = NON # request.token = generate_random_token(2) request.destination = destination # request.destination = (sender, 5683) request.multicast = True request.source = (sender, None) request.code = Code.GET request.uri_path = '/oic/sec/doxm' option = Option() option.number = defines.OptionRegistry.CONTENT_TYPE.number option.value = 10000 request.add_option(option) option = Option() option.number = defines.OptionRegistry.URI_QUERY.number option.value = '' request.add_option(option) return request