GNUnet  0.20.0
gnunet-core.c File Reference

Print information about other peers known to CORE. More...

#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_core_service.h"
Include dependency graph for gnunet-core.c:

Go to the source code of this file.

Functions

static void shutdown_task (void *cls)
 Task run in monitor mode when the user presses CTRL-C to abort. More...
 
static void monitor_cb (void *cls, const struct GNUNET_PeerIdentity *peer, enum GNUNET_CORE_KxState state, struct GNUNET_TIME_Absolute timeout)
 Function called to notify core users that another peer changed its state with us. More...
 
static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
 Main function that will be run by the scheduler. More...
 
int main (int argc, char *const *argv)
 The main function to obtain peer information from CORE. More...
 

Variables

static int monitor_connections
 Option -m. More...
 
static struct GNUNET_CORE_MonitorHandlemh
 Handle to the CORE monitor. More...
 

Detailed Description

Print information about other peers known to CORE.

Author
Nathan Evans

Definition in file gnunet-core.c.

Function Documentation

◆ shutdown_task()

static void shutdown_task ( void *  cls)
static

Task run in monitor mode when the user presses CTRL-C to abort.

Stops monitoring activity.

Parameters
clsNULL

Definition at line 49 of file gnunet-core.c.

50 {
51  (void) cls;
52  if (NULL != mh)
53  {
55  mh = NULL;
56  }
57 }
static struct GNUNET_CORE_MonitorHandle * mh
Handle to the CORE monitor.
Definition: gnunet-core.c:39
void GNUNET_CORE_monitor_stop(struct GNUNET_CORE_MonitorHandle *mh)
Stop monitoring CORE activity.

References GNUNET_CORE_monitor_stop(), and mh.

Referenced by run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ monitor_cb()

static void monitor_cb ( void *  cls,
const struct GNUNET_PeerIdentity peer,
enum GNUNET_CORE_KxState  state,
struct GNUNET_TIME_Absolute  timeout 
)
static

Function called to notify core users that another peer changed its state with us.

Parameters
clsclosure
peerthe peer that changed state
statenew state of the peer
timeouttimeout for the new state

Definition at line 70 of file gnunet-core.c.

74 {
76  const char *now_str;
77  const char *state_str;
78 
79  (void) cls;
80  if (((NULL == peer) || (GNUNET_CORE_KX_ITERATION_FINISHED == state)) &&
82  {
84  return;
85  }
86 
87  switch (state)
88  {
90  /* should never happen, as we immediately send the key */
91  state_str = _ ("fresh connection");
92  break;
93 
95  state_str = _ ("key sent");
96  break;
97 
99  state_str = _ ("key received");
100  break;
101 
103  state_str = _ ("connection established");
104  break;
105 
107  state_str = _ ("rekeying");
108  break;
109 
111  state_str = _ ("disconnected");
112  break;
113 
115  return;
116 
118  fprintf (stderr,
119  "%s\n",
120  _ ("Connection to CORE service lost (reconnecting)"));
121  return;
122 
123  default:
124  state_str = _ ("unknown state");
125  break;
126  }
128  fprintf (stdout,
129  _ ("%24s: %-30s %4s (timeout in %6s)\n"),
130  now_str,
131  state_str,
132  GNUNET_i2s (peer),
135  GNUNET_YES));
136 }
static struct GNUNET_TIME_Relative timeout
Desired timeout for the lookup (default is no timeout).
Definition: gnunet-abd.c:61
static int monitor_connections
Option -m.
Definition: gnunet-core.c:34
enum State state
current state of profiling
@ GNUNET_CORE_KX_PEER_DISCONNECT
Last state of a KX (when it is being terminated).
@ GNUNET_CORE_KX_STATE_UP
The other peer has confirmed our session key + PING with a PONG message encrypted with their session ...
@ GNUNET_CORE_KX_STATE_DOWN
No handshake yet.
@ GNUNET_CORE_KX_CORE_DISCONNECT
This is not a state in a peer's state machine, but a special value used with the GNUNET_CORE_MonitorC...
@ GNUNET_CORE_KX_STATE_KEY_SENT
We've sent our session key.
@ GNUNET_CORE_KX_STATE_KEY_RECEIVED
We've received the other peers session key.
@ GNUNET_CORE_KX_ITERATION_FINISHED
This is not a state in a peer's state machine, but a special value used with the GNUNET_CORE_MonitorC...
@ GNUNET_CORE_KX_STATE_REKEY_SENT
We're rekeying (or had a timeout), so we have sent the other peer our new ephemeral key,...
@ GNUNET_YES
@ GNUNET_NO
const char * GNUNET_i2s(const struct GNUNET_PeerIdentity *pid)
Convert a peer identity to a string (for printing debug messages).
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:562
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_remaining(struct GNUNET_TIME_Absolute future)
Given a timestamp in the future, how much time remains until then?
Definition: time.c:405
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition: time.c:111
const char * GNUNET_STRINGS_absolute_time_to_string(struct GNUNET_TIME_Absolute t)
Like asctime, except for GNUnet time.
Definition: strings.c:616
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:569
#define _(String)
GNU gettext support macro.
Definition: platform.h:178
Time for absolute times used by GNUnet, in microseconds.
struct GNUNET_TESTBED_Peer * peer
The peer associated with this model.

