diff --git a/debian/control b/debian/control index 75aaa96..fa86fac 100644 --- a/debian/control +++ b/debian/control @@ -9,7 +9,8 @@ Vcs-Git: https://github.com/mutability/dump1090.git Package: dump1090-fa Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, python(>=2.5), cron | cron-daemon, curl, lighttpd +Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, lighttpd +Provides: fatsv-data-source Description: ADS-B Ground Station System for RTL-SDR Networked Aviation Mode S / ADS-B decoder/translator with RTL-SDR software defined radio USB device support. diff --git a/debian/cron-template b/debian/cron-template deleted file mode 100644 index ee910bd..0000000 --- a/debian/cron-template +++ /dev/null @@ -1,12 +0,0 @@ -## TEMPLATE FILE - This is used to create /etc/cron.d/dump1090-mutability ## -## The first three lines will be discarded ## - -# Checks for updates to the VRS aircraft database once a day at around 5am; -# when an update is available, downloads it and regenerates the JSON data -# used by the webmap. - -# NB: the minute value below is randomly generated on install, to avoid -# all installs hitting the server at the same time. - -# m h dom mon dow user command -@MIN@ 5 @DOM@ * * @USER@ test -x /usr/share/dump1090-fa/update-aircraft-database.sh && /usr/share/dump1090-fa/update-aircraft-database.sh --log-to-file diff --git a/debian/dump1090-fa.default b/debian/dump1090-fa.default index 936c524..edc6d58 100644 --- a/debian/dump1090-fa.default +++ b/debian/dump1090-fa.default @@ -8,5 +8,5 @@ RECEIVER_OPTIONS="--device-index 0 --gain -10 --ppm 0 --net-bo-port 30005" DECODER_OPTIONS="--max-range 300" -NET_OPTIONS="--net --net-heartbeat 60 --net-ro-size 1000 --net-ro-interval 1 --net-http-port 0 --net-ri-port 0 --net-ro-port 30002 --net-sbs-port 30003 --net-bi-port 30004,30104 --net-bo-port 30005" +NET_OPTIONS="--net --net-heartbeat 60 --net-ro-size 1000 --net-ro-interval 1 --net-ri-port 0 --net-ro-port 30002 --net-sbs-port 30003 --net-bi-port 30004,30104 --net-bo-port 30005" JSON_OPTIONS="--json-location-accuracy 1" diff --git a/debian/dump1090-fa.postrm b/debian/dump1090-fa.postrm index 4dccceb..ca0b0e9 100644 --- a/debian/dump1090-fa.postrm +++ b/debian/dump1090-fa.postrm @@ -20,19 +20,20 @@ set -e case "$1" in - remove) - echo "Disabling dump1090-fa lighttpd integration.." >&2 - lighty-disable-mod dump1090-fa || echo "warning: failed to disable lighttpd module" >&2 - invoke-rc.d lighttpd restart || echo "warning: failed to restart lighttpd" >&2 - ;; - purge) rm -f /etc/default/dump1090-fa - rm -f /etc/cron.d/dump1090-fa - rm -rf /var/cache/dump1090-fa ;; - remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + remove) + if [ -e /etc/lighttpd/conf-enabled/89-dump1090.conf ]; then + echo "Disabling lighttpd integration.." >&2 + lighty-disable-mod dump1090 || true + echo "Restarting lighttpd.." >&2 + invoke-rc.d lighttpd restart || echo "Warning: lighttpd failed to restart." >&2 + fi + ;; + + upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) ;; *) diff --git a/dump1090.c b/dump1090.c index 41f8572..a2a6a31 100644 --- a/dump1090.c +++ b/dump1090.c @@ -150,7 +150,9 @@ void modesInitConfig(void) { Modes.net_output_sbs_ports = strdup("30003"); Modes.net_input_beast_ports = strdup("30004,30104"); Modes.net_output_beast_ports = strdup("30005"); +#ifdef ENABLE_WEBSERVER Modes.net_http_ports = strdup("8080"); +#endif Modes.interactive_rows = getTermRows(); Modes.interactive_display_ttl = MODES_INTERACTIVE_DISPLAY_TTL; Modes.html_dir = HTMLPATH; @@ -680,7 +682,9 @@ void showHelp(void) { "--modeac Enable decoding of SSR Modes 3/A & 3/C\n" "--net-only Enable just networking, no RTL device or file used\n" "--net-bind-address IP address to bind to (default: Any; Use 127.0.0.1 for private)\n" +#ifdef ENABLE_WEBSERVER "--net-http-port HTTP server ports (default: 8080)\n" +#endif "--net-ri-port TCP raw input listen ports (default: 30001)\n" "--net-ro-port TCP raw output listen ports (default: 30002)\n" "--net-sbs-port TCP BaseStation output listen ports (default: 30003)\n" @@ -993,8 +997,14 @@ int main(int argc, char **argv) { free(Modes.net_bind_address); Modes.net_bind_address = strdup(argv[++j]); } else if (!strcmp(argv[j],"--net-http-port") && more) { +#ifdef ENABLE_WEBSERVER free(Modes.net_http_ports); Modes.net_http_ports = strdup(argv[++j]); +#else + if (strcmp(argv[++j], "0")) { + fprintf(stderr, "warning: --net-http-port not supported in this build, option ignored.\n"); + } +#endif } else if (!strcmp(argv[j],"--net-sbs-port") && more) { free(Modes.net_output_sbs_ports); Modes.net_output_sbs_ports = strdup(argv[++j]); diff --git a/dump1090.h b/dump1090.h index 26a7941..d98353e 100644 --- a/dump1090.h +++ b/dump1090.h @@ -292,7 +292,9 @@ struct { // Internal state char *net_output_sbs_ports; // List of SBS output TCP ports char *net_input_beast_ports; // List of Beast input TCP ports char *net_output_beast_ports; // List of Beast output TCP ports +#ifdef ENABLE_WEBSERVER char *net_http_ports; // List of HTTP ports +#endif char *net_bind_address; // Bind address int net_sndbuf_size; // TCP output buffer size (64Kb * 2^n) int net_verbatim; // if true, send the original message, not the CRC-corrected one diff --git a/net_io.c b/net_io.c index d2b0a89..2d5dfc4 100644 --- a/net_io.c +++ b/net_io.c @@ -69,7 +69,9 @@ static int decodeBinMessage(struct client *c, char *p); static int decodeHexMessage(struct client *c, char *hex); +#ifdef ENABLE_WEBSERVER static int handleHTTPRequest(struct client *c, char *p); +#endif static void send_raw_heartbeat(struct net_service *service); static void send_beast_heartbeat(struct net_service *service); @@ -258,8 +260,10 @@ void modesInitNet(void) { s = makeBeastInputService(); serviceListen(s, Modes.net_bind_address, Modes.net_input_beast_ports); +#ifdef ENABLE_WEBSERVER s = serviceInit("HTTP server", NULL, NULL, "\r\n\r\n", handleHTTPRequest); serviceListen(s, Modes.net_bind_address, Modes.net_http_ports); +#endif } // //========================================================================= @@ -1083,9 +1087,11 @@ static char * appendStatsJson(char *p, else p += snprintf(p, end-p, ",%u", st->remote_accepted[i]); } - p += snprintf(p, end-p, "]"); + p += snprintf(p, end-p, "]}"); - p += snprintf(p, end-p, "},\"http_requests\":%u", st->http_requests); +#ifdef ENABLE_WEBSERVER + p += snprintf(p, end-p, ",\"http_requests\":%u", st->http_requests); +#endif } { @@ -1277,6 +1283,7 @@ void writeJsonToFile(const char *file, char * (*generator) (const char *,int*)) } +#ifdef ENABLE_WEBSERVER // //========================================================================= @@ -1471,6 +1478,9 @@ static int handleHTTPRequest(struct client *c, char *p) { Modes.stats_current.http_requests++; return !keepalive; } + +#endif + // //========================================================================= // diff --git a/stats.c b/stats.c index 46ee2a7..38ae169 100644 --- a/stats.c +++ b/stats.c @@ -155,8 +155,10 @@ void display_stats(struct stats *st) { printf("%u unique aircraft tracks\n", st->unique_aircraft); printf("%u aircraft tracks where only one message was seen\n", st->single_message_aircraft); +#ifdef ENABLE_WEBSERVER if (Modes.net) printf("%d HTTP requests\n", st->http_requests); +#endif { uint64_t demod_cpu_millis = (uint64_t)st->demod_cpu.tv_sec*1000UL + st->demod_cpu.tv_nsec/1000000UL; @@ -307,8 +309,10 @@ void add_stats(const struct stats *st1, const struct stats *st2, struct stats *t // total messages: target->messages_total = st1->messages_total + st2->messages_total; +#ifdef ENABLE_WEBSERVER // network: target->http_requests = st1->http_requests + st2->http_requests; +#endif // CPR decoding: target->cpr_surface = st1->cpr_surface + st2->cpr_surface; diff --git a/stats.h b/stats.h index fee4d7d..cfbd854 100644 --- a/stats.h +++ b/stats.h @@ -95,8 +95,10 @@ struct stats { // total messages: uint32_t messages_total; +#ifdef ENABLE_WEBSERVER // network: uint32_t http_requests; +#endif // CPR decoding: unsigned int cpr_surface; diff --git a/tools/update-aircraft-database.sh b/tools/update-aircraft-database.sh deleted file mode 100755 index 68ac191..0000000 --- a/tools/update-aircraft-database.sh +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/bash - -# This script checks for a new version of BasicAircraftLookup from -# the VRS website and, if one is available, downloads it and updates -# the dump1090 webmap json files. - -set -e - -# defaults that can be overridden: -VRS_URL=${VRS_URL:-http://www.virtualradarserver.co.uk/Files/BasicAircraftLookup.sqb.gz} -CACHEDIR=${CACHEDIR:-/var/cache/dump1090-fa} -JSONDIR=${JSONDIR:-$CACHEDIR/db} -SQBDIR=${SQBDIR:-$CACHEDIR/sqb} -LOGFILE=${LOGFILE:-/dev/null} -UPDATESCRIPT=${UPDATESCRIPT:-/usr/share/dump1090-fa/vrs-basicaircraft-to-json.py} - -if [ -f /etc/default/dump1090-mutability ] -then - . /etc/default/dump1090-mutability -fi - -ETAGFILE=$SQBDIR/BasicAircraftLookup.sqb.etag -SQBFILE=$SQBDIR/BasicAircraftLookup.sqb - -CHECKMODIFIED=true -LOGTOFILE=false -while [ "$#" -gt 0 ] -do - case "$1" in - -f|--force) CHECKMODIFIED=false ;; - -l|--log-to-file) LOGTOFILE=true ;; - *) echo "unrecognized option: $1" >&2; exit 1 ;; - esac - shift -done - -if $LOGTOFILE; then exec >>$LOGFILE 2>&1; fi - -log() { - date "+%c $*" >&2 -} - -mkdir -p $CACHEDIR $JSONDIR $SQBDIR -rm -f $ETAGFILE.new $SQBFILE.new - -log "Checking VRS server for an updated database.." - -# get ETag -curl --silent --fail --include --head $VRS_URL | grep ETag >$ETAGFILE.new - -# check for existing file -RETRIEVE=true -ARGS="" -if $CHECKMODIFIED && [ -f $SQBFILE ] -then - if [ -s $ETAGFILE -a -s $ETAGFILE.new ] - then - if cmp -s $ETAGFILE $ETAGFILE.new - then - log "Database not modified." - RETRIEVE=false - else - log "Database modified, will retrieve a new copy." - fi - else - # do an if-modified-since - log "Database possibly modified, will try to retrieve a new copy." - ARGS="-z $SQBFILE" - fi -fi - -if $RETRIEVE -then - log "Retrieving database.." - curl --silent --fail --remote-time --retry 2 $ARGS -o $SQBFILE.new $VRS_URL - mv $ETAGFILE.new $ETAGFILE - if [ -f $SQBFILE.new ] - then - log "Decompressing database.." - zcat $SQBFILE.new >$SQBFILE - touch -r $SQBFILE.new $SQBFILE - rm $SQBFILE.new - else - log "Database not modified." - fi -fi - -UPDATE=true -if $CHECKMODIFIED -then - if test -f $JSONDIR/last_update; then - if ! test $SQBFILE -nt $JSONDIR/last_update; then UPDATE=false; fi - fi -fi - -if $UPDATE -then - log "Updating JSON files from database.." - mkdir -p $JSONDIR/new - $UPDATESCRIPT $SQBFILE $JSONDIR/new - rm -f $JSONDIR/*.json - mv $JSONDIR/new/*.json $JSONDIR/ - touch -r $SQBFILE $JSONDIR/last_update - rmdir $JSONDIR/new - log "Done." -else - log "No update to JSON files needed." -fi -