mirror of
https://github.com/apache/nuttx-apps.git
synced 2025-10-20 04:26:04 +08:00
Replaces calls to non-standard dns_hostip() with calls to the standard gethostbyname()
This commit is contained in:
@@ -1342,3 +1342,8 @@
|
|||||||
DNS client logic into the NuttX C library. It is a necessary part
|
DNS client logic into the NuttX C library. It is a necessary part
|
||||||
for the full implementation of the netdb logic and provides more
|
for the full implementation of the netdb logic and provides more
|
||||||
flexibility in that location (2015-07-10).
|
flexibility in that location (2015-07-10).
|
||||||
|
* apps/examples/ and apps/netutils: Remove calls to obsolete, non-
|
||||||
|
functional DNS interfaces (2015-07-11).
|
||||||
|
* apps/netutils and apps/nshlib: Replace calls to the non-standard
|
||||||
|
dns_gethotip with calls to standard gethostbyname (2015-07-11).
|
||||||
|
|
||||||
|
@@ -68,7 +68,6 @@
|
|||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
|
||||||
#include <nuttx/version.h>
|
#include <nuttx/version.h>
|
||||||
#include <nuttx/net/dnsclient.h>
|
|
||||||
|
|
||||||
#include <apps/netutils/netlib.h>
|
#include <apps/netutils/netlib.h>
|
||||||
#include <apps/netutils/webclient.h>
|
#include <apps/netutils/webclient.h>
|
||||||
@@ -375,6 +374,41 @@ exit:
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: wget_gethostip
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Call gethostbyname() to get the IPv4 address associated with a hostname.
|
||||||
|
*
|
||||||
|
* Input Parameters
|
||||||
|
* hostname - The host name to use in the nslookup.
|
||||||
|
* ipv4addr - The location to return the IPv4 address.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero (OK) on success; a negated errno value on failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static int wget_gethostip(FAR char *hostname, in_addr_t *ipv4addr)
|
||||||
|
{
|
||||||
|
FAR struct hostent *he;
|
||||||
|
|
||||||
|
he = gethostbyname(hostname);
|
||||||
|
if (he == NULL)
|
||||||
|
{
|
||||||
|
ndbg("gethostbyname failed: %d\n", h_errno);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
else if (he->h_addrtype != AF_INET)
|
||||||
|
{
|
||||||
|
ndbg("gethostbyname returned an address of type: %d\n", he->h_addrtype);
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(ipv4addr, he->h_addr, sizeof(in_addr_t));
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: wget_base
|
* Name: wget_base
|
||||||
*
|
*
|
||||||
@@ -477,7 +511,7 @@ static int wget_base(FAR const char *url, FAR char *buffer, int buflen,
|
|||||||
|
|
||||||
server.sin_family = AF_INET;
|
server.sin_family = AF_INET;
|
||||||
server.sin_port = htons(ws.port);
|
server.sin_port = htons(ws.port);
|
||||||
ret = dns_gethostip(ws.hostname, &server.sin_addr.s_addr);
|
ret = wget_gethostip(ws.hostname, &server.sin_addr.s_addr);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
/* Could not resolve host (or malformed IP address) */
|
/* Could not resolve host (or malformed IP address) */
|
||||||
|
@@ -49,6 +49,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#include <fcntl.h> /* Needed for open */
|
#include <fcntl.h> /* Needed for open */
|
||||||
|
#include <netdb.h> /* Needed for gethostbyname */
|
||||||
#include <libgen.h> /* Needed for basename */
|
#include <libgen.h> /* Needed for basename */
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
@@ -70,7 +71,6 @@
|
|||||||
#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
|
#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
|
||||||
!defined(CONFIG_DISABLE_SIGNALS)
|
!defined(CONFIG_DISABLE_SIGNALS)
|
||||||
# include <apps/netutils/netlib.h>
|
# include <apps/netutils/netlib.h>
|
||||||
# include <nuttx/net/dnsclient.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
|
#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
|
||||||
@@ -86,8 +86,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
|
#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
|
||||||
# include <netdb.h>
|
|
||||||
# include <nuttx/net/dnsclient.h>
|
|
||||||
# include <apps/netutils/dhcpc.h>
|
# include <apps/netutils/dhcpc.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -735,6 +733,79 @@ errout:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: nsh_gethostip
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Call gethostbyname() to get the IP address associated with a hostname.
|
||||||
|
*
|
||||||
|
* Input Parameters
|
||||||
|
* hostname - The host name to use in the nslookup.
|
||||||
|
* ipv4addr - The location to return the IPv4 address.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Zero (OK) on success; a negated errno value on failure.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(HAVE_PING) || defined(HAVE_PING6)
|
||||||
|
static int nsh_gethostip(FAR char *hostname, FAR union ip_addr_u *ipaddr,
|
||||||
|
int addrtype)
|
||||||
|
{
|
||||||
|
FAR struct hostent *he;
|
||||||
|
|
||||||
|
he = gethostbyname(hostname);
|
||||||
|
if (he == NULL)
|
||||||
|
{
|
||||||
|
ndbg("gethostbyname failed: %d\n", h_errno);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
#if defined(HAVE_PING) && defined(HAVE_PING6)
|
||||||
|
|
||||||
|
else if (he->h_addrtype != addrtype)
|
||||||
|
{
|
||||||
|
ndbg("gethostbyname returned an address of type: %d\n", he->h_addrtype);
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
else if (addrtype == AF_INET)
|
||||||
|
{
|
||||||
|
memcpy(&ipaddr->ipv4, he->h_addr, sizeof(in_addr_t));
|
||||||
|
}
|
||||||
|
else /* if (addrtype == AF_INET6) */
|
||||||
|
{
|
||||||
|
memcpy(ipaddr->ipv6, he->h_addr, sizeof(net_ipv6addr_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(HAVE_PING)
|
||||||
|
|
||||||
|
else if (he->h_addrtype != AF_INET)
|
||||||
|
{
|
||||||
|
ndbg("gethostbyname returned an address of type: %d\n", he->h_addrtype);
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy(&ipaddr->ipv4, he->h_addr, sizeof(in_addr_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* if defined(HAVE_PING6) */
|
||||||
|
|
||||||
|
else if (he->h_addrtype != AF_INET6)
|
||||||
|
{
|
||||||
|
ndbg("gethostbyname returned an address of type: %d\n", he->h_addrtype);
|
||||||
|
return -ENOEXEC;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy(ipaddr->ipv6, he->h_addr, sizeof(net_ipv6addr_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: wget_callback
|
* Name: wget_callback
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@@ -1229,16 +1300,12 @@ int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
|||||||
|
|
||||||
/* Get the IP address in binary form */
|
/* Get the IP address in binary form */
|
||||||
|
|
||||||
ret = inet_pton(AF_INET, staddr, &ipaddr);
|
ret = nsh_gethostip(staddr, (FAR union ip_addr_u *)&ipaddr, AF_INET);
|
||||||
if (ret == 0)
|
|
||||||
{
|
|
||||||
ret = dns_gethostip(staddr, &ipaddr);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
nsh_output(vtbl, "nsh: %s: unable to resolve hostname '%s'\n", argv[0], staddr);
|
nsh_output(vtbl, "nsh: %s: unable to resolve hostname '%s'\n", argv[0], staddr);
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the ID to use */
|
/* Get the ID to use */
|
||||||
|
|
||||||
@@ -1356,15 +1423,9 @@ int cmd_ping6(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
|||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the IP address in binary form
|
/* Get the IP address in binary form */
|
||||||
* REVISIT: DNS hostname look-up not yet supported
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if 0
|
ret = nsh_gethostip(staddr, (FAR union ip_addr_u *)&ipaddr, AF_INET6);
|
||||||
ret = dns_gethostip(staddr, &ipaddr);
|
|
||||||
#else
|
|
||||||
ret = inet_pton(AF_INET6, staddr, &ipaddr);
|
|
||||||
#endif
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
||||||
|
Reference in New Issue
Block a user