if (NULL == ic)
{
/* didn't expect a response, reconnect */
- GNUNET_PEERINFO_iterate_cancel (ic);
reconnect (h);
- if (NULL != cb)
- cb (cb_cls, NULL, NULL,
- _("Failed to receive response from `PEERINFO' service."));
return;
}
ic->request_transmitted = GNUNET_NO;
/* normal end of list of peers, signal end, process next pending request */
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Received end of list of peers from `%s' service\n", "PEERINFO");
- GNUNET_PEERINFO_iterate_cancel (ic);
+ GNUNET_PEERINFO_iterate_cancel (ic);
trigger_transmit (h);
- if (GNUNET_NO == h->in_receive)
+ if ( (GNUNET_NO == h->in_receive) &&
+ (NULL != h->ic_head) )
{
h->in_receive = GNUNET_YES;
GNUNET_CLIENT_receive (h->client, &peerinfo_handler, h,
- GNUNET_TIME_absolute_get_remaining (ic->timeout));
- }
+ GNUNET_TIME_absolute_get_remaining (h->ic_head->timeout));
+ }
if (NULL != cb)
cb (cb_cls, NULL, NULL, NULL);
return;
/**
- * Call a method for each known matching host and change its trust
- * value. The callback method will be invoked once for each matching
- * host and then finally once with a NULL pointer. After that final
- * invocation, the iterator context must no longer be used.
+ * Call a method for each known matching host. The callback method
+ * will be invoked once for each matching host and then finally once
+ * with a NULL pointer. After that final invocation, the iterator
+ * context must no longer be used.
*
* Instead of calling this function with 'peer == NULL' it is often
* better to use 'GNUNET_PEERINFO_notify'.
*
* @param h handle to the peerinfo service
+ * @param include_friend_only include HELLO messages for friends only
* @param peer restrict iteration to this peer only (can be NULL)
* @param timeout how long to wait until timing out
* @param callback the method to call for each peer
*/
struct GNUNET_PEERINFO_IteratorContext *
GNUNET_PEERINFO_iterate (struct GNUNET_PEERINFO_Handle *h,
+ int include_friend_only,
const struct GNUNET_PeerIdentity *peer,
struct GNUNET_TIME_Relative timeout,
GNUNET_PEERINFO_Processor callback, void *callback_cls)
{
- struct GNUNET_MessageHeader *lapm;
+ struct ListAllPeersMessage *lapm;
struct ListPeerMessage *lpm;
struct GNUNET_PEERINFO_IteratorContext *ic;
struct GNUNET_PEERINFO_AddContext *ac;
"Requesting list of peers from PEERINFO service\n");
ac =
GNUNET_malloc (sizeof (struct GNUNET_PEERINFO_AddContext) +
- sizeof (struct GNUNET_MessageHeader));
- ac->size = sizeof (struct GNUNET_MessageHeader);
- lapm = (struct GNUNET_MessageHeader *) &ac[1];
- lapm->size = htons (sizeof (struct GNUNET_MessageHeader));
- lapm->type = htons (GNUNET_MESSAGE_TYPE_PEERINFO_GET_ALL);
+ sizeof (struct ListAllPeersMessage));
+ ac->size = sizeof (struct ListAllPeersMessage);
+ lapm = (struct ListAllPeersMessage *) &ac[1];
+ lapm->header.size = htons (sizeof (struct ListAllPeersMessage));
+ lapm->header.type = htons (GNUNET_MESSAGE_TYPE_PEERINFO_GET_ALL);
+ lapm->include_friend_only = htonl (include_friend_only);
}
else
{
lpm = (struct ListPeerMessage *) &ac[1];
lpm->header.size = htons (sizeof (struct ListPeerMessage));
lpm->header.type = htons (GNUNET_MESSAGE_TYPE_PEERINFO_GET);
+ lpm->include_friend_only = htonl (include_friend_only);
memcpy (&lpm->peer, peer, sizeof (struct GNUNET_PeerIdentity));
ic->have_peer = GNUNET_YES;
ic->peer = *peer;