Skip to content

Commit 2a7bc24

Browse files
committed
Make Budlist and type filter look into 3rd party
1 parent 5596961 commit 2a7bc24

File tree

1 file changed

+24
-29
lines changed

1 file changed

+24
-29
lines changed

Diff for: src/pfilter.c

+24-29
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ static void next_token (pfstate_t *pf);
153153
static void print_error (pfstate_t *pf, char *msg);
154154

155155
static int filt_bodgu (pfstate_t *pf, char *pattern);
156-
static int filt_t (pfstate_t *pf);
156+
static int filt_t (pfstate_t *pf, char * typeChar);
157157
static int filt_r (pfstate_t *pf, char *sdist);
158158
static int filt_s (pfstate_t *pf);
159159
static int filt_i (pfstate_t *pf);
@@ -200,7 +200,6 @@ int pfilter (int from_chan, int to_chan, char *filter, packet_t pp, int is_aprs)
200200
pfstate_t pfstate;
201201
char *p;
202202
int result;
203-
char * infop = NULL;
204203

205204

206205
assert (from_chan >= 0 && from_chan <= MAX_CHANS);
@@ -233,21 +232,6 @@ int pfilter (int from_chan, int to_chan, char *filter, packet_t pp, int is_aprs)
233232
}
234233
}
235234

236-
(void) ax25_get_info (pp, (unsigned char **)(&infop));
237-
assert (infop != NULL);
238-
if (*infop == '}') {
239-
// We have a 3d party packet, dig inside it to get the actual type.
240-
packet_t pp_payload = ax25_from_text ((char*)infop+1, 0);
241-
if (pp_payload == NULL) {
242-
print_error (&pfstate, "Invalid third party payload\n");
243-
return (0);
244-
}
245-
246-
result = pfilter(from_chan, to_chan, filter, pp_payload, is_aprs);
247-
ax25_delete(pp_payload);
248-
return result;
249-
}
250-
251235
pfstate.pp = pp;
252236
pfstate.is_aprs = is_aprs;
253237

@@ -564,13 +548,11 @@ static int parse_filter_spec (pfstate_t *pf)
564548

565549
else if (pf->token_str[0] == 'b' && ispunct(pf->token_str[1])) {
566550
/* Budlist - source address */
567-
char addr[AX25_MAX_ADDR_LEN];
568-
ax25_get_addr_with_ssid (pf->pp, AX25_SOURCE, addr);
569-
result = filt_bodgu (pf, addr);
551+
result = filt_bodgu (pf, pf->decoded.g_src);
570552

571553
if (s_debug >= 2) {
572554
text_color_set(DW_COLOR_DEBUG);
573-
dw_printf (" %s returns %s for %s\n", pf->token_str, bool2text(result), addr);
555+
dw_printf (" %s returns %s for %s\n", pf->token_str, bool2text(result), pf->decoded.g_src);
574556
}
575557
}
576558

@@ -688,15 +670,12 @@ static int parse_filter_spec (pfstate_t *pf)
688670
/* t - type: position, weather, etc. */
689671

690672
else if (pf->token_str[0] == 't' && ispunct(pf->token_str[1])) {
691-
692-
result = filt_t (pf);
673+
char typeChar = 0;
674+
result = filt_t (pf, &typeChar);
693675

694676
if (s_debug >= 2) {
695-
char *infop = NULL;
696-
(void) ax25_get_info (pf->pp, (unsigned char **)(&infop));
697-
698677
text_color_set(DW_COLOR_DEBUG);
699-
dw_printf (" %s returns %s for %c data type indicator\n", pf->token_str, bool2text(result), *infop);
678+
dw_printf (" %s returns %s for %c data type indicator\n", pf->token_str, bool2text(result), typeChar);
700679
}
701680
}
702681

@@ -874,18 +853,33 @@ int is_telem_metadata (char *infop)
874853
}
875854

876855

877-
static int filt_t (pfstate_t *pf)
856+
static int filt_t (pfstate_t *pf, char * typeChar)
878857
{
879858
char src[AX25_MAX_ADDR_LEN];
880859
char *infop = NULL;
881860
char *f;
861+
int isThirdParty = 0;
882862

883863
memset (src, 0, sizeof(src));
884864
ax25_get_addr_with_ssid (pf->pp, AX25_SOURCE, src);
885865
(void) ax25_get_info (pf->pp, (unsigned char **)(&infop));
886866

867+
if (*infop == '}') {
868+
// We have a 3d party packet, dig inside it to get the actual type.
869+
packet_t pp_payload = ax25_from_text ((char*)infop+1, 0);
870+
if (pp_payload == NULL) {
871+
print_error (pf, "Invalid third party payload\n");
872+
return (0);
873+
}
874+
(void) ax25_get_info (pf->pp, (unsigned char **)(&infop));
875+
ax25_delete(pp_payload);
876+
isThirdParty = 1;
877+
}
878+
887879
assert (infop != NULL);
888880

881+
*typeChar = *infop;
882+
889883
for (f = pf->token_str + 2; *f != '\0'; f++) {
890884
switch (*f) {
891885

@@ -937,7 +931,8 @@ static int filt_t (pfstate_t *pf)
937931
break;
938932

939933
case 'h': /* third party Header - my extension */
940-
if (*infop == '}') return (1);
934+
*typeChar = '}';
935+
return (isThirdParty);
941936
break;
942937

943938
case 'w': /* Weather */

0 commit comments

Comments
 (0)