diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-11-10 18:23:24 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-11-10 18:23:24 +0000 |
commit | bfc97ea14213c1ee9cb34386dfc33c0c1f665aca (patch) | |
tree | 796773deb96bd44171a9b01310259174c6cde4e8 /src/modules/m_filter.h | |
parent | 745994473896e59faa59e4caf3fb621ef974419a (diff) |
Implement on-burst synching of filters
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5669 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_filter.h')
-rw-r--r-- | src/modules/m_filter.h | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/src/modules/m_filter.h b/src/modules/m_filter.h index 437928a29..d93e94cb8 100644 --- a/src/modules/m_filter.h +++ b/src/modules/m_filter.h @@ -19,11 +19,12 @@ class FilterResult : public classbase { public: + std::string freeform; std::string reason; std::string action; long gline_time; - FilterResult(const std::string &rea, const std::string &act, long gt) : reason(rea), action(act), gline_time(gt) + FilterResult(const std::string free, const std::string &rea, const std::string &act, long gt) : freeform(free), reason(rea), action(act), gline_time(gt) { } @@ -46,12 +47,20 @@ class FilterBase : public Module virtual ~FilterBase(); virtual void Implements(char* List); virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text, char status); + virtual FilterResult* FilterMatch(const std::string &text) = 0; virtual bool DeleteFilter(const std::string &freeform) = 0; + virtual void SyncFilters(Module* proto, void* opaque) = 0; + + virtual void SendFilter(Module* proto, void* opaque, FilterResult* iter); virtual std::pair<bool, std::string> AddFilter(const std::string &freeform, const std::string &type, const std::string &reason, long duration) = 0; virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text, char status); virtual void OnRehash(const std::string ¶meter); virtual Version GetVersion(); + std::string EncodeFilter(FilterResult* filter); + FilterResult DecodeFilter(const std::string &data); + virtual void OnSyncOtherMetaData(Module* proto, void* opaque); + virtual void OnDecodeMetaData(int target_type, void* target, const std::string &extname, const std::string &extdata); }; class cmd_filter : public command_t @@ -210,3 +219,41 @@ Version FilterBase::GetVersion() return Version(1,1,0,2,VF_VENDOR,API_VERSION); } + +std::string FilterBase::EncodeFilter(FilterResult* filter) +{ + std::ostringstream stream; + stream << filter->freeform << " " << filter->action << " " << filter->gline_time << " " << filter->reason; + return stream.str(); +} + +FilterResult FilterBase::DecodeFilter(const std::string &data) +{ + FilterResult res; + std::istringstream stream(data); + stream >> res.freeform; + stream >> res.action; + stream >> res.gline_time; + res.reason = stream.str(); + return res; +} + +void FilterBase::OnSyncOtherMetaData(Module* proto, void* opaque) +{ + this->SyncFilters(proto, opaque); +} + +void FilterBase::SendFilter(Module* proto, void* opaque, FilterResult* iter) +{ + proto->ProtoSendMetaData(opaque, TYPE_OTHER, NULL, "filter", EncodeFilter(iter)); +} + +void FilterBase::OnDecodeMetaData(int target_type, void* target, const std::string &extname, const std::string &extdata) +{ + if ((target_type == TYPE_OTHER) && (extname == "filter")) + { + FilterResult data = DecodeFilter(extdata); + this->AddFilter(data.freeform, data.action, data.reason, data.gline_time); + } +} + |