GNUnet  0.10.x
Typedefs | Functions
gnunet-daemon-hostlist_client.h File Reference

hostlist support. More...

#include "gnunet_core_service.h"
#include "gnunet_statistics_service.h"
#include "gnunet_util_lib.h"
Include dependency graph for gnunet-daemon-hostlist_client.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef void(* GNUNET_HOSTLIST_UriHandler) (const char *uri)
 Function that handles an advertised URI. More...
 

Functions

int GNUNET_HOSTLIST_client_start (const struct GNUNET_CONFIGURATION_Handle *c, struct GNUNET_STATISTICS_Handle *st, GNUNET_CORE_ConnectEventHandler *ch, GNUNET_CORE_DisconnectEventHandler *dh, GNUNET_HOSTLIST_UriHandler *msgh, int learn)
 Start downloading hostlists from hostlist servers as necessary. More...
 
void GNUNET_HOSTLIST_client_stop (void)
 Stop downloading hostlists from hostlist servers as necessary. More...
 

Detailed Description

hostlist support.

Downloads HELLOs via HTTP.

Author
Christian Grothoff

Definition in file gnunet-daemon-hostlist_client.h.

Typedef Documentation

◆ GNUNET_HOSTLIST_UriHandler

typedef void(* GNUNET_HOSTLIST_UriHandler) (const char *uri)

Function that handles an advertised URI.

Parameters
uri0-termianted URI of a hostlist

Definition at line 39 of file gnunet-daemon-hostlist_client.h.

Function Documentation

◆ GNUNET_HOSTLIST_client_start()

int GNUNET_HOSTLIST_client_start ( const struct GNUNET_CONFIGURATION_Handle c,
struct GNUNET_STATISTICS_Handle st,
GNUNET_CORE_ConnectEventHandler ch,
GNUNET_CORE_DisconnectEventHandler dh,
GNUNET_HOSTLIST_UriHandler msgh,
int  learn 
)

Start downloading hostlists from hostlist servers as necessary.

Parameters
cconfiguration to use
ststatistics handle to use
[out]chset to handler for CORE connect events
[out]dhset to handler for CORE disconnect events
[out]msghset to handler for CORE advertisement messages
learnshould we learn hostlist URLs from CORE
Returns
GNUNET_OK on success

Definition at line 1512 of file gnunet-daemon-hostlist_client.c.