References _, GNUNET_CORE_KX_CORE_DISCONNECT, GNUNET_CORE_KX_ITERATION_FINISHED, GNUNET_CORE_KX_PEER_DISCONNECT, GNUNET_CORE_KX_STATE_DOWN, GNUNET_CORE_KX_STATE_KEY_RECEIVED, GNUNET_CORE_KX_STATE_KEY_SENT, GNUNET_CORE_KX_STATE_REKEY_SENT, GNUNET_CORE_KX_STATE_UP, GNUNET_i2s(), GNUNET_NO, GNUNET_SCHEDULER_shutdown(), GNUNET_STRINGS_absolute_time_to_string(), GNUNET_STRINGS_relative_time_to_string(), GNUNET_TIME_absolute_get(), GNUNET_TIME_absolute_get_remaining(), GNUNET_YES, monitor_connections, peer, state, and timeout.

Referenced by run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ run()

static void run ( void *  cls,
char *const *  args,
const char *  cfgfile,
const struct GNUNET_CONFIGURATION_Handle cfg 
)
static

Main function that will be run by the scheduler.

Parameters
clsclosure
argsremaining command-line arguments
cfgfilename of the configuration file used (for saving, can be NULL!)
cfgconfiguration

Definition at line 148 of file gnunet-core.c.

152 {
153  (void) cls;
154  (void) cfgfile;
155  if (NULL != args[0])
156  {
157  fprintf (stderr, _ ("Invalid command line argument `%s'\n"), args[0]);
158  return;
159  }
161  if (NULL == mh)
162  {
163  fprintf (stderr, "%s", _ ("Failed to connect to CORE service!\n"));
164  return;
165  }
167 }
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
static void monitor_cb(void *cls, const struct GNUNET_PeerIdentity *peer, enum GNUNET_CORE_KxState state, struct GNUNET_TIME_Absolute timeout)
Function called to notify core users that another peer changed its state with us.
Definition: gnunet-core.c:70
static void shutdown_task(void *cls)
Task run in monitor mode when the user presses CTRL-C to abort.
Definition: gnunet-core.c:49
struct GNUNET_CORE_MonitorHandle * GNUNET_CORE_monitor_start(const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CORE_MonitorCallback peer_cb, void *peer_cb_cls)
Monitor connectivity and KX status of all peers known to CORE.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received,...
Definition: scheduler.c:1334

References _, consensus-simulation::args, cfg, GNUNET_CORE_monitor_start(), GNUNET_SCHEDULER_add_shutdown(), mh, monitor_cb(), and shutdown_task().

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char *const *  argv 
)

The main function to obtain peer information from CORE.

Parameters
argcnumber of arguments from the command line
argvcommand line arguments
Returns
0 ok, 1 on error

Definition at line 178 of file gnunet-core.c.

179 {
180  int res;
183  'm',
184  "monitor",
185  gettext_noop (
186  "provide information about all current connections (continuously)"),
189 
190  if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv))
191  return 2;
192  res = GNUNET_PROGRAM_run (argc,
193  argv,
194  "gnunet-core",
195  gettext_noop (
196  "Print information about connected peers."),
197  options,
198  &run,
199  NULL);
200 
201  GNUNET_free_nz ((void *) argv);
202  if (GNUNET_OK == res)
203  return 0;
204  return 1;
205 }
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_OPTION_END
Definition: 002.c:13
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
#define gettext_noop(String)
Definition: gettext.h:70
static int res
static void run(void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg)
Main function that will be run by the scheduler.
Definition: gnunet-core.c:148
struct GNUNET_GETOPT_CommandLineOption GNUNET_GETOPT_option_flag(char shortName, const char *name, const char *description, int *val)
Allow user to specify a flag (which internally means setting an integer to 1/GNUNET_YES/GNUNET_OK.
@ GNUNET_OK
#define GNUNET_free_nz(ptr)
Wrapper around free.
enum GNUNET_GenericReturnValue GNUNET_PROGRAM_run(int argc, char *const *argv, const char *binaryName, const char *binaryHelp, const struct GNUNET_GETOPT_CommandLineOption *options, GNUNET_PROGRAM_Main task, void *task_cls)
Run a standard GNUnet command startup sequence (initialize loggers and configuration,...
Definition: program.c:400
enum GNUNET_GenericReturnValue GNUNET_STRINGS_get_utf8_args(int argc, char *const *argv, int *u8argc, char *const **u8argv)
Returns utf-8 encoded arguments.
Definition: strings.c:1222
Definition of a command line option.

References gettext_noop, GNUNET_free_nz, GNUNET_GETOPT_OPTION_END, GNUNET_GETOPT_option_flag(), GNUNET_OK, GNUNET_PROGRAM_run(), GNUNET_STRINGS_get_utf8_args(), monitor_connections, options, res, and run().

Here is the call graph for this function:

Variable Documentation

◆ monitor_connections

int monitor_connections
static

Option -m.

Definition at line 34 of file gnunet-core.c.

Referenced by main(), and monitor_cb().

◆ mh

struct GNUNET_CORE_MonitorHandle* mh
static

Handle to the CORE monitor.

Definition at line 39 of file gnunet-core.c.

Referenced by run(), and shutdown_task().