Finished an attempt on handle_new_client, changed message types to new API
authorBart Polot <bart@net.in.tum.de>
Fri, 8 Apr 2011 15:46:04 +0000 (15:46 +0000)
committerBart Polot <bart@net.in.tum.de>
Fri, 8 Apr 2011 15:46:04 +0000 (15:46 +0000)
src/include/gnunet_protocols.h
src/mesh/gnunet-service-mesh.c
src/mesh/mesh.h

index 5b793b5fae6144822174e10833e795b98f1fcd09..d914ba5c87afe78f864a5f5fa63829b59cb67cc7 100644 (file)
@@ -799,18 +799,21 @@ extern "C"
 #define GNUNET_MESSAGE_TYPE_MESH_SPEED_NOTIFY  262
 
 /* FIXME: Document */
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT              272
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_ANY     273
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_ALL     274
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_ADD     275
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_DEL     276
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_BY_TYPE 277
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_CANCEL  278
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TRANSMIT_READY       279
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATED       280
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROYED     281
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA                 282
-#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA_BROADCAST       283
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT                  272
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE            273
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_DESTROY           274
+
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_ADD         275
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_DEL         276
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_BY_TYPE     277
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_CANCEL      278
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_CONNECTED           279
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_DISCONNECTED        280
+
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_REQUEST_TRANSMIT_READY   281
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_NOTIFY_TRANSMIT_READY    282
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA                     283
+#define GNUNET_MESSAGE_TYPE_MESH_LOCAL_DATA_BROADCAST           284
 
 /**
  * 640kb should be enough for everybody
index 2eccda5e0f197558a132296ef7e0bcd3221fa2ac..079c5a1fa246dd78fdc289cfe9d67bb6a9ed1df6 100644 (file)
@@ -542,32 +542,39 @@ handle_local_new_client (void *cls,
 {
     struct Client               *c;
     unsigned int                payload_size;
+//     FIXME: is this needed? should we delete the GNUNET_MESH_Connect struct?
 //     struct GNUNET_MESH_Connect  *connect_msg;
 // 
 //     connect_msg = (struct GNUNET_MESH_Connect *) message;
+    
+    /* FIXME: is this a good idea? */
+    GNUNET_assert(GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT == message->type);
 
-    /* FIXME: check if already exists? NO (optimization) */
+    /* Check data sanity */
     payload_size = message->size - sizeof(struct GNUNET_MessageHeader);
-    /* FIXME: is this way correct? NO */
-    GNUNET_assert(0 == payload_size % sizeof(GNUNET_MESH_ApplicationType));
-    /* GNUNET_break */
-    /* notify done with syserr */
-    /* return */
-    /* Create new client structure */
+    if (0 != payload_size % sizeof(GNUNET_MESH_ApplicationType)) {
+        GNUNET_break(0);
+        GNUNET_SERVER_receive_done(client, GNUNET_SYSERR);
+        return;
+    }
 
+    /* Create new client structure */
     c = GNUNET_malloc(sizeof(struct Client));
     c->handle = client;
     c->tunnels_head = NULL;
     c->tunnels_tail = NULL;
-
-    c->messages_subscribed = GNUNET_malloc(payload_size);
-    memcpy(c->messages_subscribed, &message[1], payload_size);
-    c->subscription_counter = payload_size / sizeof(GNUNET_MESH_ApplicationType);
+    if(payload_size != 0) {
+        c->messages_subscribed = GNUNET_malloc(payload_size);
+        memcpy(c->messages_subscribed, &message[1], payload_size);
+    } else {
+        c->messages_subscribed = NULL;
+    }
+    c->subscription_counter = payload_size/sizeof(GNUNET_MESH_ApplicationType);
 
     /* Insert new client in DLL */
     GNUNET_CONTAINER_DLL_insert (clients_head, clients_tail, c);
 
-    /* FIXME: notify done */
+    GNUNET_SERVER_receive_done(client, GNUNET_OK);
 }
 
 /**
index 609d35ec7c8ca2b2c9c4ccbc7d6fc5645f41e26b..3ef0ec397acb02ffcd40a0a1038ac9184128c141 100644 (file)
@@ -116,7 +116,7 @@ struct GNUNET_MESH_PeerControl {
   /**
    * Type: GNUNET_MESSAGE_TYPE_MESH_LOCAL_CONNECT_PEER_[ADD|DEL]
    *       (client to service, client created tunnel)
-   *       GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_NOTIFY[CONNECT|DISCONNECT]
+   *       GNUNET_MESSAGE_TYPE_MESH_LOCAL_PEER_[CONNECTED|DISCONNECTED]
    *       (service to client)
    * 
    * Size: sizeof(struct GNUNET_MESH_PeerControl)