本文整理汇总了C++中GNUNET_SCHEDULER_add_delayed函数的典型用法代码示例。如果您正苦于以下问题:C++ GNUNET_SCHEDULER_add_delayed函数的具体用法?C++ GNUNET_SCHEDULER_add_delayed怎么用?C++ GNUNET_SCHEDULER_add_delayed使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GNUNET_SCHEDULER_add_delayed函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: testNamespace
static void
testNamespace ()
{
struct GNUNET_CRYPTO_EcdsaPrivateKey *ns;
struct GNUNET_FS_BlockOptions bo;
struct GNUNET_CONTAINER_MetaData *meta;
struct GNUNET_FS_Uri *ksk_uri;
struct GNUNET_FS_Uri *sks_uri;
ns = GNUNET_CRYPTO_ecdsa_key_create ();
meta = GNUNET_CONTAINER_meta_data_create ();
ksk_uri = GNUNET_FS_uri_parse ("gnunet://fs/ksk/testnsa", NULL);
bo.content_priority = 1;
bo.anonymity_level = 1;
bo.replication_level = 0;
bo.expiration_time =
GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES);
sks_uri = GNUNET_FS_uri_sks_create (&nsid, "root");
GNUNET_FS_publish_ksk (fs,
ksk_uri, meta, sks_uri,
&bo, GNUNET_FS_PUBLISH_OPTION_NONE,
&adv_cont, NULL);
GNUNET_FS_uri_destroy (sks_uri);
kill_task =
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &do_timeout,
NULL);
GNUNET_FS_uri_destroy (ksk_uri);
GNUNET_CONTAINER_meta_data_destroy (meta);
GNUNET_free (ns);
}
开发者ID:tg-x,项目名称:gnunet,代码行数:30,代码来源:test_fs_namespace.c
示例2: GNUNET_ARM_request_service_list
/**
* Request a list of running services.
*
* @param h handle to ARM
* @param timeout how long to wait before failing for good
* @param cont callback to invoke after request is sent or is not sent
* @param cont_cls closure for callback
*/
void
GNUNET_ARM_request_service_list (struct GNUNET_ARM_Handle *h,
struct GNUNET_TIME_Relative timeout,
GNUNET_ARM_ServiceListCallback cont,
void *cont_cls)
{
struct ARMControlMessage *cm;
struct GNUNET_ARM_Message *msg;
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Requesting LIST from ARM service with timeout: %s\n",
GNUNET_STRINGS_relative_time_to_string (timeout, GNUNET_YES));
cm = GNUNET_new (struct ARMControlMessage);
cm->h = h;
cm->list_cont = cont;
cm->cont_cls = cont_cls;
cm->timeout = GNUNET_TIME_relative_to_absolute (timeout);
msg = GNUNET_malloc (sizeof (struct GNUNET_ARM_Message));
msg->header.size = htons (sizeof (struct GNUNET_ARM_Message));
msg->header.type = htons (GNUNET_MESSAGE_TYPE_ARM_LIST);
msg->reserved = htonl (0);
cm->msg = msg;
GNUNET_CONTAINER_DLL_insert_tail (h->control_pending_head,
h->control_pending_tail, cm);
cm->timeout_task_id =
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining
(cm->timeout), &control_message_timeout, cm);
trigger_next_request (h, GNUNET_NO);
}
开发者ID:claudiuolteanu,项目名称:gnunet-1,代码行数:37,代码来源:arm_api.c
示例3: reconnect_arm_later
/**
* Close down any existing connection to the ARM service and
* try re-establishing it later.
*
* @param h our handle
*/
static void
reconnect_arm_later (struct GNUNET_ARM_Handle *h)
{
if (GNUNET_NO != h->currently_down)
return;
if (NULL != h->cth)
{
GNUNET_CLIENT_notify_transmit_ready_cancel (h->cth);
h->cth = NULL;
}
if (NULL != h->client)
{
GNUNET_CLIENT_disconnect (h->client);
h->client = NULL;
}
h->currently_down = GNUNET_YES;
GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == h->reconnect_task);
h->reconnect_task =
GNUNET_SCHEDULER_add_delayed (h->retry_backoff, &reconnect_arm_task, h);
/* Don't clear pending messages on disconnection, deliver them later
clear_pending_messages (h, GNUNET_ARM_REQUEST_DISCONNECTED);
GNUNET_assert (NULL == h->control_pending_head);
*/
h->retry_backoff = GNUNET_TIME_STD_BACKOFF (h->retry_backoff);
if (NULL != h->conn_status)
h->conn_status (h->conn_status_cls, GNUNET_NO);
}
开发者ID:claudiuolteanu,项目名称:gnunet-1,代码行数:33,代码来源:arm_api.c
示例4: run
static void
run (void *cls,
char *const *args,
const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
&end_badly, NULL);
test_send_timeout = GNUNET_NO;
p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1,
¬ify_receive, ¬ify_connect,
¬ify_disconnect, &start_cb,
NULL);
p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2,
¬ify_receive, ¬ify_connect,
¬ify_disconnect, &start_cb,
NULL);
if ((p1 == NULL) || (p2 == NULL))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n");
if (die_task != NULL)
GNUNET_SCHEDULER_cancel (die_task);
//die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
return;
}
}
开发者ID:tg-x,项目名称:gnunet,代码行数:27,代码来源:test_transport_api_reliability.c
示例5: run
static void
run (void *cls, char *const *args, const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
ret = 1;
tth = GNUNET_TRANSPORT_TESTING_init ();
GNUNET_assert (NULL != tth);
timeout_task =
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &end_badly, NULL);
p = GNUNET_TRANSPORT_TESTING_start_peer(tth, cfgfile, 1,
NULL, /* receive cb */
NULL, /* connect cb */
NULL, /* disconnect cb */
start_cb, /* startup cb */
NULL); /* closure */
if (NULL == p)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Failed to start peer\n");
if (timeout_task != NULL)
GNUNET_SCHEDULER_cancel (timeout_task);
timeout_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL);
}
}
开发者ID:tg-x,项目名称:gnunet,代码行数:25,代码来源:test_transport_testing_restart.c
示例6: peergroup_ready
/**
* peergroup_ready: start test when all peers are connected
* @param cls closure
* @param emsg error message
*/
static void
peergroup_ready (void *cls, const char *emsg)
{
if (emsg != NULL)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"test: Peergroup callback called with error, aborting test!\n");
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Error from testing: `%s'\n",
emsg);
ok--;
GNUNET_TESTING_daemons_stop (pg, TIMEOUT, &shutdown_callback, NULL);
return;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"test: Peer Group started successfully with %u connections\n",
total_connections);
peers_running = GNUNET_TESTING_daemons_running (pg);
if (0 < failed_connections)
{
ok = GNUNET_SYSERR;
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "test: %u connections have FAILED!\n",
failed_connections);
disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_peers, NULL);
}
else
{
GNUNET_TESTING_get_topology (pg, &topo_cb, NULL);
disconnect_task =
GNUNET_SCHEDULER_add_delayed (SHORT_TIME, &disconnect_peers, NULL);
ok = GNUNET_OK;
}
}
开发者ID:schanzen,项目名称:gnunet-mirror,代码行数:39,代码来源:test_mesh_2dtorus.c
示例7: status_cb
/**
* Callback for lock status changes
*
* @param cls the closure from GNUNET_LOCKMANAGER_lock call
*
* @param domain_name the locking domain of the lock
*
* @param lock the lock for which this status is relevant
*
* @param status GNUNET_LOCKMANAGER_SUCCESS if the lock has been successfully
* acquired; GNUNET_LOCKMANAGER_RELEASE when the acquired lock is lost
*/
static void
status_cb (void *cls, const char *domain_name, uint32_t lock,
enum GNUNET_LOCKMANAGER_Status status)
{
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Status change callback called on lock: %d of domain: %s\n", lock,
domain_name);
switch (result)
{
case LOCK1_ACQUIRE:
GNUNET_assert (GNUNET_LOCKMANAGER_SUCCESS == status);
GNUNET_assert (NULL != request);
//GNUNET_LOCKMANAGER_cancel_request (request);
//request = NULL;
result = LOCK2_ACQUIRE;
request2 =
GNUNET_LOCKMANAGER_acquire_lock (handle, "GNUNET_LOCKMANAGER_TESTING",
100, &status_cb, NULL);
GNUNET_assert (NULL != request2);
break;
case LOCK2_ACQUIRE:
GNUNET_assert (GNUNET_LOCKMANAGER_SUCCESS == status);
GNUNET_assert (NULL != request);
GNUNET_SCHEDULER_add_delayed (TIME_REL_SECONDS (1), &do_shutdown, NULL);
break;
default:
GNUNET_break (0);
}
}
开发者ID:schanzen,项目名称:gnunet-mirror,代码行数:41,代码来源:test_lockmanager_api.c
示例8: preference_aging
/**
* Reduce absolute preferences since they got old.
*
* @param cls unused
* @param tc context
*/
static void
preference_aging (void *cls,
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct AgeContext ac;
aging_task = NULL;
GAS_plugin_solver_lock ();
ac.values_to_update = 0;
for (ac.cur_client = pc_head; NULL != ac.cur_client; ac.cur_client = ac.cur_client->next)
GNUNET_CONTAINER_multipeermap_iterate (ac.cur_client->peer2pref,
&age_values,
&ac);
GAS_plugin_solver_unlock ();
if (ac.values_to_update > 0)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Rescheduling aging task due to %u elements remaining to age\n",
ac.values_to_update);
if (NULL == aging_task)
aging_task = GNUNET_SCHEDULER_add_delayed (PREF_AGING_INTERVAL,
&preference_aging,
NULL);
}
else
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"No values to age left, not rescheduling aging task\n");
}
}
开发者ID:muggenhor,项目名称:GNUnet,代码行数:36,代码来源:gnunet-service-ats_preferences.c
示例9: run
/**
* Initiate core service.
*
* @param cls closure
* @param server the initialized server
* @param c configuration to use
*/
static void
run (void *cls, struct GNUNET_SERVER_Handle *server,
const struct GNUNET_CONFIGURATION_Handle *c)
{
char *keyfile;
GSC_cfg = c;
GSC_server = server;
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_filename (GSC_cfg, "GNUNETD", "HOSTKEY",
&keyfile))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_
("Core service is lacking HOSTKEY configuration setting. Exiting.\n"));
GNUNET_SCHEDULER_shutdown ();
return;
}
GSC_stats = GNUNET_STATISTICS_create ("core", GSC_cfg);
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
NULL);
GNUNET_SERVER_suspend (server);
GSC_TYPEMAP_init ();
GST_keygen = GNUNET_CRYPTO_rsa_key_create_start (keyfile, &key_generation_cb, NULL);
GNUNET_free (keyfile);
if (NULL == GST_keygen)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
_("Transport service is unable to access hostkey. Exiting.\n"));
GNUNET_SCHEDULER_shutdown ();
}
}
开发者ID:schanzen,项目名称:gnunet-mirror,代码行数:39,代码来源:gnunet-service-core.c
示例10: run
/**
* Main function run with scheduler.
*/
static void
run (void *cls, char *const *args, const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
struct GNUNET_NAT_Handle *nat;
struct addr_cls data;
struct sockaddr *addr;
data.addr = NULL;
GNUNET_OS_network_interfaces_list (process_if, &data);
if (NULL == data.addr)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Could not find a valid interface address!\n");
exit (77); /* marks test as skipped */
}
addr = data.addr;
GNUNET_assert (addr->sa_family == AF_INET || addr->sa_family == AF_INET6);
if (addr->sa_family == AF_INET)
((struct sockaddr_in *) addr)->sin_port = htons (2086);
else
((struct sockaddr_in6 *) addr)->sin6_port = htons (2086);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Requesting NAT redirection from address %s...\n",
GNUNET_a2s (addr, data.addrlen));
nat = GNUNET_NAT_register (cfg, GNUNET_YES /* tcp */ ,
2086, 1, (const struct sockaddr **) &addr,
&data.addrlen, &addr_callback, NULL, NULL, NULL);
GNUNET_free (addr);
GNUNET_SCHEDULER_add_delayed (TIMEOUT, &stop, nat);
}
开发者ID:muggenhor,项目名称:GNUnet,代码行数:36,代码来源:test_nat.c
示例11: GNUNET_NAT_mini_map_start
/**
* Start mapping the given port using (mini)upnpc. This function
* should typically not be used directly (it is used within the
* general-purpose #GNUNET_NAT_register() code). However, it can be
* used if specifically UPnP-based NAT traversal is to be used or
* tested.
*
* @param port port to map
* @param is_tcp #GNUNET_YES to map TCP, #GNUNET_NO for UDP
* @param ac function to call with mapping result
* @param ac_cls closure for @a ac
* @return NULL on error (no 'upnpc' installed)
*/
struct GNUNET_NAT_MiniHandle *
GNUNET_NAT_mini_map_start (uint16_t port,
int is_tcp,
GNUNET_NAT_MiniAddressCallback ac,
void *ac_cls)
{
struct GNUNET_NAT_MiniHandle *ret;
if (GNUNET_SYSERR ==
GNUNET_OS_check_helper_binary ("upnpc",
GNUNET_NO,
NULL))
{
LOG (GNUNET_ERROR_TYPE_INFO,
_("`upnpc' command not found\n"));
ac (ac_cls,
GNUNET_SYSERR,
NULL, 0,
GNUNET_NAT_ERROR_UPNPC_NOT_FOUND);
return NULL;
}
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Running `upnpc' to install mapping\n");
ret = GNUNET_new (struct GNUNET_NAT_MiniHandle);
ret->ac = ac;
ret->ac_cls = ac_cls;
ret->is_tcp = is_tcp;
ret->port = port;
ret->refresh_task =
GNUNET_SCHEDULER_add_delayed (MAP_REFRESH_FREQ,
&do_refresh,
ret);
run_upnpc_r (ret);
return ret;
}
开发者ID:GNUnet,项目名称:gnunet,代码行数:48,代码来源:gnunet-service-nat_mini.c
示例12: schedule_peer_transmission
/**
* Figure out when and how to transmit to the given peer.
*
* @param cls the 'struct PeerPlan'
* @param tc scheduler context
*/
static void
schedule_peer_transmission (void *cls,
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct PeerPlan *pp = cls;
struct GSF_RequestPlan *rp;
size_t msize;
struct GNUNET_TIME_Relative delay;
pp->task = GNUNET_SCHEDULER_NO_TASK;
if (NULL != pp->pth)
{
GSF_peer_transmit_cancel_ (pp->pth);
pp->pth = NULL;
}
/* move ready requests to priority queue */
while ((NULL != (rp = GNUNET_CONTAINER_heap_peek (pp->delay_heap))) &&
(GNUNET_TIME_absolute_get_remaining
(rp->earliest_transmission).rel_value == 0))
{
GNUNET_assert (rp == GNUNET_CONTAINER_heap_remove_root (pp->delay_heap));
rp->hn = GNUNET_CONTAINER_heap_insert (pp->priority_heap, rp, rp->priority);
}
if (0 == GNUNET_CONTAINER_heap_get_size (pp->priority_heap))
{
/* priority heap (still) empty, check for delay... */
rp = GNUNET_CONTAINER_heap_peek (pp->delay_heap);
if (NULL == rp)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "No active requests for plan %p.\n",
pp);
return; /* both queues empty */
}
delay = GNUNET_TIME_absolute_get_remaining (rp->earliest_transmission);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Sleeping for %llu ms before retrying requests on plan %p.\n",
(unsigned long long) delay.rel_value, pp);
GNUNET_STATISTICS_set (GSF_stats, gettext_noop ("# delay heap timeout"),
delay.rel_value, GNUNET_NO);
pp->task =
GNUNET_SCHEDULER_add_delayed (delay, &schedule_peer_transmission, pp);
return;
}
#if INSANE_STATISTICS
GNUNET_STATISTICS_update (GSF_stats, gettext_noop ("# query plans executed"),
1, GNUNET_NO);
#endif
/* process from priority heap */
rp = GNUNET_CONTAINER_heap_peek (pp->priority_heap);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Executing query plan %p\n", rp);
GNUNET_assert (NULL != rp);
msize = GSF_pending_request_get_message_ (get_latest (rp), 0, NULL);
pp->pth =
GSF_peer_transmit_ (pp->cp, GNUNET_YES, rp->priority,
GNUNET_TIME_UNIT_FOREVER_REL, msize,
&transmit_message_callback, pp);
GNUNET_assert (NULL != pp->pth);
}
开发者ID:amatus,项目名称:gnunet-debian,代码行数:65,代码来源:gnunet-service-fs_pe.c
示例13: srv_status
static void
srv_status (void *cls,
const char *service,
enum GNUNET_ARM_ServiceStatus status)
{
if (status == GNUNET_ARM_SERVICE_MONITORING_STARTED)
{
LOG ("ARM monitor started, starting mock service\n");
phase++;
GNUNET_ARM_request_service_start (arm,
SERVICE,
GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
NULL,
NULL);
return;
}
if (0 != strcasecmp (service, SERVICE))
return; /* not what we care about */
if (phase == 1)
{
GNUNET_break (status == GNUNET_ARM_SERVICE_STARTING);
GNUNET_break (phase == 1);
LOG ("do-nothing is starting\n");
phase++;
ok = 1;
GNUNET_assert (NULL == kt);
startedWaitingAt = GNUNET_TIME_absolute_get ();
kt = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
&kill_task,
NULL);
}
else if (phase == 2)
{
/* We passively monitor ARM for status updates. ARM should tell us
* when do-nothing dies (no need to run a service upness test ourselves).
*/
if (status == GNUNET_ARM_SERVICE_STARTING)
{
waitedFor = GNUNET_TIME_absolute_get_duration (startedWaitingAt);
LOG ("Waited for: %s\n",
GNUNET_STRINGS_relative_time_to_string (waitedFor,
GNUNET_YES));
LOG ("do-nothing is starting, killing it...\n");
GNUNET_assert (NULL == kt);
kt = GNUNET_SCHEDULER_add_now (&kill_task, &ok);
}
else if ((status == GNUNET_ARM_SERVICE_STOPPED) && (trialCount == 14))
{
phase++;
LOG ("do-nothing stopped working %u times, we are done here\n",
(unsigned int) trialCount);
GNUNET_ARM_request_service_stop (arm,
"arm",
&arm_stop_cb,
NULL);
}
}
}
开发者ID:GNUnet,项目名称:gnunet,代码行数:59,代码来源:test_exponential_backoff.c
示例14: send_test_messages
static void
send_test_messages (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct TestMessageContext *pos = cls;
if (((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0) || (cls == NULL))
return;
if (die_task == GNUNET_SCHEDULER_NO_TASK)
{
die_task =
GNUNET_SCHEDULER_add_delayed (TEST_TIMEOUT, &end_badly,
"from create topology (timeout)");
}
if (total_server_connections >= MAX_OUTSTANDING_CONNECTIONS)
{
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 1),
&send_test_messages, pos);
return; /* Otherwise we'll double schedule messages here! */
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Attempting to send test message from %s to %s\n",
pos->peer1->shortname, pos->peer2->shortname);
/*
* Connect to the sending peer
*/
pos->peer1handle =
GNUNET_CORE_connect (pos->peer1->cfg, pos, &init_notify_peer1,
&connect_notify_peer1, NULL, NULL, GNUNET_NO, NULL,
GNUNET_NO, no_handlers);
GNUNET_assert (pos->peer1handle != NULL);
if (total_server_connections < MAX_OUTSTANDING_CONNECTIONS)
{
GNUNET_SCHEDULER_add_now (&send_test_messages, pos->next);
}
else
{
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 1),
&send_test_messages, pos->next);
}
}
开发者ID:schanzen,项目名称:gnunet-mirror,代码行数:46,代码来源:test_transport_api_dv.c
示例15: transmit_task_cb
/**
* Task that triggers a NSE P2P transmission.
*
* @param cls the `struct NSEPeerEntry *`
*/
static void
transmit_task_cb (void *cls)
{
struct NSEPeerEntry *peer_entry = cls;
unsigned int idx;
struct GNUNET_MQ_Envelope *env;
peer_entry->transmit_task = NULL;
idx = estimate_index;
if (GNUNET_NO == peer_entry->previous_round)
{
idx = (idx + HISTORY_SIZE - 1) % HISTORY_SIZE;
peer_entry->previous_round = GNUNET_YES;
peer_entry->transmit_task
= GNUNET_SCHEDULER_add_delayed (get_transmit_delay (0),
&transmit_task_cb,
peer_entry);
}
if ((0 == ntohl (size_estimate_messages[idx].hop_count)) &&
(NULL != proof_task))
{
GNUNET_STATISTICS_update (stats,
"# flood messages not generated (no proof yet)",
1,
GNUNET_NO);
return;
}
if (0 == ntohs (size_estimate_messages[idx].header.size))
{
GNUNET_STATISTICS_update (stats,
"# flood messages not generated (lack of history)",
1,
GNUNET_NO);
return;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"In round %s, sending to `%s' estimate with %u bits\n",
GNUNET_STRINGS_absolute_time_to_string (GNUNET_TIME_absolute_ntoh (size_estimate_messages[idx].timestamp)),
GNUNET_i2s (peer_entry->id),
(unsigned int) ntohl (size_estimate_messages[idx].matching_bits));
if (0 == ntohl (size_estimate_messages[idx].hop_count))
GNUNET_STATISTICS_update (stats,
"# flood messages started",
1,
GNUNET_NO);
GNUNET_STATISTICS_update (stats,
"# flood messages transmitted",
1,
GNUNET_NO);
#if ENABLE_NSE_HISTOGRAM
peer_entry->transmitted_messages++;
peer_entry->last_transmitted_size
= ntohl(size_estimate_messages[idx].matching_bits);
#endif
env = GNUNET_MQ_msg_copy (&size_estimate_messages[idx].header);
GNUNET_MQ_send (peer_entry->mq,
env);
}
开发者ID:krattai,项目名称:AEBL,代码行数:63,代码来源:gnunet-service-nse.c
示例16: schedule_next_hello
/**
* Calculate when we would like to send the next HELLO to this
* peer and ask for it.
*
* @param cls for which peer to schedule the HELLO
*/
static void
schedule_next_hello (void *cls)
{
struct Peer *pl = cls;
struct FindAdvHelloContext fah;
struct GNUNET_MQ_Envelope *env;
size_t want;
struct GNUNET_TIME_Relative delay;
struct GNUNET_HashCode hc;
pl->hello_delay_task = NULL;
GNUNET_assert (NULL != pl->mq);
/* find applicable HELLOs */
fah.peer = pl;
fah.result = NULL;
fah.max_size = GNUNET_SERVER_MAX_MESSAGE_SIZE - 1;
fah.next_adv = GNUNET_TIME_UNIT_FOREVER_REL;
GNUNET_CONTAINER_multipeermap_iterate (peers,
&find_advertisable_hello,
&fah);
pl->hello_delay_task =
GNUNET_SCHEDULER_add_delayed (fah.next_adv,
&schedule_next_hello,
pl);
if (NULL == fah.result)
return;
delay = GNUNET_TIME_absolute_get_remaining (pl->next_hello_allowed);
if (0 != delay.rel_value_us)
return;
want = GNUNET_HELLO_size (fah.result->hello);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Sending HELLO with %u bytes",
(unsigned int) want);
env = GNUNET_MQ_msg_copy (&fah.result->hello->header);
GNUNET_MQ_send (pl->mq,
env);
/* avoid sending this one again soon */
GNUNET_CRYPTO_hash (&pl->pid,
sizeof (struct GNUNET_PeerIdentity),
&hc);
GNUNET_CONTAINER_bloomfilter_add (fah.result->filter,
&hc);
GNUNET_STATISTICS_update (stats,
gettext_noop ("# HELLO messages gossipped"),
1,
GNUNET_NO);
/* prepare to send the next one */
if (NULL != pl->hello_delay_task)
GNUNET_SCHEDULER_cancel (pl->hello_delay_task);
pl->next_hello_allowed
= GNUNET_TIME_relative_to_absolute (HELLO_ADVERTISEMENT_MIN_FREQUENCY);
pl->hello_delay_task
= GNUNET_SCHEDULER_add_now (&schedule_next_hello,
pl);
}
开发者ID:GNUnet,项目名称:gnunet,代码行数:64,代码来源:gnunet-daemon-topology.c
示例17: stop_arm
static void
stop_arm (struct PeerContext *p)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Asking ARM to stop core service\n");
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
&waitpid_task,
p);
}
开发者ID:GNUnet,项目名称:gnunet,代码行数:9,代码来源:test_gnunet_daemon_hostlist_reconnect.c
示例18: run_property
static void
run_property (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct SysmonProperty *sp = cls;
sp->task_id = GNUNET_SCHEDULER_NO_TASK;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Running continous property `%s' \n", sp->desc);
sp->task (cls, tc);
sp->task_id = GNUNET_SCHEDULER_add_delayed (sp->interval, &run_property, sp);
}
开发者ID:schanzen,项目名称:gnunet-mirror,代码行数:9,代码来源:gnunet-daemon-sysmon.c
示例19: schedule_attempt_connect
/**
* Schedule a task to try to connect to the specified peer.
*
* @param pos peer to connect to
*/
static void
schedule_attempt_connect (struct Peer *pos)
{
if (GNUNET_SCHEDULER_NO_TASK != pos->attempt_connect_task)
return;
pos->attempt_connect_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining (next_connect_attempt),
&do_attempt_connect,
pos);
}
开发者ID:schanzen,项目名称:gnunet-mirror,代码行数:14,代码来源:gnunet-daemon-topology.c
示例20: dns_pre_request_handler
/**
* This function is called *before* the DNS request has been
* given to a "local" DNS resolver. Tunneling for DNS requests
* was enabled, so we now need to send the request via some MESH
* tunnel to a DNS EXIT for resolution.
*
* @param cls closure
* @param rh request handle to user for reply
* @param request_length number of bytes in request
* @param request udp payload of the DNS request
*/
static void
dns_pre_request_handler (void *cls,
struct GNUNET_DNS_RequestHandle *rh,
size_t request_length,
const char *request)
{
struct RequestContext *rc;
size_t mlen;
struct GNUNET_MessageHeader hdr;
struct GNUNET_TUN_DnsHeader dns;
GNUNET_STATISTICS_update (stats,
gettext_noop ("# DNS requests intercepted"),
1, GNUNET_NO);
if (0 == dns_exit_available)
{
GNUNET_STATISTICS_update (stats,
gettext_noop ("# DNS requests dropped (DNS mesh tunnel down)"),
1, GNUNET_NO);
GNUNET_DNS_request_drop (rh);
return;
}
if (request_length < sizeof (dns))
{
GNUNET_STATISTICS_update (stats,
gettext_noop ("# DNS requests dropped (malformed)"),
1, GNUNET_NO);
GNUNET_DNS_request_drop (rh);
return;
}
memcpy (&dns, request, sizeof (dns));
GNUNET_assert (NULL != mesh_tunnel);
mlen = sizeof (struct GNUNET_MessageHeader) + request_length;
rc = GNUNET_malloc (sizeof (struct RequestContext) + mlen);
rc->rh = rh;
rc->mesh_message = (const struct GNUNET_MessageHeader*) &rc[1];
rc->timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT,
&timeout_request,
rc);
rc->dns_id = dns.id;
hdr.type = htons (GNUNET_MESSAGE_TYPE_VPN_DNS_TO_INTERNET);
hdr.size = htons (mlen);
memcpy (&rc[1], &hdr, sizeof (struct GNUNET_MessageHeader));
memcpy (&(((char*)&rc[1])[sizeof (struct GNUNET_MessageHeader)]),
request,
request_length);
GNUNET_CONTAINER_DLL_insert_tail (transmit_queue_head,
transmit_queue_tail,
rc);
if (NULL == mesh_th)
mesh_th = GNUNET_MESH_notify_transmit_ready (mesh_tunnel,
GNUNET_NO, 0,
TIMEOUT,
NULL, mlen,
&transmit_dns_request_to_mesh,
NULL);
}
开发者ID:h4ck3rm1k3,项目名称:gnunet-debian,代码行数:68,代码来源:gnunet-daemon-pt.c
注:本文中的GNUNET_SCHEDULER_add_delayed函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论