+ /*
+ * For now, map all indexes to probe -1 (can be overridden later).
+ * This -1 is interpreted as an unspecified probe later.
+ */
+ for (i = 0; i < di->dec_num_probes; i++)
+ new_probemap[i] = -1;
+
+ for (l = g_hash_table_get_keys(new_probes); l; l = l->next) {
+ probe_id = l->data;
+ probenum_str = g_hash_table_lookup(new_probes, probe_id);
+ if (!probenum_str) {
+ /* Probe name was specified without a value. */
+ srd_err("No probe number was specified for %s.",
+ probe_id);
+ g_free(new_probemap);
+ return SRD_ERR_ARG;
+ }
+ new_probenum = strtol(probenum_str, NULL, 10);
+ if (!(sl = g_slist_find_custom(di->decoder->probes, probe_id,
+ (GCompareFunc)compare_probe_id))) {
+ /* Fall back on optional probes. */
+ if (!(sl = g_slist_find_custom(di->decoder->opt_probes,
+ probe_id, (GCompareFunc) compare_probe_id))) {
+ srd_err("Protocol decoder %s has no probe "
+ "'%s'.", di->decoder->name, probe_id);
+ g_free(new_probemap);
+ return SRD_ERR_ARG;
+ }
+ }
+ p = sl->data;
+ new_probemap[p->order] = new_probenum;
+ srd_dbg("Setting probe mapping: %s (index %d) = probe %d.",
+ p->id, p->order, new_probenum);
+ }