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:
parent
5ac014aac6
commit
9103403308
1 changed files with 6 additions and 1 deletions
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue