#include "ntp_refclock.h"
#include "ntp_stdlib.h"
#include "ntp_calendar.h"
+#include "ntp_clockdev.h"
#include "timespecops.h"
/* get operation modes from mode word.
#define REFID "GPSD" /* reference id */
#define DESCRIPTION "GPSD JSON client clock" /* who we are */
-#define MAX_PDU_LEN 1600
+#define MAX_PDU_LEN 8192 /* multi-GNSS reports can be HUGE */
#define TICKOVER_LOW 10
#define TICKOVER_HIGH 120
#define LOGTHROTTLE 3600
static BOOL convert_ascii_time(l_fp * fp, const char * gps_time);
static void save_ltc(clockprocT * const pp, const char * const tc);
static int syslogok(clockprocT * const pp, gpsd_unitT * const up);
-static void log_data(peerT *peer, const char *what,
+static void log_data(peerT *peer, int level, const char *what,
const char *buf, size_t len);
static int16_t clamped_precision(int rawprec);
clockprocT * const pp = peer->procptr;
gpsd_unitT * up;
gpsd_unitT ** uscan = &s_clock_units;
+ const char *tmpName;
struct stat sb;
* practicable, we will have to read the symlink, if
* any, so we can get the true device file.)
*/
- if (-1 == myasprintf(&up->device, "%s%u",
- s_dev_stem, up->unit)) {
+ tmpName = clockdev_lookup(&peer->srcadr, 0);
+ if (NULL != tmpName) {
+ up->device = estrdup(tmpName);
+ } else if (-1 == myasprintf(&up->device, "%s%u", s_dev_stem, up->unit)) {
msyslog(LOG_ERR, "%s: clock device name too long",
up->logname);
goto dev_fail;
char *pdst, *edst, ch;
/* log the data stream, if this is enabled */
- log_data(peer, "recv", (const char*)rbufp->recv_buffer,
+ log_data(peer, 3, "recv", (const char*)rbufp->recv_buffer,
(size_t)rbufp->recv_length);
esrc = psrc + rbufp->recv_length;
pdst = up->buffer + up->buflen;
- edst = pdst + sizeof(up->buffer) - 1; /* for trailing NUL */
+ edst = up->buffer + sizeof(up->buffer) - 1; /* for trailing NUL */
while (psrc != esrc) {
ch = *psrc++;
size_t rlen = strlen(s_req_version);
DPRINTF(2, ("%s: timer livecheck: '%s'\n",
up->logname, s_req_version));
- log_data(peer, "send", s_req_version, rlen);
+ log_data(peer, 2, "send", s_req_version, rlen);
rc = write(pp->io.fd, s_req_version, rlen);
(void)rc;
} else if (-1 != up->fdt) {
up->device, (up->pf_toff ? ",\"pps\":true" : ""));
buf = up->buffer;
len = strlen(buf);
- log_data(peer, "send", buf, len);
+ log_data(peer, 2, "send", buf, len);
if (len != write(pp->io.fd, buf, len) && (syslogok(pp, up))) {
/* Note: if the server fails to read our request, the
* resulting data timeout will take care of the
static void
log_data(
peerT *peer,
+ int level,
const char *what,
const char *buf ,
size_t len )
clockprocT * const pp = peer->procptr;
gpsd_unitT * const up = (gpsd_unitT *)pp->unitptr;
- if (debug > 1) {
+ if (debug >= level) {
const char *sptr = buf;
const char *stop = buf + len;
char *dptr = s_lbuf;