Stop reporting bad GPS serial time to ntp/chrony.
[gpsd.git] / net_gnss_dispatch.c
1 /* net_gnss_dispatch.c -- common interface to a number of Network GNSS services
2  *
3  * This file is Copyright (c) 2010 by the GPSD project
4  * BSD terms apply: see the file COPYING in the distribution root for details.
5  */
6
7 #include <string.h>
8 #include <errno.h>
9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <sys/socket.h>
12 #include <unistd.h>
13
14 #include "gpsd.h"
15 #include "strfuncs.h"
16
17 #define NETGNSS_DGPSIP  "dgpsip://"
18 #define NETGNSS_NTRIP   "ntrip://"
19
20 bool netgnss_uri_check(char *name)
21 /* is given string a valid URI for GNSS/DGPS service? */
22 {
23     return
24         str_starts_with(name, NETGNSS_NTRIP)
25         || str_starts_with(name, NETGNSS_DGPSIP);
26 }
27
28
29 int netgnss_uri_open(struct gps_device_t *dev, char *netgnss_service)
30 /* open a connection to a DGNSS service */
31 {
32 #ifdef NTRIP_ENABLE
33     if (str_starts_with(netgnss_service, NETGNSS_NTRIP)) {
34         dev->ntrip.conn_state = ntrip_conn_init;
35         return ntrip_open(dev, netgnss_service + strlen(NETGNSS_NTRIP));
36     }
37 #endif
38
39     if (str_starts_with(netgnss_service, NETGNSS_DGPSIP))
40         return dgpsip_open(dev, netgnss_service + strlen(NETGNSS_DGPSIP));
41
42 #ifndef REQUIRE_DGNSS_PROTO
43     return dgpsip_open(dev, netgnss_service);
44 #else
45     gpsd_log(&dev->context.errout, LOG_ERROR,
46              "Unknown or unspecified DGNSS protocol for service %s\n",
47              netgnss_service);
48     return -1;
49 #endif
50 }
51
52 void netgnss_report(struct gps_context_t *context,
53                     struct gps_device_t *gps, struct gps_device_t *dgnss)
54 /* may be time to ship a usage report to the DGNSS service */
55 {
56     if (dgnss->servicetype == service_dgpsip)
57         dgpsip_report(context, gps, dgnss);
58 #ifdef NTRIP_ENABLE
59     else if (dgnss->servicetype == service_ntrip)
60         ntrip_report(context, gps, dgnss);
61 #endif
62 }
63
64 /* end */