#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
{
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);
}
/**
/**
* 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)