gloox 1.0
|
00001 /* 00002 Copyright (c) 2006-2009 by Jakob Schroeter <js@camaya.net> 00003 This file is part of the gloox library. http://camaya.net/gloox 00004 00005 This software is distributed under a license. The full license 00006 agreement can be found in the file LICENSE in this distribution. 00007 This software may not be copied, modified, sold or distributed 00008 other than expressed in the named license agreement. 00009 00010 This software is distributed without any warranty. 00011 */ 00012 00013 00014 #ifndef AMP_H__ 00015 #define AMP_H__ 00016 00017 #include "stanzaextension.h" 00018 #include "jid.h" 00019 00020 #include <string> 00021 #include <list> 00022 00023 #include <ctime> 00024 00025 namespace gloox 00026 { 00027 00028 class Tag; 00029 00039 class GLOOX_API AMP : public StanzaExtension 00040 { 00041 00042 public: 00046 enum ConditionType 00047 { 00048 ConditionDeliver, 00049 ConditionExpireAt, 00050 ConditionMatchResource, 00051 ConditionInvalid 00052 }; 00053 00057 enum ActionType 00058 { 00059 00060 ActionAlert, 00061 ActionError, 00062 ActionDrop, 00063 ActionNotify, 00064 ActionInvalid 00065 }; 00066 00070 enum DeliverType 00071 { 00072 DeliverDirect, 00074 DeliverForward, 00076 DeliverGateway, 00078 DeliverNone, 00081 DeliverStored, 00083 DeliverInvalid 00084 }; 00085 00089 enum MatchResourceType 00090 { 00091 MatchResourceAny, 00093 MatchResourceExact, 00095 MatchResourceOther, 00097 MatchResourceInvalid 00098 }; 00099 00103 enum Status 00104 { 00105 StatusAlert, 00106 StatusNotify, 00107 StatusInvalid 00108 }; 00109 00116 class GLOOX_API Rule 00117 { 00118 public: 00124 Rule( DeliverType deliver, ActionType action ); 00125 00131 Rule( const std::string& date, ActionType action ); 00132 00138 Rule( MatchResourceType match, ActionType action ); 00139 00146 Rule( const std::string& condition, const std::string& action, 00147 const std::string& value ); 00148 00152 ~Rule(); 00153 00158 Tag* tag() const; 00159 00160 private: 00161 ConditionType m_condition; 00162 union 00163 { 00164 DeliverType m_deliver; 00165 MatchResourceType m_matchresource; 00166 std::string* m_expireat; 00167 }; 00168 ActionType m_action; 00169 00170 }; 00171 00175 typedef std::list<const Rule*> RuleList; 00176 00182 AMP( bool perhop = false ); 00183 00188 AMP( const Tag* tag ); 00189 00194 void addRule( const Rule* rule ); 00195 00200 const RuleList& rules() const { return m_rules; } 00201 00205 virtual ~AMP(); 00206 00207 // reimplemented from StanzaExtension 00208 virtual const std::string& filterString() const; 00209 00210 // reimplemented from StanzaExtension 00211 virtual StanzaExtension* newInstance( const Tag* tag ) const 00212 { 00213 return new AMP( tag ); 00214 } 00215 00216 // reimplemented from StanzaExtension 00217 virtual Tag* tag() const; 00218 00219 // reimplemented from StanzaExtension 00220 virtual StanzaExtension* clone() const 00221 { 00222 AMP* a = new AMP(); 00223 a->m_perhop = m_perhop; 00224 RuleList::const_iterator it = m_rules.begin(); 00225 for( ; it != m_rules.end(); ++it ) 00226 a->m_rules.push_back( new Rule( *(*it) ) ); 00227 a->m_status = m_status; 00228 a->m_from = m_from; 00229 a->m_to = m_to; 00230 return a; 00231 } 00232 00233 private: 00234 bool m_perhop; 00235 RuleList m_rules; 00236 Status m_status; 00237 JID m_from; 00238 JID m_to; 00239 }; 00240 00241 } 00242 00243 #endif // AMP_H__