@@ -200,6 +200,8 @@ 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
assert (from_chan >= 0 && from_chan <= MAX_CHANS );
205
207
assert (to_chan >= 0 && to_chan <= MAX_CHANS );
@@ -231,6 +233,19 @@ int pfilter (int from_chan, int to_chan, char *filter, packet_t pp, int is_aprs)
231
233
}
232
234
}
233
235
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
+ return pfilter (from_chan , to_chan , filter , pp_payload , is_aprs );
247
+ }
248
+
234
249
pfstate .pp = pp ;
235
250
pfstate .is_aprs = is_aprs ;
236
251
@@ -869,19 +884,6 @@ static int filt_t (pfstate_t *pf)
869
884
870
885
assert (infop != NULL );
871
886
872
- if (* infop == '}' ) {
873
- // We have a 3d party packet, dig inside it to get the actual type.
874
- packet_t pp_payload = ax25_from_text ((char * )infop + 1 , 0 );
875
- if (pp_payload == NULL ) {
876
- print_error (pf , "Invalid third party payload\n" );
877
- return (0 );
878
- }
879
- memset (src , 0 , sizeof (src ));
880
- ax25_get_addr_with_ssid (pp_payload , AX25_SOURCE , src );
881
- (void ) ax25_get_info (pp_payload , (unsigned char * * )(& infop ));
882
- ax25_delete (pp_payload );
883
- }
884
-
885
887
for (f = pf -> token_str + 2 ; * f != '\0' ; f ++ ) {
886
888
switch (* f ) {
887
889
0 commit comments