From 00c8a89efe6757ee0cbe43f776f4f7985d988291 Mon Sep 17 00:00:00 2001 From: erdgeist <> Date: Fri, 3 Oct 2008 21:33:53 +0000 Subject: Live syncing between multiple tracker instances via udp multicast. --- ot_livesync.h | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 ot_livesync.h (limited to 'ot_livesync.h') diff --git a/ot_livesync.h b/ot_livesync.h new file mode 100644 index 0000000..4dc6b60 --- /dev/null +++ b/ot_livesync.h @@ -0,0 +1,85 @@ +/* This software was written by Dirk Engling + It is considered beerware. Prost. Skol. Cheers or whatever. + + $id$ */ + +#ifndef __OT_LIVESYNC_H__ +#define __OT_LIVESYNC_H__ + +#include "io.h" +#include "trackerlogic.h" + +/* + Syncing is done as udp packets in the multicast domain 224.23.42.N port 9696 + + Each tracker should join the multicast group and send its live sync packets + to that group, using a ttl of 1 + + Format of a live sync packet is straight forward and depends on N: + + For N == 1: (simple tracker2tracker sync) + 0x0000 0x04 id of tracker instance + [ 0x0004 0x14 info_hash + 0x0018 0x04 peer's ipv4 address + 0x001c 0x02 peer's port + 0x0020 0x02 peer flags v1 ( SEEDING = 0x80, COMPLETE = 0x40, STOPPED = 0x20 ) + ]* + + For N == 2: (aggregator syncs) + 0x0000 0x04 id of tracker instance + [ 0x0004 0x14 info_hash + 0x0018 0x01 number of peers + [ 0x0019 0x04 peer's ipv4 address + 0x001a 0x02 peer's port + 0x0021 0x02 peer flags v1 ( SEEDING = 0x80, COMPLETE = 0x40, STOPPED = 0x20 ) + ]+ + ]* + + + */ + +#ifdef WANT_SYNC_LIVE + +#define LIVESYNC_PORT 9696 +#define LIVESYNC_MCASTDOMAIN_1 224,23,42,1 +#define LIVESYNC_MCASTDOMAIN_2 224,23,42,2 +extern char groupip_1[4]; +extern char groupip_2[4]; + +extern int64 g_livesync_socket; + +#define LIVESYNC_BUFFINSIZE (256*256) +#define LIVESYNC_BUFFSIZE 1504 +#define LIVESYNC_BUFFWATER (sizeof(ot_peer)+sizeof(ot_hash)) + +#define LIVESYNC_MAXDELAY 15 + +void livesync_init(); +void livesync_deinit(); + +/* Join multicast group for listening and create sending socket */ +void livesync_bind_mcast( char *ip, uint16_t port ); + +/* Inform live sync about whats going on. */ +void livesync_tell( ot_hash * const info_hash, const ot_peer * const peer, const uint8_t peerflag ); + +/* Tickle the live sync module from time to time, so no events get + stuck when there's not enough traffic to fill udp packets fast + enough */ +void livesync_ticker( ); + +/* Handle an incoming live sync packet */ +void handle_livesync( const int64 serversocket ); + +#else + +/* If no syncing is required, save calling code from #ifdef + constructions */ + +#define livesync_init() +#define livesync_ticker() +#define handle_livesync(a) + +#endif + +#endif -- cgit v1.2.3