X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fconnection.h;h=5160422b346b9a01d054d7f828983dbe8421416a;hp=9b272dc88741879e0e291405be05db0694e1717b;hb=8c8b506da9ce578fe6e6e406a91bbd21af13f7a3;hpb=e18a630fd0833d040661ff66f0f6b07210b762a2 diff --git a/src/connection.h b/src/connection.h index 9b272dc8..5160422b 100644 --- a/src/connection.h +++ b/src/connection.h @@ -31,59 +31,53 @@ #define OPTION_VERSION(x) ((x) >> 24) /* Top 8 bits are for protocol minor version */ typedef struct connection_status_t { - unsigned int pinged: 1; /* sent ping */ - unsigned int active: 1; /* 1 if active.. */ - unsigned int connecting: 1; /* 1 if we are waiting for a non-blocking connect() to finish */ - unsigned int unused_termreq: 1; /* the termination of this connection was requested */ - unsigned int remove_unused: 1; /* Set to 1 if you want this connection removed */ - unsigned int timeout_unused: 1; /* 1 if gotten timeout */ - unsigned int unused_encryptout: 1; /* 1 if we can encrypt outgoing traffic */ - unsigned int unused_decryptin: 1; /* 1 if we have to decrypt incoming traffic */ - unsigned int mst: 1; /* 1 if this connection is part of a minimum spanning tree */ - unsigned int control: 1; /* 1 if this is a control connection */ - unsigned int pcap: 1; /* 1 if this is a control connection requesting packet capture */ - unsigned int log: 1; /* 1 if this is a control connection requesting log dump */ - unsigned int invitation: 1; /* 1 if this is an invitation */ - unsigned int invitation_used: 1; /* 1 if the invitation has been consumed */ - unsigned int unused: 19; + uint16_t pinged: 1; /* sent ping */ + uint16_t active: 1; /* 1 if active.. */ + uint16_t connecting: 1; /* 1 if we are waiting for a non-blocking connect() to finish */ + uint16_t unused: 1; + uint16_t control: 1; /* 1 if this is a control connection */ + uint16_t pcap: 1; /* 1 if this is a control connection requesting packet capture */ + uint16_t log: 1; /* 1 if this is a control connection requesting log dump */ + uint16_t invitation: 1; /* 1 if this is an invitation */ + uint16_t invitation_used: 1; /* 1 if the invitation has been consumed */ + uint16_t initiator: 1; /* 1 if we initiated this connection */ } connection_status_t; #include "ecdsa.h" #include "edge.h" #include "net.h" #include "node.h" +#include "submesh.h" typedef struct connection_t { char *name; /* name he claims to have */ + struct node_t *node; /* node associated with the other end */ - union sockaddr_t address; /* his real (internet) ip */ - int protocol_major; /* used protocol */ - int protocol_minor; /* used protocol */ - - int socket; /* socket used for this connection */ - uint32_t options; /* options for this connection */ connection_status_t status; /* status info */ - struct outgoing_t *outgoing; /* used to keep track of outgoing connections */ + int socket; /* socket used for this connection */ + union sockaddr_t address; /* his real (internet) ip */ struct meshlink_handle *mesh; /* the mesh this connection belongs to */ - struct node_t *node; /* node associated with the other end */ - struct edge_t *edge; /* edge associated with this connection */ - ecdsa_t *ecdsa; /* his public ECDSA key */ + // I/O sptps_t sptps; - - int incompression; - int outcompression; - struct buffer_t inbuf; struct buffer_t outbuf; io_t io; /* input/output event on this metadata connection */ int tcplen; /* length of incoming TCPpacket */ int allow_request; /* defined if there's only one request possible */ - time_t last_ping_time; /* last time we saw some activity from the other end or pinged them */ + time_t last_key_renewal; /* last time we renewed the SPTPS key */ + + struct outgoing_t *outgoing; /* used to keep track of outgoing connections */ - splay_tree_t *config_tree; /* Pointer to configuration tree belonging to him */ + struct edge_t *edge; /* edge associated with this connection */ + struct submesh_t *submesh; /* his submesh handle if available in invitation file */ + + // Only used during authentication + ecdsa_t *ecdsa; /* his public ECDSA key */ + int protocol_major; /* used protocol */ + int protocol_minor; /* used protocol */ } connection_t; extern void init_connections(struct meshlink_handle *mesh);