GNUnet  0.11.x
Data Structures | Macros | Functions
Time library

Time and time calculations. More...

Data Structures

struct  GNUNET_TIME_Absolute
 Time for absolute times used by GNUnet, in microseconds. More...
 
struct  GNUNET_TIME_Relative
 Time for relative time used by GNUnet, in microseconds. More...
 
struct  GNUNET_TIME_RelativeNBO
 Time for relative time used by GNUnet, in microseconds and in network byte order. More...
 
struct  GNUNET_TIME_AbsoluteNBO
 Time for absolute time used by GNUnet, in microseconds and in network byte order. More...
 

Macros

#define GNUNET_TIME_UNIT_ZERO   GNUNET_TIME_relative_get_zero_ ()
 Relative time zero. More...
 
#define GNUNET_TIME_UNIT_ZERO_ABS   GNUNET_TIME_absolute_get_zero_ ()
 Absolute time zero. More...
 
#define GNUNET_TIME_UNIT_MICROSECONDS   GNUNET_TIME_relative_get_unit_ ()
 One microsecond, our basic time unit. More...
 
#define GNUNET_TIME_UNIT_MILLISECONDS   GNUNET_TIME_relative_get_millisecond_ ()
 One millisecond. More...
 
#define GNUNET_TIME_UNIT_SECONDS   GNUNET_TIME_relative_get_second_ ()
 One second. More...
 
#define GNUNET_TIME_UNIT_MINUTES   GNUNET_TIME_relative_get_minute_ ()
 One minute. More...
 
#define GNUNET_TIME_UNIT_HOURS   GNUNET_TIME_relative_get_hour_ ()
 One hour. More...
 
#define GNUNET_TIME_UNIT_DAYS
 One day. More...
 
#define GNUNET_TIME_UNIT_WEEKS
 One week. More...
 
#define GNUNET_TIME_UNIT_MONTHS
 One month (30 days). More...
 
#define GNUNET_TIME_UNIT_YEARS
 One year (365 days). More...
 
#define GNUNET_TIME_UNIT_FOREVER_REL   GNUNET_TIME_relative_get_forever_ ()
 Constant used to specify "forever". More...
 
#define GNUNET_TIME_UNIT_FOREVER_ABS   GNUNET_TIME_absolute_get_forever_ ()
 Constant used to specify "forever". More...
 
#define GNUNET_TIME_STD_EXPONENTIAL_BACKOFF_THRESHOLD    GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15)
 Threshold after which exponential backoff should not increase (15 m). More...
 
#define GNUNET_TIME_STD_BACKOFF(r)
 Perform our standard exponential back-off calculation, starting at 1 ms and then going by a factor of 2 up unto a maximum of 15 m. More...
 

Functions

int GNUNET_STRINGS_fancy_time_to_absolute (const char *fancy_time, struct GNUNET_TIME_Absolute *atime)
 Convert a given fancy human-readable time to our internal representation. More...
 
const char * GNUNET_STRINGS_absolute_time_to_string (struct GNUNET_TIME_Absolute t)
 Like asctime, except for GNUnet time. More...
 
const char * GNUNET_STRINGS_relative_time_to_string (struct GNUNET_TIME_Relative delta, int do_round)
 Give relative time in human-readable fancy format. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_randomized_backoff (struct GNUNET_TIME_Relative rt, struct GNUNET_TIME_Relative threshold)
 Randomized exponential back-off, starting at 1 ms and going up by a factor of 2+r, where 0 <= r <= 0.5, up to a maximum of the given threshold. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_randomize (struct GNUNET_TIME_Relative r)
 Return a random time value between 0.5*r and 1.5*r. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_zero_ (void)
 Return relative time of 0ms. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_zero_ (void)
 Return absolute time of 0ms. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_unit_ (void)
 Return relative time of 1 microsecond. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_millisecond_ (void)
 Return relative time of 1ms. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_second_ (void)
 Return relative time of 1s. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_minute_ (void)
 Return relative time of 1 minute. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_hour_ (void)
 Return relative time of 1 hour. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_forever_ (void)
 Return "forever". More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_forever_ (void)
 Return "forever". More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get (void)
 Get the current time. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_relative_to_absolute (struct GNUNET_TIME_Relative rel)
 Convert relative time to an absolute time in the future. More...
 
int GNUNET_TIME_round_abs (struct GNUNET_TIME_Absolute *at)
 Round a time value so that it is suitable for transmission via JSON encodings. More...
 
int GNUNET_TIME_round_rel (struct GNUNET_TIME_Relative *rt)
 Round a time value so that it is suitable for transmission via JSON encodings. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_min (struct GNUNET_TIME_Relative t1, struct GNUNET_TIME_Relative t2)
 Return the minimum of two relative time values. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_max (struct GNUNET_TIME_Relative t1, struct GNUNET_TIME_Relative t2)
 Return the maximum of two relative time values. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_min (struct GNUNET_TIME_Absolute t1, struct GNUNET_TIME_Absolute t2)
 Return the minimum of two absolute time values. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_max (struct GNUNET_TIME_Absolute t1, struct GNUNET_TIME_Absolute t2)
 Return the maximum of two absolute time values. More...
 
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? More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_calculate_eta (struct GNUNET_TIME_Absolute start, uint64_t finished, uint64_t total)
 Calculate the estimate time of arrival/completion for an operation. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_difference (struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Absolute end)
 Compute the time difference between the given start and end times. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_duration (struct GNUNET_TIME_Absolute whence)
 Get the duration of an operation as the difference of the current time and the given start time "hence". More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_add (struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Relative duration)
 Add a given relative duration to the given start time. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_subtract (struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Relative duration)
 Subtract a given relative duration from the given start time. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply (struct GNUNET_TIME_Relative rel, unsigned long long factor)
 Multiply relative time by a given factor. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_saturating_multiply (struct GNUNET_TIME_Relative rel, unsigned long long factor)
 Saturating multiply relative time by a given factor. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_divide (struct GNUNET_TIME_Relative rel, unsigned long long factor)
 Divide relative time by a given factor. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_add (struct GNUNET_TIME_Relative a1, struct GNUNET_TIME_Relative a2)
 Add relative times together. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_subtract (struct GNUNET_TIME_Relative a1, struct GNUNET_TIME_Relative a2)
 Subtract relative timestamp from the other. More...
 
struct GNUNET_TIME_RelativeNBO GNUNET_TIME_relative_hton (struct GNUNET_TIME_Relative a)
 Convert relative time to network byte order. More...
 
struct GNUNET_TIME_Relative GNUNET_TIME_relative_ntoh (struct GNUNET_TIME_RelativeNBO a)
 Convert relative time from network byte order. More...
 
struct GNUNET_TIME_AbsoluteNBO GNUNET_TIME_absolute_hton (struct GNUNET_TIME_Absolute a)
 Convert absolute time to network byte order. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_from_ms (uint64_t ms_after_epoch)
 Convert milliseconds after the UNIX epoch to absolute time. More...
 
bool GNUNET_TIME_absolute_is_never (struct GNUNET_TIME_Absolute abs)
 Test if abs is never. More...
 
bool GNUNET_TIME_absolute_is_past (struct GNUNET_TIME_Absolute abs)
 Test if abs is truly in the past (excluding now). More...
 
bool GNUNET_TIME_absolute_is_future (struct GNUNET_TIME_Absolute abs)
 Test if abs is truly in the future (excluding now). More...
 
bool GNUNET_TIME_relative_is_forever (struct GNUNET_TIME_Relative rel)
 Test if rel is forever. More...
 
bool GNUNET_TIME_relative_is_zero (struct GNUNET_TIME_Relative rel)
 Test if rel is zero. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_from_s (uint64_t s_after_epoch)
 Convert seconds after the UNIX epoch to absolute time. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh (struct GNUNET_TIME_AbsoluteNBO a)
 Convert absolute time from network byte order. More...
 
void GNUNET_TIME_set_offset (long long offset)
 Set the timestamp offset for this instance. More...
 
long long GNUNET_TIME_get_offset (void)
 Get the timestamp offset for this instance. More...
 
