- add separate encryption enabled mesh to avoid breakage during developement
[oweals/gnunet.git] / src / mesh / gnunet-service-mesh_local.h
index 9c0069d0408ba2f891196a91827037ecbd04cd7b..6647057b280f165972baa47683834f7d22b9cab0 100644 (file)
@@ -40,13 +40,13 @@ extern "C"
 #include "platform.h"
 #include "gnunet_util_lib.h"
 
-#include "gnunet-service-mesh_channel.h"
-
 /**
  * Struct containing information about a client of the service
  */
 struct MeshClient;
 
+#include "gnunet-service-mesh_channel.h"
+
 /******************************************************************************/
 /********************************    API    ***********************************/
 /******************************************************************************/
@@ -71,6 +71,51 @@ GML_start (void);
 void
 GML_shutdown (void);
 
+/**
+ * Get a chennel from a client
+ *
+ * @param client the client to check
+ * @param chid Channel ID
+ *
+ * @return non-NULL if channel exists in the global DLL
+ */
+struct MeshChannel *
+GML_channel_get (struct MeshClient *client, uint32_t chid);
+
+/**
+ * Add a channel to a client
+ *
+ * @param client Client.
+ * @param chid Channel ID.
+ * @param ch Channel.
+ */
+void
+GML_channel_add (struct MeshClient *client,
+                 uint32_t chid,
+                 struct MeshChannel *ch);
+
+/**
+ * Remove a channel from a client
+ *
+ * @param client Client.
+ * @param chid Channel ID.
+ * @param ch Channel.
+ */
+void
+GML_channel_remove (struct MeshClient *client,
+                    uint32_t chid,
+                    struct MeshChannel *ch);
+
+/**
+ * Get the tunnel's next free local channel ID.
+ *
+ * @param c Client.
+ *
+ * @return LID of a channel free to use.
+ */
+MESH_ChannelNumber
+GML_get_next_chid (struct MeshClient *c);
+
 /**
  * Check if client has registered with the service and has not disconnected
  *
@@ -96,21 +141,23 @@ GML_client_get_by_port (uint32_t port);
  *
  * @param c Client whose tunnel to delete.
  * @param ch Channel which should be deleted.
+ * @param id Channel ID.
  */
 void
-GML_client_delete_channel (struct MeshClient *c, struct MeshChannel *ch);
+GML_client_delete_channel (struct MeshClient *c,
+                           struct MeshChannel *ch,
+                           MESH_ChannelNumber id);
 
 /**
  * Build a local ACK message and send it to a local client, if needed.
  *
  * If the client was already allowed to send data, do nothing.
  *
- * @param ch Channel on which to send the ACK.
  * @param c Client to whom send the ACK.
- * @param fwd Set to GNUNET_YES for FWD ACK (dest->root)
+ * @param id Channel ID to use
  */
 void
-GML_send_ack (struct MeshChannel *ch, int fwd);
+GML_send_ack (struct MeshClient *c, MESH_ChannelNumber id);
 
 /**
  * Notify the appropriate client that a new incoming channel was created.
@@ -120,7 +167,7 @@ GML_send_ack (struct MeshChannel *ch, int fwd);
 void
 GML_send_channel_create (struct MeshClient *c,
                          uint32_t id, uint32_t port, uint32_t opt,
-                         struct GNUNET_PeerIdentity *peer);
+                         const struct GNUNET_PeerIdentity *peer);
 
 /**
  * Notify a client that a channel is no longer valid.
@@ -132,17 +179,26 @@ void
 GML_send_channel_destroy (struct MeshClient *c, uint32_t id);
 
 /**
- * Modify the mesh message TID from global to local and send to client.
+ * Modify the mesh message ID from global to local and send to client.
  *
- * @param ch Channel on which to send the message.
- * @param msg Message to modify and send.
  * @param c Client to send to.
- * @param tid Tunnel ID to use (c can be both owner and client).
+ * @param msg Message to modify and send.
+ * @param id Channel ID to use (c can be both owner and client).
  */
 void
-GML_send_data (struct MeshChannel *ch,
+GML_send_data (struct MeshClient *c,
                const struct GNUNET_MESH_Data *msg,
-               struct MeshClient *c, MESH_ChannelNumber id);
+               MESH_ChannelNumber id);
+
+/**
+ * Get the static string to represent a client.
+ *
+ * @param c Client.
+ *
+ * @return Static string for the client.
+ */
+const char *
+GML_2s (const struct MeshClient *c);
 
 
 #if 0                           /* keep Emacsens' auto-indent happy */