]> git.meshlink.io Git - meshlink/blobdiff - src/meshlink_internal.h
Skeleton design for opening a reliable channel
[meshlink] / src / meshlink_internal.h
index c58c477388620198143136e6603e274cbc129a3f..f625857dd62b3873733d46f44157b7d6154299e3 100644 (file)
@@ -49,6 +49,17 @@ typedef enum proxytype_t {
        PROXY_EXEC,
 } proxytype_t;
 
+typedef struct outpacketqueue {
+       meshlink_node_t *destination;
+       const void *data;
+       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;
@@ -60,7 +71,9 @@ struct meshlink_handle {
        meshlink_log_level_t log_level;
 
        pthread_t thread;
+       bool threadstarted;
        pthread_mutex_t outpacketqueue_mutex;
+       pthread_mutex_t nodes_mutex;
        event_loop_t loop;
        listen_socket_t listen_socket[MAXSOCKETS];
        int listen_sockets;
@@ -77,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;
@@ -125,6 +140,12 @@ struct meshlink_node {
 typedef struct meshlink_packethdr {
        uint8_t destination[16];
        uint8_t source[16];
+       uint16_t dport;
+       uint16_t sport;
+       uint16_t seqno;
 } __attribute__ ((__packed__)) meshlink_packethdr_t;
 
+extern void meshlink_send_from_queue(event_loop_t* el,meshlink_handle_t *mesh);
+
+
 #endif // MESHLINK_INTERNAL_H