]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink.h
Modified meshlink_invite to generate invites for submesh
[meshlink] / src / meshlink.h
index 35b9bd6478331c4dbe74ffa87b2b44df8ffa9783..b7c2fca6880a9fc507c4e26f79c817a6d816b181 100644 (file)
@@ -54,6 +54,9 @@ typedef struct meshlink_channel meshlink_channel_t;
 /// A struct containing all parameters used for opening a mesh.
 typedef struct meshlink_open_params meshlink_open_params_t;
 
+/// A handle for a MeshLink sub-mesh.
+typedef struct meshlink_submesh meshlink_submesh_t;
+
 /// Code of most recent error encountered.
 typedef enum {
        MESHLINK_OK,        ///< Everything is fine
@@ -67,7 +70,7 @@ typedef enum {
        MESHLINK_ENETWORK,  ///< MeshLink encountered a network error
        MESHLINK_EPEER,     ///< A peer caused an error
        MESHLINK_ENOTSUP,   ///< The operation is not supported in the current configuration of MeshLink
-       MESHLINK_EBUSY,     ///< The MeshLink instance is already in use by another process
+       MESHLINK_EBUSY      ///< The MeshLink instance is already in use by another process
 } meshlink_errno_t;
 
 /// Device class
@@ -114,6 +117,11 @@ struct meshlink_node {
        void *priv;             ///< Private pointer which may be set freely by the application, and is never used or modified by MeshLink.
 };
 
+struct meshlink_submesh {
+       const char *const name; ///< Textual name of this Sub-Mesh. It is stored in a nul-terminated C string, which is allocated by MeshLink.
+       void *priv;             ///< Private pointer which may be set freely by the application, and is never used or modified by MeshLink.
+};
+
 struct meshlink_channel {
        struct meshlink_node *const node; ///< Pointer to the peer of this channel.
        void *priv;                       ///< Private pointer which may be set freely by the application, and is never used or modified by MeshLink.
@@ -210,6 +218,21 @@ extern meshlink_handle_t *meshlink_open_ex(const meshlink_open_params_t *params)
  */
 extern meshlink_handle_t *meshlink_open(const char *confbase, const char *name, const char *appname, dev_class_t devclass);
 
+/// Create Sub-Mesh.
+/** This function causes MeshLink to open a new Sub-Mesh network
+ *  create a new thread, which will handle all network I/O.
+ *
+ *  It is allowed to call this function even if MeshLink is already started, in which case it will return true.
+ *
+ *  @param mesh     A handle which represents an instance of MeshLink.
+  *
+ *  @param submesh  Name of the new Sub-Mesh to create.
+ *
+ *  @return         A pointer to a meshlink_submesh_t which represents this instance of SubMesh, or NULL in case of an error.
+ *                  The pointer is valid until meshlink_close() is called.
+ */
+meshlink_submesh_t *meshlink_submesh_open(meshlink_handle_t  *mesh, const char *submesh);
+
 /// Start MeshLink.
 /** This function causes MeshLink to open network sockets, make outgoing connections, and
  *  create a new thread, which will handle all network I/O.
@@ -328,7 +351,7 @@ typedef enum {
        MESHLINK_INFO,     ///< Informational messages.
        MESHLINK_WARNING,  ///< Warnings which might indicate problems, but which are not real errors.
        MESHLINK_ERROR,    ///< Errors which hamper correct functioning of MeshLink, without causing it to fail completely.
-       MESHLINK_CRITICAL, ///< Critical errors which cause MeshLink to fail completely.
+       MESHLINK_CRITICAL  ///< Critical errors which cause MeshLink to fail completely.
 } meshlink_log_level_t;
 
 /// A callback for receiving log messages generated by MeshLink.
@@ -670,6 +693,7 @@ extern void meshlink_set_invitation_timeout(meshlink_handle_t *mesh, int timeout
  *  The URL can only be used once, after the user has joined the mesh the URL is no longer valid.
  *
  *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param submesh      A handle which represents an instance of SubMesh.
  *  @param name         A nul-terminated C string containing the name that the invitee will be allowed to use in the mesh.
  *                      After this function returns, the application is free to overwrite or free @a name @a.
  *  @param flags        A bitwise-or'd combination of flags that controls how the URL is generated.
@@ -677,7 +701,7 @@ extern void meshlink_set_invitation_timeout(meshlink_handle_t *mesh, int timeout
  *  @return             This function returns a nul-terminated C string that contains the invitation URL, or NULL in case of an error.
  *                      The application should call free() after it has finished using the URL.
  */
-extern char *meshlink_invite_ex(meshlink_handle_t *mesh, const char *name, uint32_t flags);
+extern char *meshlink_invite_ex(meshlink_handle_t *mesh, meshlink_submesh_t *submesh, const char *name, uint32_t flags);
 
 /// Invite another node into the mesh.
 /** This function generates an invitation that can be used by another node to join the same mesh as the local node.
@@ -688,13 +712,14 @@ extern char *meshlink_invite_ex(meshlink_handle_t *mesh, const char *name, uint3
  *  Calling this function is equal to callen meshlink_invite_ex() with flags set to 0.
  *
  *  @param mesh         A handle which represents an instance of MeshLink.
+ *  @param submesh      A handle which represents an instance of SubMesh.
  *  @param name         A nul-terminated C string containing the name that the invitee will be allowed to use in the mesh.
  *                      After this function returns, the application is free to overwrite or free @a name @a.
  *
  *  @return             This function returns a nul-terminated C string that contains the invitation URL, or NULL in case of an error.
  *                      The application should call free() after it has finished using the URL.
  */
-extern char *meshlink_invite(meshlink_handle_t *mesh, const char *name);
+extern char *meshlink_invite(meshlink_handle_t *mesh, meshlink_submesh_t *submesh, const char *name);
 
 /// Use an invitation to join a mesh.
 /** This function allows the local node to join an existing mesh using an invitation URL generated by another node.