unsigned int GNUNET_TIME_get_current_year (void)
 Return the current year (e.g. More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_year_to_time (unsigned int year)
 Convert a year to an expiration time of January 1st of that year. More...
 
unsigned int GNUNET_TIME_time_to_year (struct GNUNET_TIME_Absolute at)
 Convert an expiration time to the respective year (rounds) More...
 
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_monotonic (const struct GNUNET_CONFIGURATION_Handle *cfg)
 Obtain the current time and make sure it is monotonically increasing. More...
 

Detailed Description

Time and time calculations.

Macro Definition Documentation

◆ GNUNET_TIME_UNIT_ZERO

#define GNUNET_TIME_UNIT_ZERO   GNUNET_TIME_relative_get_zero_ ()

Relative time zero.

Definition at line 97 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_ZERO_ABS

#define GNUNET_TIME_UNIT_ZERO_ABS   GNUNET_TIME_absolute_get_zero_ ()

Absolute time zero.

Definition at line 102 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_MICROSECONDS

#define GNUNET_TIME_UNIT_MICROSECONDS   GNUNET_TIME_relative_get_unit_ ()

One microsecond, our basic time unit.

Definition at line 107 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_MILLISECONDS

#define GNUNET_TIME_UNIT_MILLISECONDS   GNUNET_TIME_relative_get_millisecond_ ()

One millisecond.

Definition at line 112 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_SECONDS

#define GNUNET_TIME_UNIT_SECONDS   GNUNET_TIME_relative_get_second_ ()

One second.

Definition at line 117 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_MINUTES

#define GNUNET_TIME_UNIT_MINUTES   GNUNET_TIME_relative_get_minute_ ()

One minute.

Definition at line 122 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_HOURS

#define GNUNET_TIME_UNIT_HOURS   GNUNET_TIME_relative_get_hour_ ()

One hour.

Definition at line 127 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_DAYS

#define GNUNET_TIME_UNIT_DAYS
Value:
#define GNUNET_TIME_UNIT_HOURS
One hour.
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
Definition: time.c:311

One day.

Definition at line 132 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_WEEKS

#define GNUNET_TIME_UNIT_WEEKS
Value:

One week.

Definition at line 138 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_MONTHS

#define GNUNET_TIME_UNIT_MONTHS
Value:

One month (30 days).

Definition at line 144 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_YEARS

#define GNUNET_TIME_UNIT_YEARS
Value:

One year (365 days).

Definition at line 150 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_FOREVER_REL

#define GNUNET_TIME_UNIT_FOREVER_REL   GNUNET_TIME_relative_get_forever_ ()

Constant used to specify "forever".

This constant will be treated specially in all time operations.

Definition at line 157 of file gnunet_time_lib.h.

◆ GNUNET_TIME_UNIT_FOREVER_ABS

#define GNUNET_TIME_UNIT_FOREVER_ABS   GNUNET_TIME_absolute_get_forever_ ()

Constant used to specify "forever".

This constant will be treated specially in all time operations.

Definition at line 163 of file gnunet_time_lib.h.

◆ GNUNET_TIME_STD_EXPONENTIAL_BACKOFF_THRESHOLD

#define GNUNET_TIME_STD_EXPONENTIAL_BACKOFF_THRESHOLD    GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15)

Threshold after which exponential backoff should not increase (15 m).

Definition at line 169 of file gnunet_time_lib.h.

◆ GNUNET_TIME_STD_BACKOFF

#define GNUNET_TIME_STD_BACKOFF (   r)
Value:
struct GNUNET_TIME_Relative GNUNET_TIME_relative_min(struct GNUNET_TIME_Relative t1, struct GNUNET_TIME_Relative t2)
Return the minimum of two relative time values.
Definition: time.c:200
struct GNUNET_TIME_Relative GNUNET_TIME_relative_max(struct GNUNET_TIME_Relative t1, struct GNUNET_TIME_Relative t2)
Return the maximum of two relative time values.
Definition: time.c:208
#define GNUNET_TIME_UNIT_MILLISECONDS
One millisecond.
#define GNUNET_TIME_STD_EXPONENTIAL_BACKOFF_THRESHOLD
Threshold after which exponential backoff should not increase (15 m).

Perform our standard exponential back-off calculation, starting at 1 ms and then going by a factor of 2 up unto a maximum of 15 m.

Parameters
rcurrent backoff time, initially zero

Definition at line 179 of file gnunet_time_lib.h.

Function Documentation

◆ GNUNET_STRINGS_fancy_time_to_absolute()

int GNUNET_STRINGS_fancy_time_to_absolute ( const char *  fancy_time,
struct GNUNET_TIME_Absolute atime 
)

Convert a given fancy human-readable time to our internal representation.

The human-readable time is expected to be in local time, whereas the returned value will be in UTC.

Parameters
fancy_timehuman readable string (e.g. Y-m-d H:M:S)
atimeset to the absolute time
Returns
GNUNET_OK on success, GNUNET_SYSERR on error

Definition at line 326 of file strings.c.

328 {
329  struct tm tv;
330  time_t t;
331  const char *eos;
332 
333  if (0 == strcasecmp ("end of time", fancy_time))
334  {
336  return GNUNET_OK;
337  }
338  eos = &fancy_time[strlen (fancy_time)];
339  memset (&tv, 0, sizeof(tv));
340  if ((eos != strptime (fancy_time, "%a %b %d %H:%M:%S %Y", &tv)) &&
341  (eos != strptime (fancy_time, "%c", &tv)) &&
342  (eos != strptime (fancy_time, "%Ec", &tv)) &&
343  (eos != strptime (fancy_time, "%Y-%m-%d %H:%M:%S", &tv)) &&
344  (eos != strptime (fancy_time, "%Y-%m-%d %H:%M", &tv)) &&
345  (eos != strptime (fancy_time, "%x", &tv)) &&
346  (eos != strptime (fancy_time, "%Ex", &tv)) &&
347  (eos != strptime (fancy_time, "%Y-%m-%d", &tv)) &&
348  (eos != strptime (fancy_time, "%Y-%m", &tv)) &&
349  (eos != strptime (fancy_time, "%Y", &tv)))
350  return GNUNET_SYSERR;
351  t = mktime (&tv);
352  atime->abs_value_us = (uint64_t) ((uint64_t) t * 1000LL * 1000LL);
353  return GNUNET_OK;
354 }
static struct GNUNET_SCHEDULER_Task * t
Main task.
@ GNUNET_OK
Definition: gnunet_common.h:95
@ GNUNET_SYSERR
Definition: gnunet_common.h:93
#define GNUNET_TIME_UNIT_FOREVER_ABS
Constant used to specify "forever".
uint64_t abs_value_us
The actual value.

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_OK, GNUNET_SYSERR, GNUNET_TIME_UNIT_FOREVER_ABS, and t.

Referenced by database_setup(), GNUNET_GETOPT_option_absolute_time(), parse_expiration(), parse_record(), and sign_cb().

Here is the caller graph for this function:

◆ GNUNET_STRINGS_absolute_time_to_string()

const char* GNUNET_STRINGS_absolute_time_to_string ( struct GNUNET_TIME_Absolute  t)

Like asctime, except for GNUnet time.

Converts a GNUnet internal absolute time (which is in UTC) to a string in local time. Note that the returned value will be overwritten if this function is called again.

Parameters
tthe absolute time to convert
Returns
timestamp in human-readable form in local time

Definition at line 604 of file strings.c.

605 {
606  static GNUNET_THREAD_LOCAL char buf[255];
607  time_t tt;
608  struct tm *tp;
609 
610  if (t.abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us)
611  return "end of time";
612  tt = t.abs_value_us / 1000LL / 1000LL;
613  tp = localtime (&tt);
614  /* This is hacky, but i don't know a way to detect libc character encoding.
615  * Just expect utf8 from glibc these days.
616  * As for msvcrt, use the wide variant, which always returns utf16
617  * (otherwise we'd have to detect current codepage or use W32API character
618  * set conversion routines to convert to UTF8).
619  */strftime (buf, sizeof(buf), "%a %b %d %H:%M:%S %Y", tp);
620 
621  return buf;
622 }
static struct GNUNET_SCHEDULER_Task * tt
Task scheduled to handle timeout.
Definition: gnunet-abd.c:76
static char buf[2048]
#define GNUNET_THREAD_LOCAL
Definition: platform.h:246

References buf, GNUNET_THREAD_LOCAL, GNUNET_TIME_UNIT_FOREVER_ABS, t, and tt.

Referenced by display_record(), do_rekey(), dump_pc(), execute_get(), execute_select(), fragmented_message_done(), get_resp_callback(), GNUNET_CONTAINER_meta_data_add_publication_date(), GNUNET_GNSRECORD_JSON_from_gnsrecord(), got_hello(), handle_dht_response(), handle_p2p_estimate(), handle_validation_response(), inject_rekey(), monitor_cb(), monitor_notify_connect(), monitor_notify_disconnect(), namecache_sqlite_cache_block(), neighbours_changed_notification(), ns_lookup_result_cb(), parse_expiration(), perform_dht_put(), print_info(), print_plugin_event_info(), printer(), printer_watch(), process_queue(), process_record(), put_callback(), refresh_block(), select_loop(), set_state_and_timeout(), sqlite_plugin_put(), store_and_free_entries(), store_pi(), timeout_cb(), transmit_item(), transmit_task_cb(), update_pm_next_attempt(), and warn_monitor_slow().

Here is the caller graph for this function:

◆ GNUNET_STRINGS_relative_time_to_string()

const char* GNUNET_STRINGS_relative_time_to_string ( struct GNUNET_TIME_Relative  delta,
int  do_round 
)

Give relative time in human-readable fancy format.

This is one of the very few calls in the entire API that is NOT reentrant!

Parameters
deltatime in milli seconds
do_roundare we allowed to round a bit?
Returns
string in human-readable form

Definition at line 557 of file strings.c.

559 {
560  static GNUNET_THREAD_LOCAL char buf[128];
561  const char *unit = /* time unit */ "┬Ás";
562  uint64_t dval = delta.rel_value_us;
563 
564  if (GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us == delta.rel_value_us)
565  return "forever";
566  if (0 == delta.rel_value_us)
567  return "0 ms";
568  if (((GNUNET_YES == do_round) && (dval > 5 * 1000)) || (0 == (dval % 1000)))
569  {
570  dval = dval / 1000;
571  unit = /* time unit */ "ms";
572  if (((GNUNET_YES == do_round) && (dval > 5 * 1000)) || (0 == (dval % 1000)))
573  {
574  dval = dval / 1000;
575  unit = /* time unit */ "s";
576  if (((GNUNET_YES == do_round) && (dval > 5 * 60)) || (0 == (dval % 60)))
577  {
578  dval = dval / 60;
579  unit = /* time unit */ "m";
580  if (((GNUNET_YES == do_round) && (dval > 5 * 60)) || (0 == (dval % 60)))
581  {
582  dval = dval / 60;
583  unit = /* time unit */ "h";
584  if (((GNUNET_YES == do_round) && (dval > 5 * 24)) ||
585  (0 == (dval % 24)))
586  {
587  dval = dval / 24;
588  if (1 == dval)
589  unit = /* time unit */ "day";
590  else
591  unit = /* time unit */ "days";
592  }
593  }
594  }
595  }
596  }
597  GNUNET_snprintf (buf, sizeof(buf), "%llu %s",
598  (unsigned long long) dval, unit);
599  return buf;
600 }
static void do_round(void *cls)
Send out PUSHes and PULLs, possibly update #view, samplers.
@ GNUNET_YES
Definition: gnunet_common.h:97
int GNUNET_snprintf(char *buf, size_t size, const char *format,...) __attribute__((format(printf
Like snprintf, just aborts if the buffer is of insufficient size.
#define GNUNET_TIME_UNIT_FOREVER_REL
Constant used to specify "forever".
static struct GNUNET_TIME_Relative delta
Definition: speedup.c:35
uint64_t rel_value_us
The actual value.

References buf, delta, do_round(), GNUNET_snprintf(), GNUNET_THREAD_LOCAL, GNUNET_TIME_UNIT_FOREVER_REL, GNUNET_YES, and GNUNET_TIME_Relative::rel_value_us.

Referenced by ack_proc(), ats_reserve_callback(), channel_open_sent_cb(), client_receive(), client_receive_mst_cb(), client_session_timeout(), connect_fail_continuation(), consider_sending_fc(), data_sent_cb(), delay_warning(), delayed_restart_task(), disconnect_and_schedule_reconnect(), display_record(), do_directory_scan(), do_disconnect(), do_shutdown(), do_speedup(), experiment_done_cb(), expired_processor(), find_proof(), flush_bulk(), fragmented_message_done(), GNUNET_ATS_solver_logging_start(), GNUNET_ATS_solvers_experimentation_load(), GNUNET_ATS_solvers_experimentation_run(), GNUNET_BANDWIDTH_value_get_available_until(), GNUNET_DATASTORE_put(), GNUNET_GNSRECORD_JSON_from_gnsrecord(), GNUNET_HOSTLIST_client_start(), GNUNET_SCHEDULER_do_work(), GNUNET_SPEEDUP_start_(), GSC_CLIENTS_solicit_request(), GSF_block_peer_migration_(), GST_ats_block_address(), GST_ats_update_delay(), GST_manipulation_init(), GST_manipulation_send(), GST_neighbours_calculate_receive_delay(), GST_validation_start(), handle_announce(), handle_client_join(), handle_client_send(), handle_data(), handle_dv_learn(), handle_encrypted(), handle_monitor_event(), handle_p2p_migration_stop(), handle_p2p_put(), handle_send_transmit_continuation(), handle_tcp_data(), handler_advertisement(), http_client_plugin_update_inbound_delay(), http_server_plugin_update_inbound_delay(), interpreter_next(), list_callback(), load_episodes(), maint_child_death(), manage_first_hop_mq(), master_task(), monitor_cb(), odc_warn_delay_task(), parse_expiration(), plan(), print_plugin_event_info(), process_job_queue(), process_mst(), process_stat(), process_stdin(), prof_time(), progress_cb(), put_gns_record(), put_migration_continuation(), qc_message_sent(), queue_read(), queue_timeout(), quota_processor(), read_process_ack(), receive_ready(), RECLAIM_TICKETS_init(), reconnect(), regex_found_handler(), remove_timeout_messages_and_select(), reschedule_connect(), reservations_reserve(), revalidate_address(), run(), schedule_peer_transmission(), schedule_select_v4(), schedule_select_v6(), search_timed_out(), server_access_cb(), server_receive_mst_cb(), server_session_timeout(), session_timeout(), shutdown_task(), sqlite_plugin_put(), start_dv_learn(), store_completed_cb(), task_check(), task_hostlist_saving(), tcp_plugin_update_inbound_delay(), test_master(), timeout_cb(), timeout_episode(), transmit_item(), transmit_next(), try_reconnect(), try_transmission(), udp_plugin_send(), update_excess(), update_tracker(), update_velocity(), validation_start_cb(), warn_delay(), warn_delay_task(), warn_no_client_continue(), warn_no_receive_done(), and zone_iteration_finished().

Here is the call graph for this function:

◆ GNUNET_TIME_randomized_backoff()

struct GNUNET_TIME_Relative GNUNET_TIME_randomized_backoff ( struct GNUNET_TIME_Relative  rt,
struct GNUNET_TIME_Relative  threshold 
)

Randomized exponential back-off, starting at 1 ms and going up by a factor of 2+r, where 0 <= r <= 0.5, up to a maximum of the given threshold.

Parameters
rtcurrent backoff time, initially zero
thresholdmaximum value for backoff
Returns
the next backoff time

Definition at line 584 of file time.c.

637 {
638  double r = (rand () % 500) / 1000.0;
639  struct GNUNET_TIME_Relative t;
640 
643  2 + r);
645 }
static unsigned int threshold
What should the threshold for then key be?
Time for relative time used by GNUnet, in microseconds.
struct GNUNET_TIME_Relative relative_multiply_double(struct GNUNET_TIME_Relative rel, double factor)
Definition: time.c:331

Referenced by error_handler(), and validation_start_cb().

Here is the caller graph for this function:

◆ GNUNET_TIME_randomize()

struct GNUNET_TIME_Relative GNUNET_TIME_randomize ( struct GNUNET_TIME_Relative  r)

Return a random time value between 0.5*r and 1.5*r.

Parameters
rinput time for scaling
Returns
randomized time

Definition at line 584 of file time.c.

650 {
651  double d = ((rand () % 1001) + 500) / 1000.0;
652 
653  return relative_multiply_double (r, d);
654 }

Referenced by start_dv_learn().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_get_zero_()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_zero_ ( void  )

Return relative time of 0ms.

Definition at line 74 of file time.c.

101 {
102  static struct GNUNET_TIME_Relative zero;
103 
104  return zero;
105 }
static const struct GNUNET_IDENTITY_PrivateKey zero
Public key of all zeros.

Referenced by callback_verify_room_message(), create_handle(), delayed_disconnect_channel(), on_identity(), and solve_room_member_collisions().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_get_zero_()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_zero_ ( void  )

Return absolute time of 0ms.

Definition at line 74 of file time.c.

110 {
111  static struct GNUNET_TIME_Absolute zero;
112 
113  return zero;
114 }
Time for absolute times used by GNUnet, in microseconds.

Referenced by create_operation(), and stop_operation().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_get_unit_()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_unit_ ( void  )

Return relative time of 1 microsecond.

Definition at line 74 of file time.c.

119 {
120  static struct GNUNET_TIME_Relative one = { 1 };
121 
122  return one;
123 }

◆ GNUNET_TIME_relative_get_millisecond_()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_millisecond_ ( void  )

Return relative time of 1ms.

Definition at line 74 of file time.c.

128 {
129  static struct GNUNET_TIME_Relative one = { 1000 };
130 
131  return one;
132 }

◆ GNUNET_TIME_relative_get_second_()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_second_ ( void  )

Return relative time of 1s.

Definition at line 74 of file time.c.

137 {
138  static struct GNUNET_TIME_Relative one = { 1000 * 1000LL };
139 
140  return one;
141 }

Referenced by login_cont().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_get_minute_()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_minute_ ( void  )

Return relative time of 1 minute.

Definition at line 74 of file time.c.

146 {
147  static struct GNUNET_TIME_Relative one = { 60 * 1000 * 1000LL };
148 
149  return one;
150 }

Referenced by register_reciever().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_get_hour_()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_hour_ ( void  )

Return relative time of 1 hour.

Definition at line 74 of file time.c.

155 {
156  static struct GNUNET_TIME_Relative one = { 60 * 60 * 1000 * 1000LL };
157 
158  return one;
159 }

◆ GNUNET_TIME_relative_get_forever_()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_forever_ ( void  )

Return "forever".

Definition at line 74 of file time.c.

164 {
165  static struct GNUNET_TIME_Relative forever = { UINT64_MAX };
166 
167  return forever;
168 }

Referenced by delete_room_message(), and main().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_get_forever_()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_forever_ ( void  )

Return "forever".

Definition at line 74 of file time.c.

173 {
174  static struct GNUNET_TIME_Absolute forever = { UINT64_MAX };
175 
176  return forever;
177 }

◆ GNUNET_TIME_absolute_get()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get ( void  )

Get the current time.

Returns
the current time

Definition at line 74 of file time.c.

87 {
89  struct timeval tv;
90 
91  gettimeofday (&tv, NULL);
92  ret.abs_value_us = (uint64_t) (((uint64_t) tv.tv_sec * 1000LL * 1000LL)
93  + ((uint64_t) tv.tv_usec))
95  return ret;
96 }
static int ret
Return value of the commandline.
Definition: gnunet-abd.c:81
static long long timestamp_offset
Variable used to simulate clock skew.
Definition: time.c:45

Referenced by ack_proc(), add_valid_address(), add_without_sets(), announce_id(), batch_run(), block_create_ecdsa(), block_create_eddsa(), cache_nick(), check_vl_transmission(), cleanup_expired_records(), client_receive(), client_receive_mst_cb(), code_redirect(), consider_for_advertising(), consider_path_cb(), continue_store_activity(), convert_records_for_export(), cookie_identity_interpretation(), core_init(), create_download_context(), create_member_session(), create_peers(), create_session(), cron_clean_data_hosts(), cummulative_ack(), data_sent_cb(), dht_connect_cb(), do_directory_scan(), do_transmit(), event_cb(), expire_blocks(), expired_processor(), find_proof(), flush_bulk(), GAS_addresses_add(), GAS_addresses_update(), GCC_handle_connection_create_ack(), GCC_handle_encrypted(), GCC_transmit(), GCT_add_inbound_connection(), GDS_ROUTING_add(), get_age(), get_nick_record(), get_redirect_state(), GNUNET_ATS_solver_generate_preferences_start(), GNUNET_ATS_solver_generate_property_start(), GNUNET_ATS_solver_logging_now(), GNUNET_ATS_solvers_experimentation_run(), GNUNET_BANDWIDTH_tracker_init2(), GNUNET_CONTAINER_meta_data_add_publication_date(), GNUNET_CRYPTO_random_timeflake(), GNUNET_FS_publish_main_(), GNUNET_FS_queue_(), GNUNET_FS_search_probe_progress_(), GNUNET_FS_unindex_start(), GNUNET_LOAD_value_init(), GNUNET_SCHEDULER_add_at_with_priority(), GNUNET_SCHEDULER_add_now(), GNUNET_SCHEDULER_add_select(), GNUNET_SCHEDULER_add_shutdown(), GNUNET_SCHEDULER_add_with_reason_and_priority(), GNUNET_SCHEDULER_do_work(), GNUNET_SCHEDULER_run(), GNUNET_SERVER_connect_socket(), GNUNET_SERVER_inject(), GNUNET_TESTING_cmd_batch_next(), GNUNET_TIME_absolute_from_ms(), GNUNET_TIME_absolute_is_past(), GSC_KX_encrypt_and_transmit(), GSC_SESSIONS_set_typemap(), GSF_peer_transmit_(), GSF_pending_request_create_(), GSF_pending_request_get_message_(), GST_validation_start(), handle_client_send(), handle_client_send_request(), handle_connection_create(), handle_dht_local_get(), handle_dht_reply(), handle_dummy(), handle_dv_learn(), handle_ephemeral_key(), handle_fragment_box(), handle_icmp_back(), handle_message_delete(), handle_monitor_event(), handle_monitor_next(), handle_p2p_estimate(), handle_p2p_put(), handle_stop(), handle_tcp_back(), handle_tcp_data(), handle_tcp_nat_probe(), handle_tcp_welcome(), handle_udp_back(), handler_advertisement(), hello_world_birth_run(), insert_sorted(), interpreter_next(), interpreter_run(), iterate_zones(), iteration_start(), lookup_authz_cb(), manage_first_hop_mq(), merge_with_nick_records(), monitor_cb(), monitor_notify_connect(), monitor_notify_disconnect(), monitor_unblock(), mylog(), mysql_plugin_get_expiration(), namecache_postgres_expire_blocks(), namecache_sqlite_cache_block(), namecache_sqlite_expire_blocks(), notify_connect(), OIDC_generate_id_token(), pack_room_message(), peer_transmit(), postgres_plugin_del(), postgres_plugin_get(), postgres_plugin_get_closest(), postgres_plugin_get_expiration(), postgres_plugin_get_random(), prepare_pending_acknowledgement(), printer(), printer_watch(), process_incoming(), process_local_reply(), process_queue(), process_result(), process_rq_task(), process_stdin(), progress_cb(), put_gns_record(), read_host_file(), read_process_fragment(), read_start_time(), read_stdio(), RECLAIM_TICKETS_consume(), remove_expired(), route_message(), route_packet(), RPS_sampler_elem_reinit(), run(), run_edkey(), run_finish_task_sync(), run_pkey(), run_zone_iteration_round(), sample_load_task(), sampler_mod_get_rand_peer(), scan(), schedule_peer_transmission(), search_start(), select_best_pending_from_link(), send_disconnect(), send_keepalive(), send_kx(), send_kx_auth(), send_syn(), send_utilization_data(), service_client_mst_cb(), session_disconnect_adapter(), set_feedback_task(), setup_estimate_message(), setup_neighbour(), setup_state_record(), shutdown_task(), sign_ephemeral_key(), solver_bandwidth_changed_cb(), sqlite_plugin_del(), sqlite_plugin_get(), sqlite_plugin_get_closest(), sqlite_plugin_get_expiration(), start_address_validation(), start_dht_request(), start_download(), start_dv_learn(), start_finish_on_ref(), start_job(), start_local_query(), start_operation(), start_peers_task(), start_process(), start_publish(), stat_iterator(), store_completed_cb(), store_skipped_key(), switch_member_session(), t_ax_encrypt(), test_exist_cb(), tmt_rdy_ping(), transmit_next(), transmit_ping_if_allowed(), transmit_ready_callback_wrapper(), try_transmission(), udp_plugin_create_session(), udp_plugin_send(), udp_select_send(), unix_plugin_send(), update_active_address(), update_ax_by_kx(), update_excess(), update_hello(), update_hostlist(), update_tracker(), update_velocity(), updateAgedLoad(), and wait_op_completion().

◆ GNUNET_TIME_relative_to_absolute()

struct GNUNET_TIME_Absolute GNUNET_TIME_relative_to_absolute ( struct GNUNET_TIME_Relative  rel)

Convert relative time to an absolute time in the future.

Parameters
relrelative time to convert
Returns
timestamp that is "rel" in the future, or FOREVER if rel==FOREVER (or if we would overflow)

Definition at line 74 of file time.c.

182 {
183  struct GNUNET_TIME_Absolute ret;
184 
185  if (rel.rel_value_us == UINT64_MAX)
188 
189  if (rel.rel_value_us + now.abs_value_us < rel.rel_value_us)
190  {
191  GNUNET_break (0); /* overflow... */
193  }
194  ret.abs_value_us = rel.rel_value_us + now.abs_value_us;
195  return ret;
196 }
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get()
Get the current time.
Definition: time.c:86

Referenced by add_setter_action(), add_without_sets(), boot_queue(), cadet_reply_proc(), check_for_glue(), check_for_rekeying(), client_receive_mst_cb(), client_reschedule_session_timeout(), create_macendpoint(), create_session(), data_sent_cb(), do_dht_put(), download_hostlist(), forward_dv_box(), GNUNET_CONNECTION_notify_transmit_ready(), GNUNET_CONNECTION_receive(), GNUNET_DNSPARSER_parse_record(), GNUNET_OS_command_run(), GNUNET_RESOLVER_hostname_get(), GNUNET_RESOLVER_ip_get(), GNUNET_SCHEDULER_add_delayed_with_priority(), GNUNET_SCHEDULER_add_select(), GSC_SESSIONS_transmit(), GSF_pending_request_create_(), GST_ats_block_address(), GST_manipulation_send(), GST_neighbours_calculate_receive_delay(), GST_neighbours_handle_session_ack(), GST_neighbours_handle_session_syn(), GST_neighbours_handle_session_syn_ack(), GST_neighbours_send(), GST_neighbours_session_terminated(), GST_validation_handle_ping(), GST_validation_handle_pong(), handle_client_call_message(), handle_dht_reply(), handle_dv_box(), handle_dv_learn(), handle_find_peer(), handle_fragment_box(), handle_gns_resolution_result(), handle_p2p_migration_stop(), handle_p2p_put(), handle_reliability_box(), handle_validation_response(), http_client_plugin_get_session(), http_client_plugin_update_inbound_delay(), http_server_plugin_update_inbound_delay(), learn_dv_path(), listen_cb(), login_cont(), maint_child_death(), make_file(), master_task(), modify_address(), mq_init(), ns_lookup_result_cb(), plan(), process_data(), process_record(), process_result(), publish_fs_connect_complete_cb(), put_migration_continuation(), refresh_hello_task(), regex_iterator(), reschedule_queue_timeout(), reschedule_receiver_timeout(), reschedule_sender_timeout(), reschedule_session_timeout(), revalidate_address(), run(), schedule_next_hello(), send_create(), send_create_ack(), send_keepalive(), send_kx(), send_kx_auth(), send_session_syn_ack_cont(), send_session_syn_cont(), send_syn(), send_syn_ack_message(), send_with_fragmentation(), server_lookup_connection(), server_receive_mst_cb(), server_reschedule_session_timeout(), setup_filter(), setup_out_cipher(), setup_queue(), setup_sender(), sign_ephemeral_key(), start_address_validation(), store_pi(), switch_address_bl_check_cont(), tcp_plugin_send(), tcp_plugin_update_inbound_delay(), transmit_next(), transmit_on_queue(), transmit_ping_if_allowed(), transmit_request(), udp_plugin_create_session(), udp_plugin_send(), unix_plugin_get_session(), update_timeout(), validation_start_cb(), vpn_allocation_cb(), and wlan_plugin_update_session_timeout().

◆ GNUNET_TIME_round_abs()

int GNUNET_TIME_round_abs ( struct GNUNET_TIME_Absolute at)

Round a time value so that it is suitable for transmission via JSON encodings.

Parameters
attime to round
Returns
GNUNET_OK if time was already rounded, GNUNET_NO if it was just now rounded

Definition at line 62 of file time.c.

63 {
64  if (at->abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us)
65  return GNUNET_OK;
66  if (0 == at->abs_value_us % 1000000)
67  return GNUNET_OK;
68  at->abs_value_us -= at->abs_value_us % 1000000;
69  return GNUNET_NO;
70 }
@ GNUNET_NO
Definition: gnunet_common.h:94

References GNUNET_TIME_Absolute::abs_value_us, GNUNET_NO, GNUNET_OK, and GNUNET_TIME_UNIT_FOREVER_ABS.

Referenced by GNUNET_JSON_from_time_abs().

Here is the caller graph for this function:

◆ GNUNET_TIME_round_rel()

int GNUNET_TIME_round_rel ( struct GNUNET_TIME_Relative rt)

Round a time value so that it is suitable for transmission via JSON encodings.

Parameters
rttime to round
Returns
GNUNET_OK if time was already rounded, GNUNET_NO if it was just now rounded

Definition at line 74 of file time.c.

75 {
76  if (rt->rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us)
77  return GNUNET_OK;
78  if (0 == rt->rel_value_us % 1000000)
79  return GNUNET_OK;
80  rt->rel_value_us -= rt->rel_value_us % 1000000;
81  return GNUNET_NO;
82 }

Referenced by GNUNET_JSON_from_time_rel().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_min()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_min ( struct GNUNET_TIME_Relative  t1,
struct GNUNET_TIME_Relative  t2 
)

Return the minimum of two relative time values.

Parameters
t1first timestamp
t2other timestamp
Returns
timestamp that is smaller

Definition at line 74 of file time.c.

202 {
203  return (t1.rel_value_us < t2.rel_value_us) ? t1 : t2;
204 }

Referenced by announce_id(), calculate_put_interval(), check_timeouts(), check_zone_namestore_next(), delayed_restart_task(), download_prepare(), find_advertisable_hello(), find_min_max_it(), GNUNET_FRAGMENT_process_ack(), handle_validation_response(), master_task(), process_job_queue(), put_migration_continuation(), reconnect(), revalidate_address(), schedule_next_put(), schedule_next_task(), start_address_validation(), and try_connect_using_address().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_max()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_max ( struct GNUNET_TIME_Relative  t1,
struct GNUNET_TIME_Relative  t2 
)

Return the maximum of two relative time values.

Parameters
t1first timestamp
t2other timestamp
Returns
timestamp that is larger

Definition at line 74 of file time.c.

210 {
211  return (t1.rel_value_us > t2.rel_value_us) ? t1 : t2;
212 }

Referenced by announce_id(), consider_gathering(), data_sent_cb(), find_min_max_it(), put_migration_continuation(), reconnect(), schedule_next_task(), send_keep_alive(), and transmit_next().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_min()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_min ( struct GNUNET_TIME_Absolute  t1,
struct GNUNET_TIME_Absolute  t2 
)

Return the minimum of two absolute time values.

Parameters
t1first timestamp
t2other timestamp
Returns
timestamp that is smaller

Definition at line 74 of file time.c.

218 {
219  return (t1.abs_value_us < t2.abs_value_us) ? t1 : t2;
220 }

Referenced by cadet_reply_proc(), cummulative_ack(), find_other_matching(), handle_dht_reply(), handle_p2p_put(), handle_validation_response(), ns_lookup_result_cb(), process_result(), and try_transmission().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_max()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_max ( struct GNUNET_TIME_Absolute  t1,
struct GNUNET_TIME_Absolute  t2 
)

Return the maximum of two absolute time values.

Parameters
t1first timestamp
t2other timestamp
Returns
timestamp that is smaller

Definition at line 74 of file time.c.

226 {
227  return (t1.abs_value_us > t2.abs_value_us) ? t1 : t2;
228 }

Referenced by add_valid_address(), check_link_down(), find_max_expire(), handle_dht_result(), learn_dv_path(), neighbour_dv_monotime_cb(), put_cb(), timeout_hello_validation(), transmit_ping_if_allowed(), udp_select_send(), and update_iterator().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_get_remaining()

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?

Parameters
futuresome absolute time, typically in the future
Returns
future - now, or 0 if now >= future, or FOREVER if future==FOREVER.

Definition at line 74 of file time.c.

233 {
234  struct GNUNET_TIME_Relative ret;
235 
236  if (future.abs_value_us == UINT64_MAX)
239 
240  if (now.abs_value_us > future.abs_value_us)
241  return GNUNET_TIME_UNIT_ZERO;
242  ret.rel_value_us = future.abs_value_us - now.abs_value_us;
243  return ret;
244 }
#define GNUNET_TIME_UNIT_ZERO
Relative time zero.

Referenced by add_record(), add_valid_address(), announce_id(), backtalker_timeout_cb(), check_for_glue(), check_for_rekeying(), check_has_addr(), check_link_down(), check_timeouts(), client_session_timeout(), cmd_read(), connect_success_continuation(), connection_ready_cb(), consider_peer_destroy(), core_read_finished_cb(), count_address(), data_sent_cb(), datacache_get_iterator(), delayed_restart_task(), display_record(), do_dht_put(), download_prepare(), find_advertisable_hello(), get_cb(), GNUNET_CONNECTION_notify_transmit_ready(), GNUNET_CONNECTION_receive(), GNUNET_DATASTORE_put(), GNUNET_GNSRECORD_is_expired(), GNUNET_SCHEDULER_add_at_with_priority(), GSF_block_peer_migration_(), GST_validation_handle_ping(), GST_validation_handle_pong(), handle_cadet_ring_message(), handle_dht_p2p_put(), handle_dht_p2p_result(), handle_dht_response(), handle_encrypted(), handle_namecache_block_response(), learn_dv_path(), list_callback(), load_operation(), macendpoint_timeout(), master_task(), monitor_cb(), path_cleanup_cb(), pick_random_dv_hops(), plan(), print_address(), print_plugin_event_info(), process_hello(), process_incoming(), process_job_queue(), process_migration_content(), process_pending_messages(), process_queue(), process_record(), proto_read_kx(), put_migration_continuation(), queue_read(), queue_read_kx(), queue_timeout(), queue_write(), quota_processor(), reassembly_cleanup_task(), remove_timeout_messages_and_select(), revalidate_address(), revive_migration(), schedule_next_hello(), schedule_peer_transmission(), schedule_select_v4(), schedule_select_v6(), select_loop(), send_keep_alive(), send_keepalive(), server_access_cb(), server_session_timeout(), session_timeout(), sqlite_plugin_put(), t_ax_encrypt(), task_download(), timeout_cb(), timeout_hello_validation(), transmit_item(), transmit_next_request_task(), transmit_ready(), try_connect_using_address(), try_transmission(), try_transmission_to_peer(), udp_plugin_send(), unix_plugin_do_write(), update_ephemeral(), update_flood_message(), validate_address_iterator(), and validation_start_cb().

◆ GNUNET_TIME_calculate_eta()

struct GNUNET_TIME_Relative GNUNET_TIME_calculate_eta ( struct GNUNET_TIME_Absolute  start,
uint64_t  finished,
uint64_t  total 
)

Calculate the estimate time of arrival/completion for an operation.

Parameters
startwhen did the operation start?
finishedhow much has been done?
totalhow much must be done overall (same unit as for "finished")
Returns
remaining duration for the operation, assuming it continues at the same speed

Definition at line 74 of file time.c.

393 {
394  struct GNUNET_TIME_Relative due;
395  double exp;
396  struct GNUNET_TIME_Relative ret;
397 
398  GNUNET_break (finished <= total);
399  if (finished >= total)
400  return GNUNET_TIME_UNIT_ZERO;
401  if (0 == finished)
404  exp = ((double) due.rel_value_us) * ((double) total) / ((double) finished);
405  ret.rel_value_us = ((uint64_t) exp) - due.rel_value_us;
406  return ret;
407 }
static int start
Set if we are to start default services (including ARM).
Definition: gnunet-arm.c:39
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_duration(struct GNUNET_TIME_Absolute whence)
Get the duration of an operation as the difference of the current time and the given start time "henc...
Definition: time.c:263

Referenced by GNUNET_FS_download_make_status_(), GNUNET_FS_publish_make_status_(), GNUNET_FS_unindex_make_status_(), and progress_proc().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_get_difference()

struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_difference ( struct GNUNET_TIME_Absolute  start,
struct GNUNET_TIME_Absolute  end 
)

Compute the time difference between the given start and end times.

Use this function instead of actual subtraction to ensure that "FOREVER" and overflows are handled correctly.

Parameters
startsome absolute time
endsome absolute time (typically larger or equal to start)
Returns
0 if start >= end; FOREVER if end==FOREVER; otherwise end - start

Definition at line 74 of file time.c.

250 {
251  struct GNUNET_TIME_Relative ret;
252 
253  if (end.abs_value_us == UINT64_MAX)
255  if (end.abs_value_us < start.abs_value_us)
256  return GNUNET_TIME_UNIT_ZERO;
257  ret.rel_value_us = end.abs_value_us - start.abs_value_us;
258  return ret;
259 }
static int end
Set if we are to shutdown all services (including ARM).
Definition: gnunet-arm.c:34

Referenced by callback_verify_room_message(), client_receive(), expire_blocks(), expired_processor(), GNUNET_ATS_solver_logging_write_to_disk(), handle_client_join(), handle_message_delete(), hello_world_birth_run(), sampler_mod_get_rand_peer(), send_utilization_data(), solve_room_member_collisions(), and update_timeout().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_get_duration()

struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_duration ( struct GNUNET_TIME_Absolute  whence)

Get the duration of an operation as the difference of the current time and the given start time "hence".

Parameters
whencesome absolute time, typically in the past
Returns
0 if hence > now, otherwise now-hence.

Definition at line 74 of file time.c.

264 {
265  struct GNUNET_TIME_Absolute now;
266  struct GNUNET_TIME_Relative ret;
267 
268  now = GNUNET_TIME_absolute_get ();
269  if (whence.abs_value_us > now.abs_value_us)
270  return GNUNET_TIME_UNIT_ZERO;
271  ret.rel_value_us = now.abs_value_us - whence.abs_value_us;
272  return ret;
273 }

Referenced by consider_sending_fc(), do_directory_scan(), do_shutdown(), evaluate_connection(), find_best_address_it(), find_proof(), flush_bulk(), forward_dv_learn(), fragmented_message_done(), get_preference(), get_property(), GNUNET_ATS_solver_logging_now(), GNUNET_BANDWIDTH_tracker_get_available(), GNUNET_FRAGMENT_process_ack(), GNUNET_FS_download_make_status_(), GNUNET_FS_publish_make_status_(), GNUNET_FS_search_make_status_(), GNUNET_FS_search_probe_progress_(), GNUNET_FS_unindex_make_status_(), GNUNET_SCHEDULER_do_work(), GSC_CLIENTS_solicit_request(), GSF_peer_update_performance_(), GSF_update_datastore_delay_(), GST_neighbours_calculate_receive_delay(), GST_validation_handle_pong(), handle_acknowledged(), handle_client_send(), handle_data(), handle_encrypted(), handle_fragment_box(), handle_matching_ack(), handle_monitor_event(), handle_result(), handle_send_transmit_continuation(), handle_validation_response(), internal_update(), interpreter_next(), iteration_done(), lookup_authz_cb(), maint_child_death(), mylog(), namecache_sqlite_cache_block(), notify_client_chk_update(), odc_warn_delay_task(), peer_transmit(), process_parallel_lookup_result(), process_queue(), process_reply(), process_result(), process_result_with_request(), process_stdin(), prof_time(), progress_cb(), put_gns_record(), put_migration_continuation(), qc_message_sent(), receive_ready(), regex_found_handler(), run(), run_zone_iteration_round(), schedule_next_task(), set_feedback_task(), shutdown_task(), signal_probe_result(), solver_bandwidth_changed_cb(), stop_job(), store_completed_cb(), test_master(), timeout_episode(), timeout_experiment(), transmit_cummulative_ack_cb(), update_tslots(), update_velocity(), updateAgedLoad(), warn_delay_task(), warn_no_client_continue(), warn_no_receive_done(), and write_start_time().

◆ GNUNET_TIME_absolute_add()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_add ( struct GNUNET_TIME_Absolute  start,
struct GNUNET_TIME_Relative  duration 
)

Add a given relative duration to the given start time.

Parameters
startsome absolute time
durationsome relative time to add
Returns
FOREVER if either argument is FOREVER or on overflow; start+duration otherwise

Definition at line 74 of file time.c.

279 {
280  struct GNUNET_TIME_Absolute ret;
281 
282  if ((start.abs_value_us == UINT64_MAX) ||
283  (duration.rel_value_us == UINT64_MAX))
285  if (start.abs_value_us + duration.rel_value_us < start.abs_value_us)
286  {
287  GNUNET_break (0);
289  }
290  ret.abs_value_us = start.abs_value_us + duration.rel_value_us;
291  return ret;
292 }
static struct GNUNET_TIME_Relative duration
How long do we run the test?

Referenced by announce_id(), block_create_ecdsa(), block_create_eddsa(), core_init(), enqueue_fragment(), handle_ephemeral_key(), handle_message_delete(), OIDC_generate_id_token(), process_incoming(), process_job_queue(), process_queue(), run(), session_disconnect_adapter(), start_operation(), t_ax_encrypt(), timeout_cb(), udp_plugin_send(), unix_plugin_send(), update_ax_by_kx(), update_ephemeral(), update_flood_message(), and update_next_challenge_time().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_subtract()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_subtract ( struct GNUNET_TIME_Absolute  start,
struct GNUNET_TIME_Relative  duration 
)

Subtract a given relative duration from the given start time.

Parameters
startsome absolute time
durationsome relative time to subtract
Returns
ZERO if start <= duration, or FOREVER if start time is FOREVER; start-duration otherwise

Definition at line 74 of file time.c.

298 {
299  struct GNUNET_TIME_Absolute ret;
300 
301  if (start.abs_value_us <= duration.rel_value_us)
303  if (start.abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us)
305  ret.abs_value_us = start.abs_value_us - duration.rel_value_us;
306  return ret;
307 }
#define GNUNET_TIME_UNIT_ZERO_ABS
Absolute time zero.

Referenced by GSF_pending_request_create_(), handle_ephemeral_key(), handle_validation_response(), and read_start_time().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_multiply()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply ( struct GNUNET_TIME_Relative  rel,
unsigned long long  factor 
)

Multiply relative time by a given factor.

Parameters
relsome duration
factorinteger to multiply with
Returns
FOREVER if rel=FOREVER or on overflow; otherwise rel*factor

Definition at line 74 of file time.c.

313 {
314  struct GNUNET_TIME_Relative ret;
315 
316  if (0 == factor)
317  return GNUNET_TIME_UNIT_ZERO;
318  if (rel.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us)
320  ret.rel_value_us = rel.rel_value_us * factor;
321  if (ret.rel_value_us / factor != rel.rel_value_us)
322  {
323  GNUNET_break (0);
325  }
326  return ret;
327 }

Referenced by announce_next_regex(), ats_perf_cb(), ats_perf_mon_cb(), attempt_connect_task(), barrier2_cb(), check_zone_namestore_next(), churn(), cleanup_expired_records(), client_schedule(), connection_create(), consider_gathering(), context_task(), create_macendpoint(), curl_download_prepare(), download_prepare(), expire_records_continuation(), GNUNET_DNSPARSER_parse_record(), GNUNET_REVOCATION_pow_start(), GNUNET_RPS_sub_start(), GNUNET_STATISTICS_destroy(), GNUNET_TESTBED_run(), GSF_pending_request_create_(), handle_connection_create(), handle_dv_learn(), handle_fragment_box(), handle_p2p_put(), handle_validation_response(), helper_read(), helper_write(), init(), iter_finished(), libgnunet_plugin_transport_udp_init(), login_cont(), lookup_authz_cb(), main(), peer_id_cb(), plan(), process_job_queue(), profiler_cb(), reannounce_regex(), reconnect(), register_sender(), revalidate_address(), run(), run_httpd(), schedule_missing_requests(), schedule_next_put(), send_hello(), send_hello_beacon(), start_dv_learn(), start_helper(), start_test(), task_check(), test_master(), timeout_cb(), transmit_on_queue(), and udp_plugin_create_session().

◆ GNUNET_TIME_relative_saturating_multiply()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_saturating_multiply ( struct GNUNET_TIME_Relative  rel,
unsigned long long  factor 
)

Saturating multiply relative time by a given factor.

Parameters
relsome duration
factorinteger to multiply with
Returns
FOREVER if rel=FOREVER or on overflow; otherwise rel*factor

Definition at line 74 of file time.c.

359 {
360  struct GNUNET_TIME_Relative ret;
361 
362  if (0 == factor)
363  return GNUNET_TIME_UNIT_ZERO;
364  if (rel.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us)
366  ret.rel_value_us = rel.rel_value_us * factor;
367  if (ret.rel_value_us / factor != rel.rel_value_us)
368  {
370  }
371  return ret;
372 }

Referenced by daemon_started(), GNUNET_FRAGMENT_context_destroy(), GNUNET_FRAGMENT_process_ack(), GNUNET_FS_search_start_probe_(), process_job_queue(), put_migration_continuation(), reconnect(), schedule_next_task(), transmit_next(), and update_excess().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_divide()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_divide ( struct GNUNET_TIME_Relative  rel,
unsigned long long  factor 
)

Divide relative time by a given factor.

Parameters
relsome duration
factorinteger to divide by
Returns
FOREVER if rel=FOREVER or factor==0; otherwise rel/factor

Definition at line 74 of file time.c.

378 {
379  struct GNUNET_TIME_Relative ret;
380 
381  if ((0 == factor) ||
382  (rel.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us))
384  ret.rel_value_us = rel.rel_value_us / factor;
385  return ret;
386 }

Referenced by adapt_parallelism(), add_valid_address(), calculate_put_interval(), consider_gathering(), do_shutdown(), find_proof(), GST_neighbours_calculate_receive_delay(), GST_validation_handle_pong(), handle_dv_learn(), handle_reliability_box(), peerstore_store_own_cb(), run_zone_iteration_round(), schedule_next_put(), send_keep_alive(), start_address_validation(), store_completed_cb(), udp_plugin_send(), and update_timeout().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_add()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_add ( struct GNUNET_TIME_Relative  a1,
struct GNUNET_TIME_Relative  a2 
)

Add relative times together.

Parameters
a1some relative time
a2some other relative time
Returns
FOREVER if either argument is FOREVER or on overflow; a1+a2 otherwise

Definition at line 74 of file time.c.

413 {
414  struct GNUNET_TIME_Relative ret;
415 
416  if ((a1.rel_value_us == UINT64_MAX) || (a2.rel_value_us == UINT64_MAX))
418  if (a1.rel_value_us + a2.rel_value_us < a1.rel_value_us)
419  {
420  GNUNET_break (0);
422  }
423  ret.rel_value_us = a1.rel_value_us + a2.rel_value_us;
424  return ret;
425 }

Referenced by adapt_parallelism(), forward_dv_learn(), load_episodes(), process_queue(), process_result(), revalidate_address(), run(), sign_ephemeral_key(), stop_job(), store_completed_cb(), update_tslots(), and update_velocity().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_subtract()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_subtract ( struct GNUNET_TIME_Relative  a1,
struct GNUNET_TIME_Relative  a2 
)

Subtract relative timestamp from the other.

Parameters
a1first timestamp
a2second timestamp
Returns
ZERO if a2>=a1 (including both FOREVER), FOREVER if a1 is FOREVER, a1-a2 otherwise

Definition at line 74 of file time.c.

431 {
432  struct GNUNET_TIME_Relative ret;
433 
434  if (a2.rel_value_us >= a1.rel_value_us)
435  return GNUNET_TIME_UNIT_ZERO;
436  if (a1.rel_value_us == UINT64_MAX)
438  ret.rel_value_us = a1.rel_value_us - a2.rel_value_us;
439  return ret;
440 }

Referenced by check_zone_namestore_next(), GNUNET_FS_search_probe_progress_(), handle_acknowledged(), handle_dv_learn(), learn_dv_path(), store_completed_cb(), and update_velocity().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_hton()

struct GNUNET_TIME_RelativeNBO GNUNET_TIME_relative_hton ( struct GNUNET_TIME_Relative  a)

Convert relative time to network byte order.

Parameters
atime to convert
Returns
converted time value

Definition at line 74 of file time.c.

445 {
447 
448  ret.rel_value_us__ = GNUNET_htonll (a.rel_value_us);
449  return ret;
450 }
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
Definition: common_endian.c:36
Time for relative time used by GNUnet, in microseconds and in network byte order.

Referenced by announce_reconnect(), create_message_delete(), forward_dv_learn(), GAS_handle_reservation_request(), GNUNET_ATS_performance_give_feedback(), GNUNET_ATS_properties_hton(), GNUNET_REVOCATION_pow_start(), GNUNET_RPS_sub_start(), GNUNET_TRANSPORT_address_to_string(), GNUNET_TRANSPORT_communicator_receive(), GNUNET_TRANSPORT_manipulation_set(), GSF_block_peer_migration_(), mq_send_impl(), notify_monitor(), send_add_address(), start_dv_learn(), and transmit_cummulative_ack_cb().

Here is the caller graph for this function:

◆ GNUNET_TIME_relative_ntoh()

struct GNUNET_TIME_Relative GNUNET_TIME_relative_ntoh ( struct GNUNET_TIME_RelativeNBO  a)

Convert relative time from network byte order.

Parameters
atime to convert
Returns
converted time value

Definition at line 74 of file time.c.

455 {
456  struct GNUNET_TIME_Relative ret;
457 
458  ret.rel_value_us = GNUNET_ntohll (a.rel_value_us__);
459  return ret;
460 }
uint64_t GNUNET_ntohll(uint64_t n)
Convert unsigned 64-bit integer to host byte order.
Definition: common_endian.c:53
uint64_t rel_value_us__
The actual value (in network byte order).

Referenced by forward_dv_learn(), GNUNET_ATS_properties_ntoh(), GST_manipulation_set_metric(), handle_add_address(), handle_announce(), handle_client_address_to_string(), handle_client_send(), handle_client_start_sub(), handle_dv_learn(), handle_feedback(), handle_message_delete(), handle_monitor_data(), handle_p2p_migration_stop(), handle_reliability_ack(), handle_reservation_result(), and handle_validation_response().

Here is the caller graph for this function:

◆ GNUNET_TIME_absolute_hton()

struct GNUNET_TIME_AbsoluteNBO GNUNET_TIME_absolute_hton ( struct GNUNET_TIME_Absolute  a)

Convert absolute time to network byte order.

Parameters
atime to convert
Returns
converted time value

Definition at line 74 of file time.c.

465 {
467 
468  ret.abs_value_us__ = GNUNET_htonll (a.abs_value_us);
469  return ret;
470 }
Time for absolute time used by GNUnet, in microseconds and in network byte order.

Referenced by block_create_ecdsa(), block_create_eddsa(), client_response_handler(), consider_sending_fc(), create_loc_uri(), do_dht_put(), extract_abs_time_nbo(), forward_reply(), GDS_CLIENTS_process_get_resp(), GDS_CLIENTS_process_put(), GDS_NEIGHBOURS_handle_put(), GDS_NEIGHBOURS_handle_reply(), get_cb(), GNUNET_CONSENSUS_create(), GNUNET_DATASTORE_put(), GNUNET_DHT_put(), GNUNET_FS_uri_loc_create(), GNUNET_HELLO_add_address(), GNUNET_HELLO_extract_address(), GNUNET_HELLO_sign_address(), GNUNET_JSON_spec_absolute_time_nbo(), GNUNET_SECRETSHARING_create_session(), GNUNET_SECRETSHARING_decrypt(), GSC_KX_encrypt_and_transmit(), GST_clients_broadcast_peer_notification(), GST_validation_handle_ping(), handle_client_call_message(), handle_client_loc_sign(), handle_datastore_reply(), handle_list(), handle_lookup_block_it(), handle_p2p_reply(), inject_rekey(), monitor_notify_all(), mq_send_kx(), notify_monitor(), pack_room_message(), PEERSTORE_create_record_mq_envelope(), plugin_session_info_cb(), regex_iterator(), send_challenge(), send_create(), send_disconnect(), send_peer_information(), send_request(), send_syn(), send_syn_ack_message(), setup_estimate_message(), setup_flood_message(), sign_ephemeral_key(), start_dv_learn(), tmt_rdy_ping(), transmit_content(), transmit_item(), transmit_kx(), transmit_status(), update_backtalker_monotime(), uri_loc_parse(), and validation_transmit_on_queue().

◆ GNUNET_TIME_absolute_from_ms()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_from_ms ( uint64_t  ms_after_epoch)

Convert milliseconds after the UNIX epoch to absolute time.

Parameters
ms_after_epochmillisecond timestamp to convert
Returns
converted time value

Definition at line 505 of file time.c.

516 {
517  struct GNUNET_TIME_Absolute ret;
518 
519  ret.abs_value_us = GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us
520  * ms_after_epoch;
521  if (ret.abs_value_us / GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us !=
522  ms_after_epoch)
524  return ret;
525 }

References GNUNET_TIME_Absolute::abs_value_us, and GNUNET_TIME_absolute_get().

Here is the call graph for this function:

◆ GNUNET_TIME_absolute_is_never()

bool GNUNET_TIME_absolute_is_never ( struct GNUNET_TIME_Absolute  abs)

Test if abs is never.

Returns
true if it is.

Definition at line 474 of file time.c.

475 {
476  return GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us == abs.abs_value_us;
477 }

References GNUNET_TIME_Absolute::abs_value_us, and GNUNET_TIME_UNIT_FOREVER_ABS.

◆ GNUNET_TIME_absolute_is_past()

bool GNUNET_TIME_absolute_is_past ( struct GNUNET_TIME_Absolute  abs)

Test if abs is truly in the past (excluding now).

Returns
true if it is.

Definition at line 495 of file time.c.

496 {
497  struct GNUNET_TIME_Absolute now;
498 
499  now = GNUNET_TIME_absolute_get ();
500  return abs.abs_value_us < now.abs_value_us;
501 }

References GNUNET_TIME_Absolute::abs_value_us, and GNUNET_TIME_absolute_get().

Here is the call graph for this function:

◆ GNUNET_TIME_absolute_is_future()

bool GNUNET_TIME_absolute_is_future ( struct GNUNET_TIME_Absolute  abs)

Test if abs is truly in the future (excluding now).

Returns
true if it is.

Definition at line 505 of file time.c.

506 {
507  struct GNUNET_TIME_Absolute now;
508 
509  now = GNUNET_TIME_absolute_get ();
510  return abs.abs_value_us > now.abs_value_us;
511 }

◆ GNUNET_TIME_relative_is_forever()

bool GNUNET_TIME_relative_is_forever ( struct GNUNET_TIME_Relative  rel)

Test if rel is forever.

Returns
true if it is.

Definition at line 481 of file time.c.

482 {
483  return GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us == rel.rel_value_us;
484 }

References GNUNET_TIME_UNIT_FOREVER_REL, and GNUNET_TIME_Relative::rel_value_us.

◆ GNUNET_TIME_relative_is_zero()

bool GNUNET_TIME_relative_is_zero ( struct GNUNET_TIME_Relative  rel)

Test if rel is zero.

Returns
true if it is.

Definition at line 488 of file time.c.

489 {
490  return 0 == rel.rel_value_us;
491 }

References GNUNET_TIME_Relative::rel_value_us.

◆ GNUNET_TIME_absolute_from_s()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_from_s ( uint64_t  s_after_epoch)

Convert seconds after the UNIX epoch to absolute time.

Parameters
s_after_epochseconds after epoch to convert
Returns
converted time value

Definition at line 505 of file time.c.

530 {
531  struct GNUNET_TIME_Absolute ret;
532 
533  ret.abs_value_us = GNUNET_TIME_UNIT_SECONDS.rel_value_us * s_after_epoch;
534  if (ret.abs_value_us / GNUNET_TIME_UNIT_SECONDS.rel_value_us !=
535  s_after_epoch)
537  return ret;
538 }
#define GNUNET_TIME_UNIT_SECONDS
One second.

◆ GNUNET_TIME_absolute_ntoh()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh ( struct GNUNET_TIME_AbsoluteNBO  a)

Convert absolute time from network byte order.

Parameters
atime to convert
Returns
converted time value

Definition at line 505 of file time.c.

543 {
544  struct GNUNET_TIME_Absolute ret;
545 
546  ret.abs_value_us = GNUNET_ntohll (a.abs_value_us__);
547  return ret;
548 }
uint64_t abs_value_us__
The actual value (in network byte order).

Referenced by backtalker_monotime_cb(), bind_nbotime(), callback_verify_room_message(), do_dht_put(), do_rekey(), GCP_check_and_update_monotime(), GNUNET_HELLO_iterate_addresses(), GNUNET_JSON_from_time_abs_nbo(), GST_neighbours_handle_disconnect_message(), GST_neighbours_handle_session_syn(), GST_neighbours_handle_session_syn_ack(), GST_validation_handle_pong(), handle_arm_list_result(), handle_cadet_ring_message(), handle_client_decrypt(), handle_client_join(), handle_client_keygen(), handle_client_loc_sign(), handle_client_redirect_to_ip(), handle_client_redirect_to_service(), handle_client_send_request(), handle_data(), handle_dht_local_put(), handle_dht_p2p_put(), handle_dht_p2p_result(), handle_dht_result(), handle_dv_box(), handle_dv_learn(), handle_encrypted(), handle_ephemeral_key(), handle_estimate(), handle_event(), handle_flow_control(), handle_lookup_block_response(), handle_message_delete(), handle_message_id(), handle_message_join(), handle_monitor_data(), handle_monitor_get_resp(), handle_monitor_put(), handle_p2p_estimate(), handle_p2p_put(), handle_put(), handle_receive_info(), handle_reply(), handle_response(), handle_result(), handle_signature_response(), handle_status(), handle_validation_response(), handshake_ack_monotime_cb(), handshake_monotime_cb(), inject_rekey(), neighbour_dv_monotime_cb(), PEERSTORE_parse_record_message(), process_client_result(), put_cb(), rekey_monotime_cb(), transmit_task_cb(), and update_flood_message().

◆ GNUNET_TIME_set_offset()

void GNUNET_TIME_set_offset ( long long  offset)

Set the timestamp offset for this instance.

Parameters
offsetthe offset to skew the locale time by

Definition at line 48 of file time.c.

49 {
50  timestamp_offset = offset;
51 }

References timestamp_offset.

Referenced by do_speedup(), GNUNET_GETOPT_option_timetravel(), GNUNET_SERVICE_run_(), and LEGACY_SERVICE_run().

Here is the caller graph for this function:

◆ GNUNET_TIME_get_offset()

long long GNUNET_TIME_get_offset ( void  )

Get the timestamp offset for this instance.

Returns
the offset we currently skew the locale time by

Definition at line 55 of file time.c.

56 {
57  return timestamp_offset;
58 }

References timestamp_offset.

Referenced by mylog().

Here is the caller graph for this function:

◆ GNUNET_TIME_get_current_year()

unsigned int GNUNET_TIME_get_current_year ( void  )

Return the current year (e.g.

'2011').

Definition at line 552 of file time.c.

553 {
554  time_t tp;
555  struct tm *t;
556 
557  tp = time (NULL);
558  t = gmtime (&tp);
559  if (t == NULL)
560  return 0;
561  return t->tm_year + 1900;
562 }

References t.

Referenced by main().

Here is the caller graph for this function:

◆ GNUNET_TIME_year_to_time()

struct GNUNET_TIME_Absolute GNUNET_TIME_year_to_time ( unsigned int  year)

Convert a year to an expiration time of January 1st of that year.

Parameters
yeara year (after 1970, please ;-)).
Returns
absolute time for January 1st of that year.

Definition at line 584 of file time.c.

607 {
608  struct GNUNET_TIME_Absolute ret;
609  time_t tp;
610  struct tm t;
611 
612  memset (&t, 0, sizeof(t));
613  if (year < 1900)
614  {
615  GNUNET_break (0);
616  return GNUNET_TIME_absolute_get (); /* now */
617  }
618  t.tm_year = year - 1900;
619  t.tm_mday = 1;
620  t.tm_mon = 0;
621  t.tm_wday = 1;
622  t.tm_yday = 1;
623 #ifndef HAVE_TIMEGM
624  tp = my_timegm (&t);
625 #else
626  tp = timegm (&t);
627 #endif
628  GNUNET_break (tp != (time_t) -1);
629  ret.abs_value_us = tp * 1000LL * 1000LL; /* seconds to microseconds */
630  return ret;
631 }
static time_t my_timegm(struct tm *tm)
As suggested in the timegm() man page.
Definition: time.c:584

Referenced by main().

Here is the caller graph for this function:

◆ GNUNET_TIME_time_to_year()

unsigned int GNUNET_TIME_time_to_year ( struct GNUNET_TIME_Absolute  at)

Convert an expiration time to the respective year (rounds)

Parameters
atabsolute time
Returns
year a year (after 1970), 0 on error

Definition at line 566 of file time.c.

567 {
568  struct tm *t;
569  time_t tp;
570 
571  tp = at.abs_value_us / 1000LL / 1000LL; /* microseconds to seconds */
572  t = gmtime (&tp);
573  if (t == NULL)
574  return 0;
575  return t->tm_year + 1900;
576 }

References GNUNET_TIME_Absolute::abs_value_us, and t.

◆ GNUNET_TIME_absolute_get_monotonic()

struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_monotonic ( const struct GNUNET_CONFIGURATION_Handle cfg)

Obtain the current time and make sure it is monotonically increasing.

Guards against systems without an RTC or clocks running backwards and other nasty surprises. Does not guarantee that the returned time is near the current time returned by GNUNET_TIME_absolute_get(). Two subsequent calls (within a short time period) may return the same value. Persists the last returned time on disk to ensure that time never goes backwards. As a result, the resulting value can be used to check if a message is the "most recent" value and replays of older messages (from the same origin) would be discarded.

Parameters
cfgconfiguration, used to determine where to store the time; user can also insist RTC is working nicely and disable the feature
Returns
monotonically increasing time

Definition at line 584 of file time.c.

660 {
661  static const struct GNUNET_CONFIGURATION_Handle *last_cfg;
662  static struct GNUNET_TIME_Absolute last_time;
663  static struct GNUNET_DISK_MapHandle *map_handle;
664  static ATOMIC volatile uint64_t *map;
665  struct GNUNET_TIME_Absolute now;
666 
667  now = GNUNET_TIME_absolute_get ();
668  if (last_cfg != cfg)
669  {
670  char *filename;
671 
672  if (NULL != map_handle)
673  {
674  GNUNET_DISK_file_unmap (map_handle);
675  map_handle = NULL;
676  }
677  map = NULL;
678 
679  last_cfg = cfg;
680  if ((NULL != cfg) &&
681  (GNUNET_OK ==
683  "util",
684  "MONOTONIC_TIME_FILENAME",
685  &filename)))
686  {
687  struct GNUNET_DISK_FileHandle *fh;
688 
696  if (NULL == fh)
697  {
699  _ ("Failed to map `%s', cannot assure monotonic time!\n"),
700  filename);
701  }
702  else
703  {
704  off_t size;
705 
706  size = 0;
708  if (size < (off_t) sizeof(*map))
709  {
710  struct GNUNET_TIME_AbsoluteNBO o;
711 
712  o = GNUNET_TIME_absolute_hton (now);
713  if (sizeof(o) != GNUNET_DISK_file_write (fh, &o, sizeof(o)))
714  size = 0;
715  else
716  size = sizeof(o);
717  }
718  if (size == sizeof(*map))
719  {
721  &map_handle,
723  sizeof(*map));
724  if (NULL == map)
726  _ (
727  "Failed to map `%s', cannot assure monotonic time!\n"),
728  filename);
729  }
730  else
731  {
732  GNUNET_log (
734  _ (
735  "Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"),
736  filename);
737  }
738  }
741  }
742  }
743  if (NULL != map)
744  {
745  struct GNUNET_TIME_AbsoluteNBO mt;
746 
747 #if __STDC_NO_ATOMICS__
748 #if __GNUC__
749  mt.abs_value_us__ = __sync_fetch_and_or (map, 0);
750 #else
751  mt.abs_value_us__ = *map; /* godspeed, pray this is atomic */
752 #endif
753 #else
754  mt.abs_value_us__ = atomic_load (map);
755 #endif
756  last_time =
758  }
759  if (now.abs_value_us <= last_time.abs_value_us)
760  now.abs_value_us = last_time.abs_value_us + 1;
761  last_time = now;
762  if (NULL != map)
763  {
764  uint64_t val = GNUNET_TIME_absolute_hton (now).abs_value_us__;
765 #if __STDC_NO_ATOMICS__
766 #if __GNUC__
767  (void) __sync_lock_test_and_set (map, val);
768 #else
769  *map = val; /* godspeed, pray this is atomic */
770 #endif
771 #else
772  atomic_store (map, val);
773 #endif
774  }
775  return now;
776 }
static const struct GNUNET_CONFIGURATION_Handle * cfg
Configuration we are using.
Definition: gnunet-abd.c:36
static struct GNUNET_CONTAINER_MultiPeerMap * map
Handle to the map used to store old latency values for peers.
static char * filename
#define GNUNET_log(kind,...)
static int fh
Handle to the unique file.
enum GNUNET_GenericReturnValue 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.
struct GNUNET_DISK_FileHandle * GNUNET_DISK_file_open(const char *fn, enum GNUNET_DISK_OpenFlags flags, enum GNUNET_DISK_AccessPermissions perm)
Open a file.
Definition: disk.c:1235
ssize_t GNUNET_DISK_file_write(const struct GNUNET_DISK_FileHandle *h, const void *buffer, size_t n)
Write a buffer to a file.
Definition: disk.c:686
void * GNUNET_DISK_file_map(const struct GNUNET_DISK_FileHandle *h, struct GNUNET_DISK_MapHandle **m, enum GNUNET_DISK_MapType access, size_t len)
Map a file into memory.
Definition: disk.c:1378
enum GNUNET_GenericReturnValue GNUNET_DISK_file_close(struct GNUNET_DISK_FileHandle *h)
Close an open file.
Definition: disk.c:1306
enum GNUNET_GenericReturnValue GNUNET_DISK_file_handle_size(struct GNUNET_DISK_FileHandle *fh, off_t *size)
Get the size of an open file.
Definition: disk.c:193
enum GNUNET_GenericReturnValue GNUNET_DISK_file_unmap(struct GNUNET_DISK_MapHandle *h)
Unmap a file.
Definition: disk.c:1409
@ GNUNET_DISK_OPEN_CREATE
Create file if it doesn't exist.
@ GNUNET_DISK_OPEN_READWRITE
Open the file for both reading and writing.
@ GNUNET_DISK_PERM_USER_READ
Owner can read.
@ GNUNET_DISK_PERM_GROUP_READ
Group can read.
@ GNUNET_DISK_PERM_GROUP_WRITE
Group can write.
@ GNUNET_DISK_PERM_USER_WRITE
Owner can write.
@ GNUNET_DISK_MAP_TYPE_READWRITE
Read-write memory map.
@ GNUNET_ERROR_TYPE_WARNING
#define GNUNET_free(ptr)
Wrapper around free.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_max(struct GNUNET_TIME_Absolute t1, struct GNUNET_TIME_Absolute t2)
Return the maximum of two absolute time values.
Definition: time.c:224
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition: time.c:542
struct GNUNET_TIME_AbsoluteNBO GNUNET_TIME_absolute_hton(struct GNUNET_TIME_Absolute a)
Convert absolute time to network byte order.
Definition: time.c:464
static unsigned int size
Size of the "table".
Definition: peer.c:67
#define _(String)
GNU gettext support macro.
Definition: platform.h:177
Handle used to access files (and pipes).
Handle for a memory-mapping operation.
Definition: disk.c:1359
#define ATOMIC
Definition: time.c:36

Referenced by __attribute__(), consider_sending_fc(), inject_rekey(), mq_send_kx(), run(), send_challenge(), send_create(), start_dv_learn(), transmit_kx(), update_ephemeral(), and validation_transmit_on_queue().

Here is the caller graph for this function: