From: Bart Polot Date: Fri, 8 Apr 2011 15:46:04 +0000 (+0000) Subject: Finished an attempt on handle_new_client, changed message types to new API X-Git-Tag: initial-import-from-subversion-38251~18730 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=151f25fc399c71f857e1debf7d5bcd40f99ff80f;p=oweals%2Fgnunet.git Finished an attempt on handle_new_client, changed message types to new API --- diff --git a/src/include/gnunet_protocols.h b/src/include/gnunet_protocols.h index 5b793b5fa..d914ba5c8 100644 --- a/src/include/gnunet_protocols.h +++ b/src/include/gnunet_protocols.h @@ -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 diff --git a/src/mesh/gnunet-service-mesh.c b/src/mesh/gnunet-service-mesh.c index 2eccda5e0..079c5a1fa 100644 --- a/src/mesh/gnunet-service-mesh.c +++ b/src/mesh/gnunet-service-mesh.c @@ -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); } /** diff --git a/src/mesh/mesh.h b/src/mesh/mesh.h index 609d35ec7..3ef0ec397 100644 --- a/src/mesh/mesh.h +++ b/src/mesh/mesh.h @@ -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)