Use getaddrinfo() to determine if a remote URL is reachable instead of
only checking if we have an addresses configured. This avoids, for
example, trying to load an IPv4 URL when only an IPv6 address is
available.
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
#endif
#include <assert.h>
#endif
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <talloc/talloc.h>
#include <system/system.h>
#include <talloc/talloc.h>
#include <system/system.h>
{
struct load_url_result *result;
struct load_task *task;
{
struct load_url_result *result;
struct load_task *task;
/* If the url is remote but network is not yet available queue up this
* load for later */
/* If the url is remote but network is not yet available queue up this
* load for later */
- if (!system_info_network_available() && url->scheme != pb_url_file) {
+ if (url->scheme != pb_url_file &&
+ getaddrinfo(url->host, NULL, NULL, &res) != 0) {
pb_log("load task for %s queued pending network\n", url->full);
pending_network_jobs_add(task, flags);
task->result->status = LOAD_ASYNC;
pb_log("load task for %s queued pending network\n", url->full);
pending_network_jobs_add(task, flags);
task->result->status = LOAD_ASYNC;
-bool system_info_network_available(void)
-{
- unsigned int i;
-
- for (i = 0; i < sysinfo->n_interfaces; i++)
- if (sysinfo->interfaces[i]->address)
- return true;
- return false;
-}
-
void system_info_set_interface_address(unsigned int hwaddr_size,
uint8_t *hwaddr, const char *address)
{
void system_info_set_interface_address(unsigned int hwaddr_size,
uint8_t *hwaddr, const char *address)
{
const struct system_info *system_info_get(void);
const struct system_info *system_info_get(void);
-bool system_info_network_available(void);
void system_info_set_interface_address(unsigned int hwaddr_size,
uint8_t *hwaddr, const char *address);
void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr,
void system_info_set_interface_address(unsigned int hwaddr_size,
uint8_t *hwaddr, const char *address);
void system_info_register_interface(unsigned int hwaddr_size, uint8_t *hwaddr,