[hamradio-commits] [dump1090] 294/373: B"H view1090: handle disconnection

Matthew Ernisse mernisse-guest at moszumanska.debian.org
Thu Oct 23 14:58:29 UTC 2014


This is an automated email from the git hooks/post-receive script.

mernisse-guest pushed a commit to branch backport
in repository dump1090.

commit 96015e38c895db145937b756beb78a4e7fb497aa
Author: hhm <heehooman+vcs-ci at gmail.com>
Date:   Wed Jul 2 07:38:46 2014 -0400

    B"H view1090: handle disconnection
    
     - keep trying to reconnect to server if disconnected
---
 view1090.c | 58 ++++++++++++++++++++++++++++++++++++++--------------------
 view1090.h |  2 ++
 2 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/view1090.c b/view1090.c
index 4830bca..59498be 100644
--- a/view1090.c
+++ b/view1090.c
@@ -115,6 +115,33 @@ void view1090Init(void) {
     // Prepare error correction tables
     modesInitErrorInfo();
 }
+
+// Set up data connection
+int setupConnection(struct client *c) {
+    int fd;
+
+    // Try to connect to the selected ip address and port. We only support *ONE* input connection which we initiate.here.
+    if ((fd = anetTcpConnect(Modes.aneterr, View1090.net_input_beast_ipaddr, Modes.net_input_beast_port)) != ANET_ERR) {
+		//
+		// Setup a service callback client structure for a beast binary input (from dump1090)
+		// This is a bit dodgy under Windows. The fd parameter is a handle to the internet
+		// socket on which we are receiving data. Under Linux, these seem to start at 0 and 
+		// count upwards. However, Windows uses "HANDLES" and these don't nececeriy start at 0.
+		// dump1090 limits fd to values less than 1024, and then uses the fd parameter to 
+		// index into an array of clients. This is ok-ish if handles are allocated up from 0.
+		// However, there is no gaurantee that Windows will behave like this, and if Windows 
+		// allocates a handle greater than 1024, then dump1090 won't like it. On my test machine, 
+		// the first Windows handle is usually in the 0x54 (84 decimal) region.
+
+		c->next    = NULL;
+		c->buflen  = 0;
+		c->fd      = 
+		c->service =
+		Modes.bis  = fd;
+		Modes.clients = c;
+    }
+    return fd;
+}
 //
 // ================================ Main ====================================
 //
@@ -181,6 +208,7 @@ void showCopyright(void) {
 int main(int argc, char **argv) {
     int j, fd;
     struct client *c;
+    char pk_buf[8];
 
     // Set sane defaults
 
@@ -244,34 +272,24 @@ int main(int argc, char **argv) {
     view1090Init();
 
     // Try to connect to the selected ip address and port. We only support *ONE* input connection which we initiate.here.
-    if ((fd = anetTcpConnect(Modes.aneterr, View1090.net_input_beast_ipaddr, Modes.net_input_beast_port)) == ANET_ERR) {
+    c = (struct client *) malloc(sizeof(*c));
+    if ((fd = setupConnection(c)) == ANET_ERR) {
         fprintf(stderr, "Failed to connect to %s:%d\n", View1090.net_input_beast_ipaddr, Modes.net_input_beast_port);
         exit(1);
     }
-    //
-    // Setup a service callback client structure for a beast binary input (from dump1090)
-    // This is a bit dodgy under Windows. The fd parameter is a handle to the internet
-    // socket on which we are receiving data. Under Linux, these seem to start at 0 and 
-    // count upwards. However, Windows uses "HANDLES" and these don't nececeriy start at 0.
-    // dump1090 limits fd to values less than 1024, and then uses the fd parameter to 
-    // index into an array of clients. This is ok-ish if handles are allocated up from 0.
-    // However, there is no gaurantee that Windows will behave like this, and if Windows 
-    // allocates a handle greater than 1024, then dump1090 won't like it. On my test machine, 
-    // the first Windows handle is usually in the 0x54 (84 decimal) region.
-
-    c = (struct client *) malloc(sizeof(*c));
-    c->next    = NULL;
-    c->buflen  = 0;
-    c->fd      = 
-    c->service =
-    Modes.bis  = fd;
-    Modes.clients = c;
 
     // Keep going till the user does something that stops us
     while (!Modes.exit) {
-        modesReadFromClient(c,"",decodeBinMessage);
         interactiveRemoveStaleAircrafts();
         interactiveShowData();
+        if ((fd == ANET_ERR) || (recv(c->fd, pk_buf, sizeof(pk_buf), MSG_PEEK | MSG_DONTWAIT) == 0)) {
+			free(c);
+			usleep(1000000);
+			c = (struct client *) malloc(sizeof(*c));
+			fd = setupConnection(c);
+			continue;
+        }
+        modesReadFromClient(c,"",decodeBinMessage);
     }
 
     // The user has stopped us, so close any socket we opened
diff --git a/view1090.h b/view1090.h
index c4c97fe..03ad96d 100644
--- a/view1090.h
+++ b/view1090.h
@@ -49,6 +49,8 @@
     #include <fcntl.h>
     #include <ctype.h>
     #include <sys/stat.h>
+    #include <sys/types.h>
+    #include <sys/socket.h>
     #include "rtl-sdr.h"
     #include "anet.h"
 #else

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/dump1090.git



More information about the pkg-hamradio-commits mailing list