Implement TCP Heartbeat
Some users have reported issues where the TCP link to dump1090 can be lost at times of low traffic density - typically in the middle of the night. One possible reason for this is that some routers drop the link if there is no traffic for a predetermined period. To try and resolve this, dump1090 now sends a 'null' packet consisting of 7 "0x00" bytes approximately once a minute if there is no real received traffic during this time. This packet should be discarded by the application receiving the dump1090 because it will have an invalid checksum, and ICAO address 0x000000 is also invalid. However, this null packet should be enough to keep routers alive.
This commit is contained in:
parent
4a438d6e34
commit
f7843c1691
5 changed files with 32 additions and 2 deletions
22
mode_s.c
22
mode_s.c
|
@ -1812,6 +1812,25 @@ void detectModeS(uint16_t *m, uint32_t mlen) {
|
|||
Modes.net_output_raw_rate_count = 0;
|
||||
}
|
||||
}
|
||||
else if ( (Modes.net)
|
||||
&& (Modes.net_heartbeat_rate)
|
||||
&& ((++Modes.net_heartbeat_count) > Modes.net_heartbeat_rate) ) {
|
||||
//
|
||||
// We haven't received any Mode A/C/S messages for some time. To try and keep any TCP
|
||||
// links alive, send a null frame. This will help stop any routers discarding our TCP
|
||||
// link which will cause an un-recoverable link error if/when a real frame arrives.
|
||||
//
|
||||
// Fudge up a null message
|
||||
memset(&mm, 0, sizeof(mm));
|
||||
mm.msgbits = MODES_SHORT_MSG_BITS;
|
||||
mm.timestampMsg = Modes.timestampBlk;
|
||||
|
||||
// Feed output clients
|
||||
modesQueueOutput(&mm);
|
||||
|
||||
// Reset the heartbeat counter
|
||||
Modes.net_heartbeat_count = 0;
|
||||
}
|
||||
}
|
||||
//
|
||||
//=========================================================================
|
||||
|
@ -1836,6 +1855,9 @@ void useModesMessage(struct modesMessage *mm) {
|
|||
|
||||
// Feed output clients
|
||||
if (Modes.net) {modesQueueOutput(mm);}
|
||||
|
||||
// Heartbeat not required whilst we're seeing real messages
|
||||
Modes.net_heartbeat_count = 0;
|
||||
}
|
||||
}
|
||||
//
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue