sockaddr_u *sas,
int pkt_len,
int mode,
+ struct pkt *spkt,
char * func_name
)
{
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;
}
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;
}
}
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;
}
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 {