@@ -153,7 +153,7 @@ static void next_token (pfstate_t *pf);
153
153
static void print_error (pfstate_t * pf , char * msg );
154
154
155
155
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 );
157
157
static int filt_r (pfstate_t * pf , char * sdist );
158
158
static int filt_s (pfstate_t * pf );
159
159
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)
200
200
pfstate_t pfstate ;
201
201
char * p ;
202
202
int result ;
203
- char * infop = NULL ;
204
203
205
204
206
205
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)
233
232
}
234
233
}
235
234
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
-
251
235
pfstate .pp = pp ;
252
236
pfstate .is_aprs = is_aprs ;
253
237
@@ -564,13 +548,11 @@ static int parse_filter_spec (pfstate_t *pf)
564
548
565
549
else if (pf -> token_str [0 ] == 'b' && ispunct (pf -> token_str [1 ])) {
566
550
/* 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 );
570
552
571
553
if (s_debug >= 2 ) {
572
554
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 );
574
556
}
575
557
}
576
558
@@ -688,15 +670,12 @@ static int parse_filter_spec (pfstate_t *pf)
688
670
/* t - type: position, weather, etc. */
689
671
690
672
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 );
693
675
694
676
if (s_debug >= 2 ) {
695
- char * infop = NULL ;
696
- (void ) ax25_get_info (pf -> pp , (unsigned char * * )(& infop ));
697
-
698
677
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 );
700
679
}
701
680
}
702
681
@@ -874,18 +853,33 @@ int is_telem_metadata (char *infop)
874
853
}
875
854
876
855
877
- static int filt_t (pfstate_t * pf )
856
+ static int filt_t (pfstate_t * pf , char * typeChar )
878
857
{
879
858
char src [AX25_MAX_ADDR_LEN ];
880
859
char * infop = NULL ;
881
860
char * f ;
861
+ int isThirdParty = 0 ;
882
862
883
863
memset (src , 0 , sizeof (src ));
884
864
ax25_get_addr_with_ssid (pf -> pp , AX25_SOURCE , src );
885
865
(void ) ax25_get_info (pf -> pp , (unsigned char * * )(& infop ));
886
866
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
+
887
879
assert (infop != NULL );
888
880
881
+ * typeChar = * infop ;
882
+
889
883
for (f = pf -> token_str + 2 ; * f != '\0' ; f ++ ) {
890
884
switch (* f ) {
891
885
@@ -937,7 +931,8 @@ static int filt_t (pfstate_t *pf)
937
931
break ;
938
932
939
933
case 'h' : /* third party Header - my extension */
940
- if (* infop == '}' ) return (1 );
934
+ * typeChar = '}' ;
935
+ return (isThirdParty );
941
936
break ;
942
937
943
938
case 'w' : /* Weather */
0 commit comments