References _, filename, gettext_noop, GNUNET_assert, GNUNET_break, GNUNET_CONFIGURATION_get_value_filename(), GNUNET_CONFIGURATION_get_value_string(), GNUNET_DISK_file_test(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_ERROR_TYPE_ERROR, GNUNET_ERROR_TYPE_INFO, GNUNET_free, GNUNET_free_non_null, GNUNET_log, GNUNET_log_strerror_file, GNUNET_NO, GNUNET_OK, GNUNET_PEERINFO_connect(), GNUNET_SCHEDULER_add_delayed(), GNUNET_SCHEDULER_add_now(), GNUNET_STATISTICS_get(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_STRINGS_utf8_toupper(), GNUNET_SYSERR, GNUNET_TIME_UNIT_MINUTES, GNUNET_YES, handler_advertisement(), handler_connect(), handler_disconnect(), load_hostlist_file(), primary_task(), process_stat(), proxy, proxy_password, proxy_type, proxy_username, result, SAVING_INTERVAL, st, stat_learning, stat_testing_allowed, stat_testing_hostlist, stat_timeout_task(), stat_use_bootstrap, task_check(), and task_hostlist_saving().

Referenced by run().

1518 {
1519  char *filename;
1520  char *proxytype_str;
1521  int result;
1522 
1523  GNUNET_assert (NULL != st);
1524  if (0 != curl_global_init (CURL_GLOBAL_WIN32))
1525  {
1526  GNUNET_break (0);
1527  return GNUNET_SYSERR;
1528  }
1529  cfg = c;
1530  stats = st;
1531 
1532  /* Read proxy configuration */
1534  if (GNUNET_OK ==
1536  "HOSTLIST",
1537  "PROXY",
1538  &proxy))
1539  {
1541  "Found proxy host: `%s'\n",
1542  proxy);
1543  /* proxy username */
1544  if (GNUNET_OK ==
1546  "HOSTLIST",
1547  "PROXY_USERNAME",
1548  &proxy_username))
1549  {
1551  "Found proxy username name: `%s'\n",
1552  proxy_username);
1553  }
1554 
1555  /* proxy password */
1556  if (GNUNET_OK ==
1558  "HOSTLIST",
1559  "PROXY_PASSWORD",
1560  &proxy_password))
1561  {
1563  "Found proxy password name: `%s'\n",
1564  proxy_password);
1565  }
1566 
1567  /* proxy type */
1568  if (GNUNET_OK ==
1570  "HOSTLIST",
1571  "PROXY_TYPE",
1572  &proxytype_str))
1573  {
1574  GNUNET_STRINGS_utf8_toupper (proxytype_str,
1575  proxytype_str);
1576  proxy_type = CURLPROXY_HTTP;
1577  if (0 == strcmp (proxytype_str, "HTTP"))
1578  proxy_type = CURLPROXY_HTTP;
1579  else if (0 == strcmp (proxytype_str, "HTTP_1_0"))
1580  proxy_type = CURLPROXY_HTTP_1_0;
1581  else if (0 == strcmp (proxytype_str, "SOCKS4"))
1582  proxy_type = CURLPROXY_SOCKS4;
1583  else if (0 == strcmp (proxytype_str, "SOCKS5"))
1584  proxy_type = CURLPROXY_SOCKS5;
1585  else if (0 == strcmp (proxytype_str, "SOCKS4A"))
1586  proxy_type = CURLPROXY_SOCKS4A;
1587  else if (0 == strcmp (proxytype_str, "SOCKS5_HOSTNAME"))
1588  proxy_type = CURLPROXY_SOCKS5_HOSTNAME;
1589  else
1590  {
1592  _("Invalid proxy type: `%s', disabling proxy! Check configuration!\n"),
1593  proxytype_str);
1594  GNUNET_free (proxytype_str);
1595  GNUNET_free (proxy);
1596  proxy = NULL;
1598  proxy_username = NULL;
1600  proxy_password = NULL;
1601 
1602  return GNUNET_SYSERR;
1603  }
1604  }
1605  GNUNET_free_non_null (proxytype_str);
1606  }
1607 
1608  stat_learning = learn;
1609  *ch = &handler_connect;
1610  *dh = &handler_disconnect;
1611  linked_list_head = NULL;
1612  linked_list_tail = NULL;
1616 
1617  if (GNUNET_YES == stat_learning)
1618  {
1619  *msgh = &handler_advertisement;
1621  _("Learning is enabled on this peer\n"));
1622  load_hostlist_file ();
1624  "Hostlists will be saved to file again in %s\n",
1626  GNUNET_YES));
1627  ti_saving_task =
1630  NULL);
1631  }
1632  else
1633  {
1635  _("Learning is not enabled on this peer\n"));
1636  *msgh = NULL;
1637  if (GNUNET_OK ==
1639  "HOSTLIST",
1640  "HOSTLISTFILE",
1641  &filename))
1642  {
1643  if (GNUNET_YES == GNUNET_DISK_file_test (filename))
1644  {
1645  result = remove (filename);
1646  if (0 == result)
1648  _("Since learning is not enabled on this peer, hostlist file `%s' was removed\n"),
1649  filename);
1650  else
1652  "remove",
1653  filename);
1654  }
1655  }
1656  GNUNET_free (filename);
1657  }
1659  "Loading stats value on hostlist download frequency\n");
1660  sget = GNUNET_STATISTICS_get (stats, "hostlist",
1661  gettext_noop
1662  ("# milliseconds between hostlist downloads"),
1663  &primary_task,
1664  &process_stat,
1665  NULL);
1666  if (NULL == sget)
1667  {
1669  "Statistics request failed, scheduling hostlist download\n");
1671  NULL);
1672  }
1673  else
1674  {
1678  NULL);
1679  }
1680  return GNUNET_OK;
1681 }
int GNUNET_DISK_file_test(const char *fil)
Check that fil corresponds to a filename (of a file that exists and that is not a directory)...
Definition: disk.c:669
static struct GNUNET_CADET_Channel * ch
Channel handle.
Definition: gnunet-cadet.c:117
struct GNUNET_PEERINFO_Handle * GNUNET_PEERINFO_connect(const struct GNUNET_CONFIGURATION_Handle *cfg)
Connect to the peerinfo service.
Definition: peerinfo_api.c:133
static int stat_learning
Set if we are allowed to learn new hostlists and use them.
#define GNUNET_TIME_UNIT_MINUTES
One minute.
static struct GNUNET_SCHEDULER_Task * ti_saving_task
ID of the task saving the hostlsit in a regular intervall.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
static void load_hostlist_file()
Method to load persistent hostlist file during hostlist client startup.
static void handler_advertisement(const char *uri)
Method called whenever an advertisement message arrives.
static curl_proxytype proxy_type
Proxy type we are using (can be NULL).
static int process_stat(void *cls, const char *subsystem, const char *name, uint64_t value, int is_persistent)
We've received the previous delay value from statistics.
static void * handler_connect(void *cls, const struct GNUNET_PeerIdentity *peer, struct GNUNET_MQ_Handle *mq)
Method called whenever a given peer connects.
#define GNUNET_NO
Definition: gnunet_common.h:81
static void primary_task(void *cls, int success)
Continuation called by the statistics code once we go the stat.
#define GNUNET_OK
Named constants for return values.
Definition: gnunet_common.h:78
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
static char * proxy_username
Proxy username we are using (can be NULL).
static struct GNUNET_PEERINFO_Handle * pi
Handle to peerinfo service.
static char * proxy
Proxy hostname or ip we are using (can be NULL).
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur...
static char * proxy_password
Proxy password we are using (can be NULL).
#define _(String)
GNU gettext support macro.
Definition: platform.h:208
static void stat_timeout_task(void *cls)
Continuation called by the statistics code once we go the stat.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1246
void GNUNET_STRINGS_utf8_toupper(const char *input, char *output)
Convert the utf-8 input string to upper case.
Definition: strings.c:580
#define GNUNET_log_strerror_file(level, cmd, filename)
Log an error message at log-level 'level' that indicates a failure of the command 'cmd' with the mess...
static int stat_testing_allowed
Value controlling if a hostlist testing is allowed at the moment.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1273
const char * GNUNET_STRINGS_relative_time_to_string(struct GNUNET_TIME_Relative delta, int do_round)
Give relative time in human-readable fancy format.
Definition: strings.c:727
static char * filename
static int result
Global testing status.
static unsigned int stat_use_bootstrap
Value saying if a preconfigured bootstrap server is used.
static struct Hostlist * linked_list_head
Head of the linked list used to store hostlists.
static struct Hostlist * linked_list_tail
Tail of the linked list used to store hostlists.
static void handler_disconnect(void *cls, const struct GNUNET_PeerIdentity *peer, void *internal_cls)
Method called whenever a given peer disconnects.
static void task_check(void *cls)
Task that checks if we should try to download a hostlist.
int GNUNET_CONFIGURATION_get_value_string(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be a string.
#define GNUNET_SYSERR
Definition: gnunet_common.h:79
static const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
static struct GNUNET_STATISTICS_GetHandle * sget
Handle for our statistics GET operation.
struct GNUNET_STATISTICS_GetHandle * GNUNET_STATISTICS_get(struct GNUNET_STATISTICS_Handle *handle, const char *subsystem, const char *name, GNUNET_STATISTICS_Callback cont, GNUNET_STATISTICS_Iterator proc, void *cls)
Get statistic from the peer.
static struct GNUNET_SCHEDULER_Task * ti_check_download
ID of the task, checking if hostlist download should take plate.
#define GNUNET_log(kind,...)
#define SAVING_INTERVAL
Time interval hostlists are saved to disk.
int GNUNET_CONFIGURATION_get_value_filename(const struct GNUNET_CONFIGURATION_Handle *cfg, const char *section, const char *option, char **value)
Get a configuration value that should be the name of a file or directory.
static void task_hostlist_saving(void *cls)
Task that writes hostlist entries to a file on a regular base.
#define GNUNET_YES
Definition: gnunet_common.h:80
static struct GNUNET_SCHEDULER_Task * st
The shutdown task.
static struct GNUNET_STATISTICS_Handle * stats
Statistics handle.
static int stat_testing_hostlist
Value controlling if a hostlist is tested at the moment.
#define GNUNET_free(ptr)
Wrapper around free.
#define gettext_noop(String)
Definition: gettext.h:69
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GNUNET_HOSTLIST_client_stop()

void GNUNET_HOSTLIST_client_stop ( void  )

Stop downloading hostlists from hostlist servers as necessary.

Definition at line 1688 of file gnunet-daemon-hostlist_client.c.

References clean_up(), GNUNET_ERROR_TYPE_DEBUG, GNUNET_free_non_null, GNUNET_log, GNUNET_PEERINFO_disconnect(), GNUNET_SCHEDULER_cancel(), GNUNET_STATISTICS_get_cancel(), GNUNET_YES, proxy, proxy_password, proxy_username, save_hostlist_file(), stat_learning, and update_hostlist().

Referenced by cleaning_task().

1689 {
1691  "Hostlist client shutdown\n");
1692  if (NULL != sget)
1693  {
1695  sget = NULL;
1696  }
1697  stats = NULL;
1698  if (GNUNET_YES == stat_learning)
1700  if (NULL != ti_saving_task)
1701  {
1703  ti_saving_task = NULL;
1704  }
1705  if (NULL != ti_download_dispatcher_task)
1706  {
1709  }
1710  if (NULL != ti_testing_intervall_task)
1711  {
1714  }
1715  if (NULL != ti_download)
1716  {
1718  ti_download = NULL;
1719  update_hostlist ();
1720  clean_up ();
1721  }
1722  if (NULL != ti_check_download)
1723  {
1725  ti_check_download = NULL;
1726  curl_global_cleanup ();
1727  }
1729  proxy = NULL;
1731  proxy_username = NULL;
1733  proxy_password = NULL;
1734  if (NULL != pi)
1735  {
1737  pi = NULL;
1738  }
1739  cfg = NULL;
1740 }
static int stat_learning
Set if we are allowed to learn new hostlists and use them.
static struct GNUNET_SCHEDULER_Task * ti_download_dispatcher_task
ID of the task called to initiate a download.
static struct GNUNET_SCHEDULER_Task * ti_saving_task
ID of the task saving the hostlsit in a regular intervall.
void GNUNET_STATISTICS_get_cancel(struct GNUNET_STATISTICS_GetHandle *gh)
Cancel a GNUNET_STATISTICS_get request.
static struct GNUNET_SCHEDULER_Task * ti_download
ID of the task downloading the hostlist.
#define GNUNET_free_non_null(ptr)
Free the memory pointed to by ptr if ptr is not NULL.
static void update_hostlist()
Method updating hostlist statistics.
static char * proxy_username
Proxy username we are using (can be NULL).
static struct GNUNET_PEERINFO_Handle * pi
Handle to peerinfo service.
static char * proxy
Proxy hostname or ip we are using (can be NULL).
static char * proxy_password
Proxy password we are using (can be NULL).
static struct GNUNET_SCHEDULER_Task * ti_testing_intervall_task
ID of the task controlling the locking between two hostlist tests.
static const struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
static void save_hostlist_file(int shutdown)
Method to save hostlist to a file during hostlist client shutdown.
static void clean_up()
Clean up the state from the task that downloaded the hostlist and schedule the next task...
static struct GNUNET_STATISTICS_GetHandle * sget
Handle for our statistics GET operation.
static struct GNUNET_SCHEDULER_Task * ti_check_download
ID of the task, checking if hostlist download should take plate.
#define GNUNET_log(kind,...)
void GNUNET_PEERINFO_disconnect(struct GNUNET_PEERINFO_Handle *h)
Disconnect from the peerinfo service.
Definition: peerinfo_api.c:159
#define GNUNET_YES
Definition: gnunet_common.h:80
static struct GNUNET_STATISTICS_Handle * stats
Statistics handle.
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:965
Here is the call graph for this function:
Here is the caller graph for this function: