]> git.meshlink.io Git - meshlink/commitdiff
Skeleton design for opening a reliable channel
authorSaverio Proto <zioproto@gmail.com>
Sat, 28 Jun 2014 10:04:44 +0000 (12:04 +0200)
committerSaverio Proto <zioproto@gmail.com>
Sat, 28 Jun 2014 13:14:16 +0000 (15:14 +0200)
src/meshlink.c
src/meshlink.h
src/meshlink_internal.h

index e5982721d533aadd2cafb8e775f6dcb7b1555916..7d717e5ac564c7957f468635651b56e995f53583 100644 (file)
@@ -1370,6 +1370,16 @@ void meshlink_blacklist(meshlink_handle_t *mesh, meshlink_node_t *node) {
 
 }
 
+meshlink_connection_t* meshlink_open_rchannel(meshlink_handle_t *mesh, meshlink_node_t *destination, uint16_t dport) {
+
+//TODO: check in mesh->socketsbitmap for a free descriptor and allocate a source port for this connection
+
+//TODO: register a callback for the data that will be received from this connection
+
+//TODO: return a description value that the user will use to write on this channel
+
+}
+
 static void __attribute__((constructor)) meshlink_init(void) {
        crypto_init();
 }
index 036637b08cadb6c3ec693cccbedd2c25bd3eda50..96dcdf244aef9192234ff58b61b04fd4504ae089 100644 (file)
@@ -33,6 +33,8 @@ typedef struct meshlink_handle meshlink_handle_t;
 /// A handle for a MeshLink node.
 typedef struct meshlink_node meshlink_node_t;
 
+typedef struct meshlink_connection meshlink_connection_t;
+
 /// Code of most recent error encountered.
 typedef enum {
        MESHLINK_OK,     ///< Everything is fine
@@ -52,6 +54,10 @@ struct meshlink_node {
        void *priv;       ///< Private pointer which the application can set at will.
 };
 
+struct meshlink_connection {
+       uint16_t sd;
+};
+
 #endif // MESHLINK_INTERNAL_H
 
 /// Get the text for the given MeshLink error code.
@@ -308,6 +314,9 @@ extern bool meshlink_import(meshlink_handle_t *mesh, const char *data);
  */
 extern void meshlink_blacklist(meshlink_handle_t *mesh, meshlink_node_t *node);
 
+/// Open a channel to destination node for reliable data delivery
+extern meshlink_connection_t* meshlink_open_rchannel(meshlink_handle_t *mesh, meshlink_node_t *destination, uint16_t dport);
+
 #ifdef __cplusplus
 }
 #endif
index 8700b94e5a1ef2f3a898ce026e6987a032b2416a..f625857dd62b3873733d46f44157b7d6154299e3 100644 (file)
@@ -55,6 +55,11 @@ typedef struct outpacketqueue {
        unsigned int len;
 } outpacketqueue_t;
 
+struct meshlink_connection {
+       uint16_t sd;
+       outpacketqueue_t packetwindow;
+};
+
 /// A handle for an instance of MeshLink.
 struct meshlink_handle {
        char *confbase;
@@ -85,6 +90,8 @@ struct meshlink_handle {
 
        struct list_t *outpacketqueue;
 
+       uint16_t socketsbitmap; //bitmap of 16 bits
+
        int contradicting_add_edge;
        int contradicting_del_edge;
        int sleeptime;