From: Hans-Juergen B. <dl...@gm...> - 2003-09-01 20:05:03
|
Hello aprsd-Users ! With a small change in utils.cpp it is possible to build real callsign- pattern with wildcards in the config. Instead of only having "*" you can use $ for one single alpha character # for one single numeric character . for one single punctation character ? for one single alphanumeric character * for any number and kind of characters (like before) Example: Patterns like "D$#$*" only allow german callsigns (starting with D, followed by 1 alpha, 1 num, 1 alpha and anything else) but it does not match "DALLAS" or something like that which occurs without this change when configuring just "D*" Here the small change: utils.h, add: bool CompPattern(const string& s, const string& pattern, int n); utils.cpp, exchange function "find_rfcall" and add "CompPattern": //-------------------------------------------------------------------- /* Return true if string s is in the list cl. */ bool find_rfcall(const string& s, string **cl) { bool rc = false; int i = 0, pos, plen, slen; slen = (s.length()); // length of s while((cl[i] != NULL) && (rc == false)) // loop over all patterns { pos = (cl[i])->find('*'); plen = (cl[i])->length(); if (pos > 0) { if (slen >= pos) rc = CompPattern(s.substr(0, pos),(cl[i]->substr(0, pos)), pos); } else { if (slen == plen) rc = CompPattern(s.substr(0, slen),(cl[i]->substr(0, slen)), slen); } i++; } return rc; } //------------------------------------------------------------------ bool CompPattern( const string& s, const string& pattern, int n) { for( int i = 0 ; i < n ; i++) { if (pattern[i] == '#') { if (!isdigit(s[i])) return false; } else if (pattern[i] == '$') { if(!isalpha(s[i])) return false; } else if (pattern[i] == '?') { if(!isalnum(s[i])) return false; } else if (pattern[i] == '.') { if(!ispunct(s[i])) return false; } else if (pattern[i] == '*') return true; else if (pattern[i] != s[i]) return false; } return true; } //------------------------------------------------------------------ This effects normally "gate2rf" and "msgdest2rf". I also added 2 additional configurable ports to aprsd with separat filters based on this wildcard function. We configured it to bring on one port only european prefixes and the other only german calls. So it is easy to build up local subnets with lower traffic, which can even be used via good RF-links (tcp/ip via packetradio) here in Europe. This works fine at db0lj.dyndns.org/db0lj.ampr.org and db0zwi.ampr.org since aprsd-2.1.0. A full patch on different aprsd versions is available at http://db0lj.dyndns.org/pub/ham/linux/aprs/aprsd After very good experiences with aprsd-2.1.5 and STLport-Libs I am currently trying to get 2.2.5-14 stable, at the moment it fails at my server very often like 2.1.4 and 2.1.5 with GNU-libs before. As soon as I connect to full internet traffic the runtime is down to 1 hour or less. With STLport-Libs and 2.1.5 it jumped up to several months. Maybe I find some new libs somewhere. Any helpfull comment would be nice ! I am working with an updatet SuSE 6.4 distribution and gcc 3.1.1. best regards Hans, DL5DI AX-BBS: dl...@db... Amprnet/Internet: dl...@db... Internet: dl...@qs..., dl...@da... Homepage of the Packet-Radio-Group-Mittelrhein HamWeb: http://db0lj.ampr.org Internet: http://www.db0lj.de |