* peers that connect.
*
* TODO:
- * - broadcast p2p revocations
- * - handle p2p connect (trigger SET union)
+ * - handle p2p connect (trigger SET union, #3057)
* - optimization: avoid sending revocation back to peer that we got it from;
* - optimization: have randomized delay in sending revocations to other peers
* to make it rare to traverse each link twice (NSE-style)
{
/**
- * Core handle for sending messages to this peer.
+ * Queue for sending messages to this peer.
*/
- struct GNUNET_CORE_TransmitHandle *th;
+ struct GNUNET_MQ_Handle *mq;
/**
* What is the identity of the peer?
*/
struct GNUNET_PeerIdentity id;
- /**
- * Task scheduled to send message to this peer.
- */
- GNUNET_SCHEDULER_TaskIdentifier transmit_task;
-
};
/**
* Handle to the core service (for flooding)
*/
-static struct GNUNET_CORE_Handle *coreAPI;
+static struct GNUNET_CORE_Handle *core_api;
/**
* Map of all connected peers.
(unsigned int) revocation_work_required))
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Proof of work invalid: %llu!\n",
- (unsigned long long)
- GNUNET_ntohll (rm->proof_of_work));
+ "Proof of work invalid!\n");
GNUNET_break_op (0);
return GNUNET_NO;
}
if (GNUNET_OK !=
- GNUNET_CRYPTO_ecc_verify (GNUNET_SIGNATURE_PURPOSE_REVOCATION,
+ GNUNET_CRYPTO_ecdsa_verify (GNUNET_SIGNATURE_PURPOSE_REVOCATION,
&rm->purpose,
&rm->signature,
&rm->public_key))
int res;
GNUNET_CRYPTO_hash (&qm->key,
- sizeof (struct GNUNET_CRYPTO_EccPublicSignKey),
+ sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey),
&hc);
res = GNUNET_CONTAINER_multihashmap_contains (revocation_map, &hc);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
GNUNET_h2s (&hc));
qrm.header.size = htons (sizeof (struct QueryResponseMessage));
qrm.header.type = htons (GNUNET_MESSAGE_TYPE_REVOCATION_QUERY_RESPONSE);
- qrm.is_valid = htons ((GNUNET_YES == res) ? GNUNET_NO : GNUNET_YES);
+ qrm.is_valid = htonl ((GNUNET_YES == res) ? GNUNET_NO : GNUNET_YES);
GNUNET_SERVER_notification_context_add (nc,
client);
GNUNET_SERVER_notification_context_unicast (nc,
const struct GNUNET_PeerIdentity *target,
void *value)
{
- GNUNET_break (0); // FIXME: not implemented
+ const struct RevokeMessage *rm = cls;
+ struct PeerEntry *pe = value;
+ struct GNUNET_MQ_Envelope *e;
+ struct RevokeMessage *cp;
+
+ e = GNUNET_MQ_msg (cp, GNUNET_MESSAGE_TYPE_REVOCATION_REVOKE);
+ *cp = *rm;
+ GNUNET_MQ_send (pe->mq, e);
return GNUNET_OK;
}
struct GNUNET_SET_Element e;
GNUNET_CRYPTO_hash (&rm->public_key,
- sizeof (struct GNUNET_CRYPTO_EccPublicSignKey),
+ sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey),
&hc);
if (GNUNET_YES ==
GNUNET_CONTAINER_multihashmap_contains (revocation_map,
}
rrm.header.size = htons (sizeof (struct RevocationResponseMessage));
rrm.header.type = htons (GNUNET_MESSAGE_TYPE_REVOCATION_REVOKE_RESPONSE);
- rrm.is_valid = htons ((GNUNET_OK == ret) ? GNUNET_NO : GNUNET_YES);
+ rrm.is_valid = htonl ((GNUNET_OK == ret) ? GNUNET_NO : GNUNET_YES);
GNUNET_SERVER_notification_context_add (nc,
client);
GNUNET_SERVER_notification_context_unicast (nc,
GNUNET_i2s (peer));
peer_entry = GNUNET_new (struct PeerEntry);
peer_entry->id = *peer;
+ peer_entry->mq = GNUNET_CORE_mq_create (core_api, peer);
GNUNET_assert (GNUNET_OK ==
GNUNET_CONTAINER_multipeermap_put (peers, peer,
peer_entry,
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
- GNUNET_break (0); // FIXME: implement revocation set union on connect!
+ // GNUNET_break (0); // FIXME: implement revocation set union on connect!
#if 0
peer_entry->transmit_task =
GNUNET_SCHEDULER_add_delayed (get_transmit_delay (-1), &transmit_task_cb,
GNUNET_assert (GNUNET_YES ==
GNUNET_CONTAINER_multipeermap_remove (peers, peer,
pos));
+ GNUNET_MQ_destroy (pos->mq);
#if 0
if (pos->transmit_task != GNUNET_SCHEDULER_NO_TASK)
{
GNUNET_SCHEDULER_cancel (pos->transmit_task);
pos->transmit_task = GNUNET_SCHEDULER_NO_TASK;
}
- if (NULL != pos->th)
- {
- GNUNET_CORE_notify_transmit_ready_cancel (pos->th);
- pos->th = NULL;
- }
#endif
GNUNET_free (pos);
GNUNET_STATISTICS_update (stats, "# peers connected", -1, GNUNET_NO);
GNUNET_SET_destroy (revocation_set);
revocation_set = NULL;
}
- if (NULL != coreAPI)
+ if (NULL != core_api)
{
- GNUNET_CORE_disconnect (coreAPI);
- coreAPI = NULL;
+ GNUNET_CORE_disconnect (core_api);
+ core_api = NULL;
}
if (NULL != stats)
{
}
GNUNET_break (0 == ntohl (rm->reserved));
GNUNET_CRYPTO_hash (&rm->public_key,
- sizeof (struct GNUNET_CRYPTO_EccPublicSignKey),
+ sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey),
&hc);
GNUNET_break (GNUNET_OK ==
GNUNET_CONTAINER_multihashmap_put (revocation_map,
peers = GNUNET_CONTAINER_multipeermap_create (128, GNUNET_NO);
GNUNET_SERVER_add_handlers (srv, handlers);
/* Connect to core service and register core handlers */
- coreAPI = GNUNET_CORE_connect (cfg, /* Main configuration */
+ core_api = GNUNET_CORE_connect (cfg, /* Main configuration */
NULL, /* Closure passed to functions */
&core_init, /* Call core_init once connected */
&handle_core_connect, /* Handle connects */
NULL, /* Don't want notified about all outbound messages */
GNUNET_NO, /* For header only outbound notification */
core_handlers); /* Register these handlers */
- if (NULL == coreAPI)
+ if (NULL == core_api)
{
GNUNET_SCHEDULER_shutdown ();
return;