X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fconnection.h;h=5160422b346b9a01d054d7f828983dbe8421416a;hp=c3c219be4d0ae0bce1463453f0ca11c88e3da1a8;hb=8c8b506da9ce578fe6e6e406a91bbd21af13f7a3;hpb=f416117836dc944822cac06efb54377fb21ee66f diff --git a/src/connection.h b/src/connection.h index c3c219be..5160422b 100644 --- a/src/connection.h +++ b/src/connection.h @@ -1,6 +1,9 @@ +#ifndef MESHLINK_CONNECTION_H +#define MESHLINK_CONNECTION_H + /* connection.h -- header for connection.c - Copyright (C) 2000-2013 Guus Sliepen + Copyright (C) 2000-2013, 2017 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,9 +20,6 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef __MESHLINK_CONNECTION_H__ -#define __MESHLINK_CONNECTION_H__ - #include "buffer.h" #include "list.h" #include "sptps.h" @@ -31,67 +31,60 @@ #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 */ - char *hostname; /* the hostname of its real 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 */ + + struct edge_t *edge; /* edge associated with this connection */ + struct submesh_t *submesh; /* his submesh handle if available in invitation file */ - splay_tree_t *config_tree; /* Pointer to configuration tree belonging to him */ + // 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); extern void exit_connections(struct meshlink_handle *mesh); -extern connection_t *new_connection(void) __attribute__ ((__malloc__)); +extern connection_t *new_connection(void) __attribute__((__malloc__)); extern void free_connection(connection_t *); extern void connection_add(struct meshlink_handle *mesh, connection_t *); extern void connection_del(struct meshlink_handle *mesh, connection_t *); -#endif /* __MESHLINK_CONNECTION_H__ */ +#endif