[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r34420 - in gnunet/src: include transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r34420 - in gnunet/src: include transport |
Date: |
Sun, 23 Nov 2014 20:24:08 +0100 |
Author: grothoff
Date: 2014-11-23 20:24:08 +0100 (Sun, 23 Nov 2014)
New Revision: 34420
Modified:
gnunet/src/include/gnunet_protocols.h
gnunet/src/transport/gnunet-service-transport_clients.c
gnunet/src/transport/gnunet-transport.c
gnunet/src/transport/transport_api_monitor_plugins.c
Log:
-fix sync signalling for plugin monitoring
Modified: gnunet/src/include/gnunet_protocols.h
===================================================================
--- gnunet/src/include/gnunet_protocols.h 2014-11-23 19:11:06 UTC (rev
34419)
+++ gnunet/src/include/gnunet_protocols.h 2014-11-23 19:24:08 UTC (rev
34420)
@@ -1348,6 +1348,12 @@
*/
#define GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_EVENT 389
+/**
+ * Monitoring event notifying client that the initial iteration
+ * is now completed and we are in sync with the state of the subsystem.
+ */
+#define GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_SYNC 390
+
/*******************************************************************************
* FS-PUBLISH-HELPER IPC Messages
******************************************************************************/
@@ -2607,7 +2613,7 @@
/**
* Send back peer that considers you are its successor, a confirmation
- * that you got the notify successor message.
+ * that you got the notify successor message.
*/
#define GNUNET_MESSAGE_TYPE_XDHT_P2P_NOTIFY_SUCCESSOR_CONFIRMATION 892
Modified: gnunet/src/transport/gnunet-service-transport_clients.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport_clients.c 2014-11-23
19:11:06 UTC (rev 34419)
+++ gnunet/src/transport/gnunet-service-transport_clients.c 2014-11-23
19:24:08 UTC (rev 34420)
@@ -299,26 +299,32 @@
*/
static struct MonitoringClient *
setup_peer_monitoring_client (struct GNUNET_SERVER_Client *client,
- struct GNUNET_PeerIdentity *peer)
+ const struct GNUNET_PeerIdentity *peer)
{
struct MonitoringClient *mc;
static struct GNUNET_PeerIdentity all_zeros;
- GNUNET_assert (lookup_monitoring_client (peer_monitoring_clients_head,
client) == NULL);
+ GNUNET_assert (NULL ==
+ lookup_monitoring_client (peer_monitoring_clients_head,
+ client));
mc = GNUNET_new (struct MonitoringClient);
mc->client = client;
mc->peer = *peer;
- GNUNET_CONTAINER_DLL_insert (peer_monitoring_clients_head,
peer_monitoring_clients_tail, mc);
+ GNUNET_CONTAINER_DLL_insert (peer_monitoring_clients_head,
+ peer_monitoring_clients_tail,
+ mc);
GNUNET_SERVER_client_mark_monitor (client);
GNUNET_SERVER_notification_context_add (peer_nc, client);
if (0 != memcmp (peer, &all_zeros, sizeof (struct GNUNET_PeerIdentity)))
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Client %p started monitoring of the peer `%s'\n",
- mc, GNUNET_i2s (peer));
+ mc,
+ GNUNET_i2s (peer));
else
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Client %p started monitoring all peers\n", mc);
+ "Client %p started monitoring all peers\n",
+ mc);
return mc;
}
@@ -339,14 +345,20 @@
struct MonitoringClient *mc;
static struct GNUNET_PeerIdentity all_zeros;
- GNUNET_assert (lookup_monitoring_client (val_monitoring_clients_head,
client) == NULL);
+ GNUNET_assert (NULL ==
+ lookup_monitoring_client (val_monitoring_clients_head,
+ client));
mc = GNUNET_new (struct MonitoringClient);
mc->client = client;
mc->peer = *peer;
- GNUNET_CONTAINER_DLL_insert (val_monitoring_clients_head,
val_monitoring_clients_tail, mc);
+ GNUNET_CONTAINER_DLL_insert (val_monitoring_clients_head,
+ val_monitoring_clients_tail,
+ mc);
GNUNET_SERVER_notification_context_add (val_nc, client);
- if (0 != memcmp (peer, &all_zeros, sizeof (struct GNUNET_PeerIdentity)))
+ if (0 != memcmp (peer,
+ &all_zeros,
+ sizeof (struct GNUNET_PeerIdentity)))
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Client %p started monitoring of the peer `%s'\n",
mc, GNUNET_i2s (peer));
@@ -487,7 +499,8 @@
if (client == NULL)
return;
- mc = lookup_monitoring_client (peer_monitoring_clients_head, client);
+ mc = lookup_monitoring_client (peer_monitoring_clients_head,
+ client);
if (mc != NULL)
{
GNUNET_CONTAINER_DLL_remove (peer_monitoring_clients_head,
@@ -495,7 +508,8 @@
mc);
GNUNET_free (mc);
}
- mc = lookup_monitoring_client (val_monitoring_clients_head, client);
+ mc = lookup_monitoring_client (val_monitoring_clients_head,
+ client);
if (mc != NULL)
{
GNUNET_CONTAINER_DLL_remove (val_monitoring_clients_head,
@@ -607,8 +621,7 @@
{
/* client thinks this is a different peer, reject */
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _
- ("Rejecting control connection from peer `%s', which is not
me!\n"),
+ _("Rejecting control connection from peer `%s', which is not
me!\n"),
GNUNET_i2s (&start->self));
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
return;
@@ -1232,27 +1245,16 @@
* @param message the peer address information request
*/
static void
-clients_handle_monitor_peers (void *cls, struct GNUNET_SERVER_Client *client,
- const struct GNUNET_MessageHeader *message)
+clients_handle_monitor_peers (void *cls,
+ struct GNUNET_SERVER_Client *client,
+ const struct GNUNET_MessageHeader *message)
{
static struct GNUNET_PeerIdentity all_zeros;
struct GNUNET_SERVER_TransmitContext *tc;
- struct PeerMonitorMessage *msg;
+ const struct PeerMonitorMessage *msg;
struct IterationContext pc;
- if (ntohs (message->type) !=
GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PEER_REQUEST)
- {
- GNUNET_break (0);
- GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
- return;
- }
- if (ntohs (message->size) != sizeof (struct PeerMonitorMessage))
- {
- GNUNET_break (0);
- GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
- return;
- }
- msg = (struct PeerMonitorMessage *) message;
+ msg = (const struct PeerMonitorMessage *) message;
if ( (GNUNET_YES != ntohl (msg->one_shot)) &&
(NULL != lookup_monitoring_client (peer_monitoring_clients_head,
client)) )
{
@@ -1388,6 +1390,7 @@
const struct GNUNET_TRANSPORT_SessionInfo *info)
{
struct TransportPluginMonitorMessage *msg;
+ struct GNUNET_MessageHeader sync;
size_t size;
size_t slen;
uint16_t alen;
@@ -1399,6 +1402,21 @@
GST_plugins_monitor_subscribe (NULL, NULL);
return;
}
+ if ( (NULL == info) &&
+ (NULL == session) )
+ {
+ /* end of initial iteration */
+ sync.size = htons (sizeof (struct GNUNET_MessageHeader));
+ sync.type = htons (GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_SYNC);
+ GNUNET_SERVER_notification_context_broadcast (plugin_nc,
+ &sync,
+ GNUNET_NO);
+ return;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Plugin event for peer %s on transport %s\n",
+ GNUNET_i2s (&info->address->peer),
+ info->address->transport_name);
slen = strlen (info->address->transport_name) + 1;
alen = info->address->address_length;
size = sizeof (struct TransportPluginMonitorMessage) + slen + alen;
Modified: gnunet/src/transport/gnunet-transport.c
===================================================================
--- gnunet/src/transport/gnunet-transport.c 2014-11-23 19:11:06 UTC (rev
34419)
+++ gnunet/src/transport/gnunet-transport.c 2014-11-23 19:24:08 UTC (rev
34420)
@@ -1599,6 +1599,9 @@
const char *state;
struct PluginMonitorAddress *addr;
+ if ( (NULL == info) &&
+ (NULL == session) )
+ return; /* in sync with transport service */
if ( (NULL != cpid) &&
(0 != memcmp (&info->address->peer,
cpid,
@@ -1740,6 +1743,14 @@
}
+/**
+ * Function called with our result of trying to connect to the
+ * transport service. Will retry 10 times, and if we still
+ * fail to connect terminate with an error message.
+ *
+ * @param cls NULL
+ * @param result #GNUNET_OK if we connected to the service
+ */
static void
try_connect_cb (void *cls,
const int result)
@@ -1753,8 +1764,12 @@
}
retries++;
if (retries < 10)
- tc_handle = GNUNET_TRANSPORT_try_connect (handle, &pid, try_connect_cb,
- NULL);
+ {
+ tc_handle = GNUNET_TRANSPORT_try_connect (handle,
+ &pid,
+ &try_connect_cb,
+ NULL);
+ }
else
{
FPRINTF (stderr,
Modified: gnunet/src/transport/transport_api_monitor_plugins.c
===================================================================
--- gnunet/src/transport/transport_api_monitor_plugins.c 2014-11-23
19:11:06 UTC (rev 34419)
+++ gnunet/src/transport/transport_api_monitor_plugins.c 2014-11-23
19:24:08 UTC (rev 34420)
@@ -296,6 +296,17 @@
reconnect_plugin_ctx (pm);
return;
}
+ if ( (GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_SYNC == ntohs
(msg->type)) &&
+ (sizeof (struct GNUNET_MessageHeader) == ntohs (msg->size)) )
+ {
+ /* we are in sync */
+ pm->cb (pm->cb_cls,
+ NULL,
+ NULL,
+ NULL);
+ return;
+ }
+
if ( (GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_EVENT != ntohs
(msg->type)) ||
(sizeof (struct TransportPluginMonitorMessage) > ntohs (msg->size)) )
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34420 - in gnunet/src: include transport,
gnunet <=