diff options
| author | Dirk Engling <erdgeist@erdgeist.org> | 2024-04-03 22:25:30 +0200 |
|---|---|---|
| committer | Dirk Engling <erdgeist@erdgeist.org> | 2024-04-03 22:25:30 +0200 |
| commit | 2afc4893bf802700a1decfff57673cefc861c7e7 (patch) | |
| tree | 9a0817371ac05062dbcf25107fcf5a6481feccc0 /trackerlogic.h | |
| parent | eb8834f7783cb85ae825976425800cd4af711263 (diff) | |
Prepare opentracker for dual stack capabilities
Diffstat (limited to 'trackerlogic.h')
| -rw-r--r-- | trackerlogic.h | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/trackerlogic.h b/trackerlogic.h index f43b4f1..24ef097 100644 --- a/trackerlogic.h +++ b/trackerlogic.h | |||
| @@ -24,16 +24,12 @@ typedef time_t ot_time; | |||
| 24 | typedef char ot_ip6[16]; | 24 | typedef char ot_ip6[16]; |
| 25 | typedef struct { ot_ip6 address; int bits; } | 25 | typedef struct { ot_ip6 address; int bits; } |
| 26 | ot_net; | 26 | ot_net; |
| 27 | #ifdef WANT_V6 | ||
| 28 | #define OT_IP_SIZE 16 | ||
| 29 | #define PEERS_BENCODED "6:peers6" | ||
| 30 | /* List of peers should fit in a single UDP packet (around 1200 bytes) */ | 27 | /* List of peers should fit in a single UDP packet (around 1200 bytes) */ |
| 31 | #define OT_MAX_PEERS_UDP 66 | 28 | #define OT_MAX_PEERS_UDP6 66 |
| 32 | #else | 29 | #define OT_MAX_PEERS_UDP4 200 |
| 33 | #define OT_IP_SIZE 4 | 30 | |
| 34 | #define PEERS_BENCODED "5:peers" | 31 | #define OT_IP_SIZE6 16 |
| 35 | #define OT_MAX_PEERS_UDP 200 | 32 | #define OT_IP_SIZE4 4 |
| 36 | #endif | ||
| 37 | #define OT_PORT_SIZE 2 | 33 | #define OT_PORT_SIZE 2 |
| 38 | #define OT_FLAG_SIZE 1 | 34 | #define OT_FLAG_SIZE 1 |
| 39 | #define OT_TIME_SIZE 1 | 35 | #define OT_TIME_SIZE 1 |
| @@ -61,6 +57,7 @@ typedef struct { ot_ip6 address; int bits; } | |||
| 61 | #define OT_ADMINIP_MAX 64 | 57 | #define OT_ADMINIP_MAX 64 |
| 62 | #define OT_MAX_THREADS 64 | 58 | #define OT_MAX_THREADS 64 |
| 63 | 59 | ||
| 60 | /* Number of minutes after announce before peer is removed */ | ||
| 64 | #define OT_PEER_TIMEOUT 45 | 61 | #define OT_PEER_TIMEOUT 45 |
| 65 | 62 | ||
| 66 | /* We maintain a list of 1024 pointers to sorted list of ot_torrent structs | 63 | /* We maintain a list of 1024 pointers to sorted list of ot_torrent structs |
| @@ -78,23 +75,35 @@ extern volatile int g_opentracker_running; | |||
| 78 | extern uint32_t g_tracker_id; | 75 | extern uint32_t g_tracker_id; |
| 79 | typedef enum { FLAG_TCP, FLAG_UDP, FLAG_MCA, FLAG_SELFPIPE } PROTO_FLAG; | 76 | typedef enum { FLAG_TCP, FLAG_UDP, FLAG_MCA, FLAG_SELFPIPE } PROTO_FLAG; |
| 80 | 77 | ||
| 81 | #define OT_PEER_COMPARE_SIZE ((OT_IP_SIZE)+(OT_PORT_SIZE)) | 78 | #define OT_PEER_COMPARE_SIZE6 ((OT_IP_SIZE6)+(OT_PORT_SIZE)) |
| 82 | #define OT_PEER_SIZE ((OT_TIME_SIZE)+(OT_FLAG_SIZE)+(OT_PEER_COMPARE_SIZE)) | 79 | #define OT_PEER_COMPARE_SIZE4 ((OT_IP_SIZE4)+(OT_PORT_SIZE)) |
| 83 | typedef uint8_t ot_peer[OT_PEER_SIZE]; | 80 | #define OT_PEER_COMPARE_SIZE_FROM_PEER_SIZE(PEER_SIZE) ((PEER_SIZE)-(OT_TIME_SIZE)-(OT_FLAG_SIZE)) |
| 81 | |||
| 82 | #define OT_PEER_SIZE6 ((OT_TIME_SIZE)+(OT_FLAG_SIZE)+(OT_PEER_COMPARE_SIZE6)) | ||
| 83 | #define OT_PEER_SIZE4 ((OT_TIME_SIZE)+(OT_FLAG_SIZE)+(OT_PEER_COMPARE_SIZE4)) | ||
| 84 | |||
| 85 | typedef uint8_t ot_peer[1]; | ||
| 86 | typedef uint8_t ot_peer6[OT_PEER_SIZE6]; | ||
| 87 | typedef uint8_t ot_peer4[OT_PEER_SIZE4]; | ||
| 84 | static const uint8_t PEER_FLAG_SEEDING = 0x80; | 88 | static const uint8_t PEER_FLAG_SEEDING = 0x80; |
| 85 | static const uint8_t PEER_FLAG_COMPLETED = 0x40; | 89 | static const uint8_t PEER_FLAG_COMPLETED = 0x40; |
| 86 | static const uint8_t PEER_FLAG_STOPPED = 0x20; | 90 | static const uint8_t PEER_FLAG_STOPPED = 0x20; |
| 87 | static const uint8_t PEER_FLAG_FROM_SYNC = 0x10; | 91 | static const uint8_t PEER_FLAG_FROM_SYNC = 0x10; |
| 88 | static const uint8_t PEER_FLAG_LEECHING = 0x00; | 92 | static const uint8_t PEER_FLAG_LEECHING = 0x00; |
| 89 | 93 | ||
| 90 | #ifdef WANT_V6 | 94 | /* Takes an ot_peer6 and returns the proper pointer to the peer and sets peer_size */ |
| 91 | #define OT_SETIP(peer,ip) memcpy((peer),(ip),(OT_IP_SIZE)) | 95 | ot_peer *peer_from_peer6(ot_peer6 *peer, size_t *peer_size); |
| 92 | #else | 96 | size_t peer_size_from_peer6(ot_peer6 *peer); |
| 93 | #define OT_SETIP(peer,ip) memcpy((peer),(((uint8_t*)ip)+12),(OT_IP_SIZE)) | 97 | |
| 94 | #endif | 98 | /* New style */ |
| 95 | #define OT_SETPORT(peer,port) memcpy(((uint8_t*)(peer))+(OT_IP_SIZE),(port),2) | 99 | #define OT_SETIP(peer,ip) memcpy((peer),(ip),OT_IP_SIZE6) |
| 96 | #define OT_PEERFLAG(peer) (((uint8_t*)(peer))[(OT_IP_SIZE)+2]) | 100 | #define OT_SETPORT(peer,port) memcpy(((uint8_t*)(peer))+(OT_IP_SIZE6),(port),2) |
| 97 | #define OT_PEERTIME(peer) (((uint8_t*)(peer))[(OT_IP_SIZE)+3]) | 101 | #define OT_PEERFLAG(peer) (((uint8_t*)(peer))[(OT_IP_SIZE6)+2]) |
| 102 | #define OT_PEERFLAG_D(peer,peersize) (((uint8_t*)(peer))[(peersize)-2]) | ||
| 103 | #define OT_PEERTIME(peer,peersize) (((uint8_t*)(peer))[(peersize)-1]) | ||
| 104 | |||
| 105 | #define PEERS_BENCODED6 "6:peers6" | ||
| 106 | #define PEERS_BENCODED4 "5:peers" | ||
| 98 | 107 | ||
| 99 | #define OT_HASH_COMPARE_SIZE (sizeof(ot_hash)) | 108 | #define OT_HASH_COMPARE_SIZE (sizeof(ot_hash)) |
| 100 | 109 | ||
| @@ -102,7 +111,8 @@ struct ot_peerlist; | |||
| 102 | typedef struct ot_peerlist ot_peerlist; | 111 | typedef struct ot_peerlist ot_peerlist; |
| 103 | typedef struct { | 112 | typedef struct { |
| 104 | ot_hash hash; | 113 | ot_hash hash; |
| 105 | ot_peerlist *peer_list; | 114 | ot_peerlist *peer_list6; |
| 115 | ot_peerlist *peer_list4; | ||
| 106 | } ot_torrent; | 116 | } ot_torrent; |
| 107 | 117 | ||
| 108 | #include "ot_vector.h" | 118 | #include "ot_vector.h" |
| @@ -131,7 +141,7 @@ struct ot_workstruct { | |||
| 131 | #endif | 141 | #endif |
| 132 | 142 | ||
| 133 | /* The peer currently in the working */ | 143 | /* The peer currently in the working */ |
| 134 | ot_peer peer; | 144 | ot_peer6 peer; /* Can fit v6 and v4 peers */ |
| 135 | 145 | ||
| 136 | /* Pointers into the request buffer */ | 146 | /* Pointers into the request buffer */ |
| 137 | ot_hash *hash; | 147 | ot_hash *hash; |
