From: Linux Karlsson Date: Tue, 10 Aug 2010 10:09:28 +0000 (+0200) Subject: Moved check for valid response to process_pkt() to simplify testing. X-Git-Tag: NTP_4_2_7P75~27^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79a4d1a6c88310c4c43b934bc1a56e711416f331;p=thirdparty%2Fntp.git Moved check for valid response to process_pkt() to simplify testing. bk: 4c612558uR0OmaHYyglOy8Si_bGY-A --- diff --git a/sntp/networking.c b/sntp/networking.c index abdea0285..d9b020fb1 100644 --- a/sntp/networking.c +++ b/sntp/networking.c @@ -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; } diff --git a/sntp/networking.h b/sntp/networking.h index 915986edf..36b5002f3 100644 --- a/sntp/networking.h +++ b/sntp/networking.h @@ -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 {