From b63072b3e8bb09fa43533d262f9653cac77f12bf Mon Sep 17 00:00:00 2001 From: c vw Date: Fri, 7 Jan 2022 09:55:40 +0100 Subject: [PATCH] Prevent "duplicate UDP discovery" if IP addr given is local --- discovery.c | 1 - old_discovery.c | 35 ++++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/discovery.c b/discovery.c index f5d839b..8573283 100644 --- a/discovery.c +++ b/discovery.c @@ -149,7 +149,6 @@ static gboolean radio_ip_cb (GtkWidget *widget, GdkEventButton *event, gpointer cp = gtk_entry_get_text(GTK_ENTRY(tcpaddr)); len=strnlen(cp,IPADDR_LEN); - fprintf(stderr,">>>>%s<<<<\n", cp); if (len == 0) return TRUE; if (inet_pton(AF_INET, cp, &(sa.sin_addr)) != 1) return TRUE; diff --git a/old_discovery.c b/old_discovery.c index 711a949..6d48f36 100644 --- a/old_discovery.c +++ b/old_discovery.c @@ -117,6 +117,12 @@ static void discover(struct ifaddrs* iface, int discflag) { // // Send METIS detection packet via UDP to ipaddr_radio // + memset(&to_addr, 0, sizeof(to_addr)); + to_addr.sin_family=AF_INET; + to_addr.sin_port=htons(DISCOVERY_PORT); + if (inet_aton(ipaddr_radio, &to_addr.sin_addr) == 0) { + return; + } fprintf(stderr,"discover: looking for HPSDR device with IP %s\n", ipaddr_radio); discovery_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP); @@ -124,12 +130,6 @@ static void discover(struct ifaddrs* iface, int discflag) { perror("discover: create socket failed for discovery_socket:"); return; } - to_addr.sin_family=AF_INET; - to_addr.sin_port=htons(DISCOVERY_PORT); - if (inet_aton(ipaddr_radio, &to_addr.sin_addr) == 0) { - fprintf(stderr, "discover: Radio UDP addr %s is invalid!\n", ipaddr_radio); - return; - } break; case 3: // @@ -137,14 +137,13 @@ static void discover(struct ifaddrs* iface, int discflag) { // This is rather tricky, one must avoid "hanging" when the // connection does not succeed. // - fprintf(stderr,"Trying to detect via TCP with IP %s\n", ipaddr_radio); memset(&to_addr, 0, sizeof(to_addr)); to_addr.sin_family = AF_INET; + to_addr.sin_port=htons(DISCOVERY_PORT); if (inet_aton(ipaddr_radio, &to_addr.sin_addr) == 0) { - fprintf(stderr,"discover: TCP addr %s is invalid!\n",ipaddr_radio); return; } - to_addr.sin_port=htons(DISCOVERY_PORT); + fprintf(stderr,"Trying to detect via TCP with IP %s\n", ipaddr_radio); discovery_socket=socket(AF_INET, SOCK_STREAM, 0); if(discovery_socket<0) { @@ -425,6 +424,7 @@ g_print("old_discovery: name=%s min=%f max=%f\n",discovered[devices].name, disco void old_discovery() { struct ifaddrs *addrs,*ifa; + int i, is_local; fprintf(stderr,"old_discovery\n"); // @@ -450,17 +450,22 @@ fprintf(stderr,"old_discovery\n"); } // - // If a radio ip addr is given, try sending a UDP packet to that address - // and try connecting via TCP + // If an IP address has already been "discovered" via a + // METIS broadcast package, it makes no sense to re-discover + // it via a routed UDP packet. // - if (strlen(ipaddr_radio) > 1) { - discover(NULL, 2); - discover(NULL, 3); + is_local=0; + for (i=0; i