X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fmesh%2Fgnunet-service-mesh_local.h;h=6647057b280f165972baa47683834f7d22b9cab0;hb=0f6d24a229e9149db26a4e667ed25032d19f533a;hp=b3a7ad621b4d56e1d63da3deb88d2df977cf6483;hpb=a4221fb791366837276e7bc17ffddfaf8ec758f8;p=oweals%2Fgnunet.git diff --git a/src/mesh/gnunet-service-mesh_local.h b/src/mesh/gnunet-service-mesh_local.h index b3a7ad621..6647057b2 100644 --- a/src/mesh/gnunet-service-mesh_local.h +++ b/src/mesh/gnunet-service-mesh_local.h @@ -40,20 +40,20 @@ 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 ***********************************/ /******************************************************************************/ /** * Initialize server subsystem. - * + * * @param handle Server handle. */ void @@ -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 * @@ -81,26 +126,38 @@ GML_shutdown (void); struct MeshClient * GML_client_get (struct GNUNET_SERVER_Client *client); +/** + * Find a client that has opened a port + * + * @param port Port to check. + * + * @return non-NULL if a client has the port. + */ +struct MeshClient * +GML_client_get_by_port (uint32_t port); + /** * Deletes a tunnel from a client (either owner or destination). * * @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. @@ -110,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. @@ -122,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. - * - * @param ch Channel on which to send the message. - * @param msg Message to modify and send. + * Modify the mesh message ID from global to local and send to client. + * * @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 */