Improve proxy server support
[tinc] / src / connection.h
index 75b7024..6489ef4 100644 (file)
@@ -27,6 +27,7 @@
 #include "rsa.h"
 #include "list.h"
 #include "sptps.h"
+#include "logger.h"
 
 #define OPTION_INDIRECT         0x0001
 #define OPTION_TCPONLY          0x0002
@@ -60,6 +61,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) ATTR_MALLOC;
+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 +101,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 +116,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,7 +130,7 @@ extern connection_t *everyone;
 
 extern void init_connections(void);
 extern void exit_connections(void);
-extern connection_t *new_connection(void) __attribute__((__malloc__));
+extern connection_t *new_connection(void) ATTR_MALLOC;
 extern void free_connection(connection_t *c);
 extern void connection_add(connection_t *c);
 extern void connection_del(connection_t *c);