00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __PMATCHER_H
00022 #define __PMATCHER_H
00023
00024 #include <string>
00025
00026 #include <netdb.h>
00027
00028 #include "regexcpp.h"
00029 #include "triplet.h"
00030
00031 class PatternMatcher
00032 {
00033 public:
00034 PatternMatcher(const Triplet& triplet)
00035 : _regex(),_bHaveHostname(false),
00036 _triplet(triplet)
00037 {
00038 _tripletkey = "s=" + triplet.getSender().substr(1,triplet.getSender().size()-2)+"\n";
00039 _tripletkey += "r=" + triplet.getRecipient().substr(1, triplet.getRecipient().size()-2)+"\n";
00040 _tripletkey += "c=" + triplet.getClientAddress().substr(1, triplet.getClientAddress().size()-2)+"\n";
00041 }
00042 ~PatternMatcher() {}
00043 bool match(const std::string& pattern) throw (std::exception)
00044 {
00045
00046 if( !_bHaveHostname && (pattern.find("h=") != std::string::npos) ) {
00047 _bHaveHostname = true;
00048 _tripletkey += "h=" + _triplet.getResolved() + "\n";
00049 }
00050
00051
00052 _regex.setPattern(pattern);
00053 if(_regex.match(_tripletkey)) {
00054
00055 return true;
00056 }
00057
00058 return false;
00059 }
00060 void reset() { _bHaveHostname = false; }
00061 private:
00062 RegEx _regex;
00063 bool _bHaveHostname;
00064 const Triplet& _triplet;
00065 std::string _tripletkey;
00066 };
00067 #endif