X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fconnection.h;h=600c9542b7769460c10ed4bcb55d4e71a132f18c;hb=d93d4f9dbd09bc5e53a9b5eeb1cc94939fee32bc;hp=75b7024d86fc57756a7a988bf1c3736bf97b2f9e;hpb=8c10a4131f19dc27b0bc56ef48ae481d1fa03cb0;p=tinc diff --git a/src/connection.h b/src/connection.h index 75b7024d..600c9542 100644 --- a/src/connection.h +++ b/src/connection.h @@ -27,6 +27,7 @@ #include "rsa.h" #include "list.h" #include "sptps.h" +#include "logger.h" #define OPTION_INDIRECT 0x0001 #define OPTION_TCPONLY 0x0002 @@ -48,6 +49,7 @@ typedef union connection_status_t { bool control: 1; /* 1 if this is a control connection */ bool pcap: 1; /* 1 if this is a control connection requesting packet capture */ bool log: 1; /* 1 if this is a control connection requesting log dump */ + bool log_color: 1; /* 1 if this connection supports ANSI escape codes */ bool invitation: 1; /* 1 if this is an invitation */ bool invitation_used: 1; /* 1 if the invitation has been consumed */ bool tarpit: 1; /* 1 if the connection should be added to the tarpit */ @@ -60,6 +62,27 @@ typedef union connection_status_t { #include "net.h" #include "node.h" +#ifndef DISABLE_LEGACY +typedef struct legacy_crypto_t { + cipher_t cipher; + digest_t digest; + uint64_t budget; +} legacy_crypto_t; + +bool init_crypto_by_nid(legacy_crypto_t *c, nid_t cipher, nid_t digest) ATTR_WARN_UNUSED; +bool init_crypto_by_name(legacy_crypto_t *c, const char *cipher, const char *digest) ATTR_WARN_UNUSED; +bool decrease_budget(legacy_crypto_t *c, size_t bytes) ATTR_WARN_UNUSED; + +typedef struct legacy_ctx_t { + rsa_t *rsa; /* his public RSA key or my private RSA key */ + legacy_crypto_t in; /* cipher/digest he will use to send data to us */ + legacy_crypto_t out; /* cipher/digest we will use to send data to him */ +} legacy_ctx_t; + +legacy_ctx_t *new_legacy_ctx(rsa_t *rsa); +void free_legacy_ctx(legacy_ctx_t *ctx); +#endif + typedef struct connection_t { char *name; /* name he claims to have */ char *hostname; /* the hostname of its real ip */ @@ -79,20 +102,14 @@ typedef struct connection_t { struct edge_t *edge; /* edge associated with this connection */ #ifndef DISABLE_LEGACY - rsa_t *rsa; /* his public RSA key */ - cipher_t incipher; /* Cipher he will use to send data to us */ - cipher_t outcipher; /* Cipher we will use to send data to him */ - digest_t indigest; - digest_t outdigest; - uint64_t inbudget; - uint64_t outbudget; + legacy_ctx_t *legacy; #endif ecdsa_t *ecdsa; /* his public ECDSA key */ sptps_t sptps; int outmaclength; - int outcompression; /* compression level from compression_level_t */ + debug_t log_level; /* used for REQ_LOG */ uint8_t *hischallenge; /* The challenge we sent to him */ uint8_t *mychallenge; /* The challenge we received */ @@ -100,8 +117,8 @@ typedef struct connection_t { 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 sptpslen; /* length of incoming SPTPS packet */ + uint32_t tcplen; /* length of incoming TCPpacket */ + uint32_t sptpslen; /* length of incoming SPTPS packet */ 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 */ @@ -114,8 +131,8 @@ extern connection_t *everyone; extern void init_connections(void); extern void exit_connections(void); -extern connection_t *new_connection(void) __attribute__((__malloc__)); extern void free_connection(connection_t *c); +extern connection_t *new_connection(void) ATTR_MALLOC ATTR_DEALLOCATOR(free_connection); extern void connection_add(connection_t *c); extern void connection_del(connection_t *c); extern bool dump_connections(struct connection_t *c);