gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r22824 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r22824 - gnunet/src/testbed
Date: Sun, 22 Jul 2012 20:34:26 +0200

Author: harsha
Date: 2012-07-22 20:34:25 +0200 (Sun, 22 Jul 2012)
New Revision: 22824

Modified:
   gnunet/src/testbed/gnunet-service-testbed.c
   gnunet/src/testbed/testbed.h
   gnunet/src/testbed/testbed_api.h
   gnunet/src/testbed/testbed_api_peers.c
Log:
-get peer config & info

Modified: gnunet/src/testbed/gnunet-service-testbed.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed.c 2012-07-22 18:33:55 UTC (rev 
22823)
+++ gnunet/src/testbed/gnunet-service-testbed.c 2012-07-22 18:34:25 UTC (rev 
22824)
@@ -29,8 +29,9 @@
 #include "gnunet_server_lib.h"
 #include <zlib.h>
 
+#include "gnunet_testbed_service.h"
 #include "testbed.h"
-#include "gnunet_testbed_service.h"
+#include "testbed_api.h"
 #include "testbed_api_hosts.h"
 #include "gnunet_testing_lib-new.h"
 
@@ -1389,6 +1390,55 @@
 
 
 /**
+ * Handler for GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG messages
+ *
+ * @param cls NULL
+ * @param client identification of the client
+ * @param message the actual message
+ */
+static void 
+handle_peer_get_config (void *cls,
+                        struct GNUNET_SERVER_Client *client,
+                        const struct GNUNET_MessageHeader *message)
+{
+  const struct GNUNET_TESTBED_PeerGetConfigurationMessage *msg;
+  struct GNUNET_TESTBED_PeerConfigurationInformationMessage *reply;
+  char *config;
+  char *xconfig;
+  size_t c_size;
+  size_t xc_size;  
+  uint32_t peer_id;
+  uint16_t msize;
+  
+  msg = (const struct GNUNET_TESTBED_PeerGetConfigurationMessage *) message;
+  peer_id = ntohl (msg->peer_id);
+  if ((peer_id >= peer_list_size) || (NULL == peer_list[peer_id]))
+  {
+    /* FIXME: return FAILURE message */
+    GNUNET_break (0);
+    GNUNET_SERVER_receive_done (client, GNUNET_OK);
+  }
+  config = GNUNET_CONFIGURATION_serialize (peer_list[peer_id]->cfg,
+                                           &c_size);
+  xc_size = GNUNET_TESTBED_compress_config_ (config, c_size, &xconfig);
+  GNUNET_free (config);
+  msize = xc_size + sizeof (struct
+                            
GNUNET_TESTBED_PeerConfigurationInformationMessage);
+  reply = GNUNET_realloc (xconfig, msize);
+  (void) memmove (&reply[1], reply, xc_size);
+  reply->header.size = htons (msize);
+  reply->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_PEERCONFIG);
+  reply->peer_id = msg->peer_id;
+  reply->operation_id = msg->operation_id;
+  GNUNET_TESTING_peer_get_identity (peer_list[peer_id]->peer,
+                                    &reply->peer_identity);
+  reply->config_size = htons ((uint16_t) c_size);
+  queue_message (client, &reply->header);
+  GNUNET_SERVER_receive_done (client, GNUNET_OK);
+}
+
+
+/**
  * Iterator over hash map entries.
  *
  * @param cls closure
@@ -1557,7 +1607,9 @@
       {&handle_peer_start, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STARTPEER,
        sizeof (struct GNUNET_TESTBED_PeerStartMessage)},
       {&handle_peer_stop, NULL, GNUNET_MESSAGE_TYPE_TESTBED_STOPPEER,
-       sizeof (struct GNUNET_TESTBED_PeerStopMessage)},
+       sizeof (struct GNUNET_TESTBED_PeerStopMessage)},      
+      {&handle_peer_get_config, NULL, 
GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG,
+       sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage)},
       {NULL}
     };
 

Modified: gnunet/src/testbed/testbed.h
===================================================================
--- gnunet/src/testbed/testbed.h        2012-07-22 18:33:55 UTC (rev 22823)
+++ gnunet/src/testbed/testbed.h        2012-07-22 18:34:25 UTC (rev 22824)
@@ -581,9 +581,9 @@
   struct GNUNET_MessageHeader header;
 
   /**
-   * Peer number of the peer that was created.
+   * The id of the peer relevant to this information
    */
-  uint32_t peer_number GNUNET_PACKED;
+  uint32_t peer_id GNUNET_PACKED;
   
   /**
    * Operation ID of the operation that created this event.
@@ -593,8 +593,13 @@
   /**
    * Identity of the peer.
    */
-  struct GNUNET_PeerIdentity peer_id;
+  struct GNUNET_PeerIdentity peer_identity;
 
+  /**
+   * The size of configuration when uncompressed
+   */
+  uint16_t config_size;
+
   /* followed by gzip-compressed configuration of the peer */
 
 };

Modified: gnunet/src/testbed/testbed_api.h
===================================================================
--- gnunet/src/testbed/testbed_api.h    2012-07-22 18:33:55 UTC (rev 22823)
+++ gnunet/src/testbed/testbed_api.h    2012-07-22 18:34:25 UTC (rev 22824)
@@ -51,7 +51,12 @@
     /**
      * Peer destroy operation
      */
-    OP_PEER_DESTROY
+    OP_PEER_DESTROY,
+
+    /**
+     * Get peer information operation
+     */
+    OP_PEER_INFO
   };
 
 

Modified: gnunet/src/testbed/testbed_api_peers.c
===================================================================
--- gnunet/src/testbed/testbed_api_peers.c      2012-07-22 18:33:55 UTC (rev 
22823)
+++ gnunet/src/testbed/testbed_api_peers.c      2012-07-22 18:34:25 UTC (rev 
22824)
@@ -225,7 +225,7 @@
   GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head,
                                     peer->controller->op_tail, op);
   GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header);
-  return NULL;
+  return op;
 }
 
 
@@ -240,9 +240,25 @@
 GNUNET_TESTBED_peer_get_information (struct GNUNET_TESTBED_Peer *peer,
                                     enum GNUNET_TESTBED_PeerInformationType 
pit)
 {
-  // FIXME: handle locally or delegate...
-  GNUNET_break (0);
-  return NULL;
+  struct GNUNET_TESTBED_PeerGetConfigurationMessage *msg;
+  struct GNUNET_TESTBED_Operation *op;
+  
+  GNUNET_assert (GNUNET_TESTBED_PIT_GENERIC != pit);
+  op = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_Operation));
+  op->type = OP_PEER_INFO;
+  op->operation_id = peer->controller->operation_counter++;
+  op->data = peer;
+  msg = GNUNET_malloc (sizeof (struct
+                               GNUNET_TESTBED_PeerGetConfigurationMessage));
+  msg->header.size = htons
+    (sizeof (struct GNUNET_TESTBED_PeerGetConfigurationMessage));
+  msg->header.type = htons (GNUNET_MESSAGE_TYPE_TESTBED_GETPEERCONFIG);
+  msg->peer_id = htonl (peer->unique_id);
+  msg->operation_id = GNUNET_htonll (op->operation_id);
+  GNUNET_CONTAINER_DLL_insert_tail (peer->controller->op_head,
+                                    peer->controller->op_tail, op);
+  GNUNET_TESTBED_queue_message_ (peer->controller, &msg->header);
+  return op;
 }
 
 




reply via email to

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