static void ntrip_str_parse(char *str, size_t len, struct ntrip_stream_t *hold, const struct gpsd_errout_t *errout) { char *s, *eol = str + len; memset(hold, 0, sizeof(*hold)); /* <mountpoint> */ if ((s = ntrip_field_iterate(str, NULL, eol, errout))) (void)strlcpy(hold->mountpoint, s, sizeof(hold->mountpoint)); /* <identifier> */ s = ntrip_field_iterate(NULL, s, eol, errout); /* <format> */ if ((s = ntrip_field_iterate(NULL, s, eol, errout))) { if (strcasecmp("RTCM 2", s) == 0) hold->format = fmt_rtcm2; else if (strcasecmp("RTCM 2.0", s) == 0) hold->format = fmt_rtcm2_0; else if (strcasecmp("RTCM 2.1", s) == 0) hold->format = fmt_rtcm2_1; else if (strcasecmp("RTCM 2.2", s) == 0) hold->format = fmt_rtcm2_2; else if (strcasecmp("RTCM 2.3", s) == 0) hold->format = fmt_rtcm2_3; /* required for the SAPOS derver in Gemany, confirmed as RTCM2.3 */ else if (strcasecmp("RTCM1_", s) == 0) hold->format = fmt_rtcm2_3; else if (strcasecmp("RTCM 3.0", s) == 0) hold->format = fmt_rtcm3; else hold->format = fmt_unknown; } /* <format-details> */ s = ntrip_field_iterate(NULL, s, eol, errout); /* <carrier> */ if ((s = ntrip_field_iterate(NULL, s, eol, errout))) hold->carrier = atoi(s); /* <nav-system> */ s = ntrip_field_iterate(NULL, s, eol, errout); /* <network> */ s = ntrip_field_iterate(NULL, s, eol, errout); /* <country> */ s = ntrip_field_iterate(NULL, s, eol, errout); /* <latitude> */ hold->latitude = NAN; if ((s = ntrip_field_iterate(NULL, s, eol, errout))) hold->latitude = atof(s); /* <longitude> */ hold->longitude = NAN; if ((s = ntrip_field_iterate(NULL, s, eol, errout))) hold->longitude = atof(s); /* <nmea> */ if ((s = ntrip_field_iterate(NULL, s, eol, errout))) { hold->nmea = atoi(s); } /* <solution> */ s = ntrip_field_iterate(NULL, s, eol, errout); /* <generator> */ s = ntrip_field_iterate(NULL, s, eol, errout); /* <compr-encryp> */ if ((s = ntrip_field_iterate(NULL, s, eol, errout))) { if (strcasecmp("none", s) == 0) hold->compr_encryp = cmp_enc_none; else hold->compr_encryp = cmp_enc_unknown; } /* <authentication> */ if ((s = ntrip_field_iterate(NULL, s, eol, errout))) { if (strcasecmp("N", s) == 0) hold->authentication = auth_none; else if (strcasecmp("B", s) == 0) hold->authentication = auth_basic; else if (strcasecmp("D", s) == 0) hold->authentication = auth_digest; else hold->authentication = auth_unknown; } /* <fee> */ if ((s = ntrip_field_iterate(NULL, s, eol, errout))) { hold->fee = atoi(s); } /* <bitrate> */ if ((s = ntrip_field_iterate(NULL, s, eol, errout))) { hold->bitrate = atoi(s); } /* ...<misc> */ while ((s = ntrip_field_iterate(NULL, s, eol, errout))); }
/*@ -mustfreefresh @*/ static void ntrip_str_parse(char *str, size_t len, /*@out@*/ struct ntrip_stream_t *hold) { char *s, *eol = str + len; memset(hold, 0, sizeof(*hold)); /* <mountpoint> */ if ((s = ntrip_field_iterate(str, NULL, eol))) strncpy(hold->mountpoint, s, sizeof(hold->mountpoint) - 1); /* <identifier> */ s = ntrip_field_iterate(NULL, s, eol); /* <format> */ if ((s = ntrip_field_iterate(NULL, s, eol))) { if (strcasecmp("RTCM 2", s) == 0) hold->format = fmt_rtcm2; else if (strcasecmp("RTCM 2.0", s) == 0) hold->format = fmt_rtcm2_0; else if (strcasecmp("RTCM 2.1", s) == 0) hold->format = fmt_rtcm2_1; else if (strcasecmp("RTCM 2.2", s) == 0) hold->format = fmt_rtcm2_2; else if (strcasecmp("RTCM 2.3", s) == 0) hold->format = fmt_rtcm2_3; else if (strcasecmp("RTCM 3.0", s) == 0) hold->format = fmt_rtcm3; else hold->format = fmt_unknown; } /* <format-details> */ s = ntrip_field_iterate(NULL, s, eol); /* <carrier> */ if ((s = ntrip_field_iterate(NULL, s, eol))) (void)sscanf(s, "%d", &hold->carrier); /* <nav-system> */ s = ntrip_field_iterate(NULL, s, eol); /* <network> */ s = ntrip_field_iterate(NULL, s, eol); /* <country> */ s = ntrip_field_iterate(NULL, s, eol); /* <latitude> */ hold->latitude = NAN; if ((s = ntrip_field_iterate(NULL, s, eol))) (void)sscanf(s, "%lf", &hold->latitude); /* <longitude> */ hold->longitude = NAN; if ((s = ntrip_field_iterate(NULL, s, eol))) (void)sscanf(s, "%lf", &hold->longitude); /* <nmea> */ if ((s = ntrip_field_iterate(NULL, s, eol))) { (void)sscanf(s, "%d", &hold->nmea); } /* <solution> */ s = ntrip_field_iterate(NULL, s, eol); /* <generator> */ s = ntrip_field_iterate(NULL, s, eol); /* <compr-encryp> */ if ((s = ntrip_field_iterate(NULL, s, eol))) { if (strcasecmp("none", s) == 0) hold->compr_encryp = cmp_enc_none; else hold->compr_encryp = cmp_enc_unknown; } /* <authentication> */ if ((s = ntrip_field_iterate(NULL, s, eol))) { if (strcasecmp("N", s) == 0) hold->authentication = auth_none; else if (strcasecmp("B", s) == 0) hold->authentication = auth_basic; else if (strcasecmp("D", s) == 0) hold->authentication = auth_digest; else hold->authentication = auth_unknown; } /* <fee> */ if ((s = ntrip_field_iterate(NULL, s, eol))) { (void)sscanf(s, "%d", &hold->fee); } /* <bitrate> */ if ((s = ntrip_field_iterate(NULL, s, eol))) { (void)sscanf(s, "%d", &hold->bitrate); } /* ...<misc> */ while ((s = ntrip_field_iterate(NULL, s, eol))); }