net: lwm2m: support NET_SOCKETS_OFFLOAD in peer parsing

The LwM2M implementation for DNS resolving has checks which
configure hints based on whether IPv4 or IPv6 are enabled.
Neither of them need enabled if using NET_SOCKETS_OFFLOAD,
which then causes an error to be returned to due to
"hints.ai_family" not being set.

Also the offload API need to know when to free the allocated
"struct addrinfo" instead of calling free() generically,
thus let's use the freeaddrinfo() API for sockets which will
call into the offload API if needed.

Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/18765

Signed-off-by: Jun Qing Zou <jun.qing.zou@nordicsemi.no>
This commit is contained in:
Jun Qing Zou 2019-08-29 08:55:10 +09:00 committed by Ioannis Glaropoulos
commit 9103403308

View file

@ -4209,6 +4209,8 @@ int lwm2m_parse_peerinfo(char *url, struct sockaddr *addr, bool *use_dtls)
u16_t off, len;
u8_t tmp;
LOG_DBG("Parse url: %s", log_strdup(url));
http_parser_url_init(&parser);
ret = http_parser_parse_url(url, strlen(url), 0, &parser);
if (ret < 0) {
@ -4268,6 +4270,9 @@ int lwm2m_parse_peerinfo(char *url, struct sockaddr *addr, bool *use_dtls)
hints.ai_family = AF_INET6;
#elif defined(CONFIG_NET_IPV4)
hints.ai_family = AF_INET;
#elif defined(CONFIG_NET_SOCKETS_OFFLOAD)
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
#else
hints.ai_family = AF_UNSPEC;
#endif /* defined(CONFIG_NET_IPV6) && defined(CONFIG_NET_IPV4) */
@ -4282,7 +4287,7 @@ int lwm2m_parse_peerinfo(char *url, struct sockaddr *addr, bool *use_dtls)
memcpy(addr, res->ai_addr, sizeof(*addr));
addr->sa_family = res->ai_family;
free(res);
freeaddrinfo(res);
#else
goto cleanup;
#endif /* CONFIG_DNS_RESOLVER */