gnunet-svn
[Top][All Lists]
Advanced

[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)) )
   {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]