]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Moved check for valid response to process_pkt() to simplify testing.
authorLinux Karlsson <karlsson@ntp.org>
Tue, 10 Aug 2010 10:09:28 +0000 (12:09 +0200)
committerLinux Karlsson <karlsson@ntp.org>
Tue, 10 Aug 2010 10:09:28 +0000 (12:09 +0200)
bk: 4c612558uR0OmaHYyglOy8Si_bGY-A

sntp/networking.c
sntp/networking.h

index abdea0285ec15e850fb13df8f3347022a16f1faa..d9b020fb1d4faacb316e19b3e0a23ed61887f75f 100644 (file)
@@ -287,6 +287,7 @@ process_pkt (
        sockaddr_u *sas,
        int pkt_len,
        int mode,
+       struct pkt *spkt,
        char * func_name
        )
 {
@@ -425,6 +426,23 @@ unusable:
                        printf("sntp %s: Server not in sync, skipping this server\n", func_name);
                return SERVER_UNUSEABLE;
        }
+
+       /*
+        * Decode the org timestamp and make sure we're getting a response
+        * to our last request, but only if we're not in broadcast mode.
+        */
+#ifdef DEBUG
+       printf("rpkt->org:\n");
+       l_fp_output(&rpkt->org, stdout);
+       printf("spkt->xmt:\n");
+       l_fp_output(&spkt->xmt, stdout);
+#endif
+       if (!L_ISEQU(&rpkt->org, &spkt->xmt) && mode != MODE_BROADCAST) {
+               if (ENABLED_OPT(NORMALVERBOSE))
+                       printf("sntp process_pkt: pkt.org and peer.xmt differ\n");
+               return PACKET_UNUSEABLE;
+       }
+
        return pkt_len;
 }
 
@@ -441,7 +459,7 @@ recv_bcst_pkt (
        if (pkt_len < 0) {
                return BROADCAST_FAILED;
        }
-       pkt_len = process_pkt(rpkt, sas, pkt_len, MODE_BROADCAST, "recv_bcst_pkt");
+       pkt_len = process_pkt(rpkt, sas, pkt_len, MODE_BROADCAST, NULL, "recv_bcst_pkt");
        return pkt_len;
 }
 
@@ -487,24 +505,8 @@ recvpkt (
        }
        pkt_len = recvdata(rsock, &sender, (char *)rpkt, rsize);
        if (pkt_len > 0)
-               pkt_len = process_pkt(rpkt, &sender, pkt_len, MODE_SERVER, "recvpkt");
-       if (pkt_len < 0)
-               return pkt_len;
-       /*
-        * Decode the org timestamp and make sure we're getting a response
-        * to our last request. 
-        */
-#ifdef DEBUG
-       printf("rpkt->org:\n");
-       l_fp_output(&rpkt->org, stdout);
-       printf("spkt->xmt:\n");
-       l_fp_output(&spkt->xmt, stdout);
-#endif
-       if (!L_ISEQU(&rpkt->org, &spkt->xmt)) {
-               if (ENABLED_OPT(NORMALVERBOSE))
-                       printf("sntp recvpkt: pkt.org and peer.xmt differ\n");
-               return PACKET_UNUSEABLE;
-       }
+               pkt_len = process_pkt(rpkt, &sender, pkt_len, MODE_SERVER, spkt, "recvpkt");
+
        return pkt_len;
 }
 
index 915986edf9ea52f400ba6a10d435f461efb3afce..36b5002f3bf28b74671cbf530fa14962a2ba56b1 100644 (file)
@@ -50,7 +50,7 @@ int recv_bcst_data (SOCKET rsock, char *rdata, int rdata_len, sockaddr_u *sas, s
 
 int recv_bcst_pkt (SOCKET rsock, struct pkt *rpkt, unsigned int rsize, sockaddr_u *sas);
 
-int process_pkt (struct pkt *rpkt, sockaddr_u *sas,    int pkt_len, int mode, char * func_name);
+int process_pkt (struct pkt *rpkt, sockaddr_u *sas,    int pkt_len, int mode, struct pkt *spkt, char * func_name);
 
 /* Shortened peer structure. Not absolutely necessary yet */
 struct speer {