![]() |
Shadowrun: Awakened 29 September 2011 - Build 871
|
00001 00002 00003 00004 00005 00006 00007 00008 #include "NativeFeatureIncludes.h" 00009 #if _RAKNET_SUPPORT_MessageFilter==1 00010 00011 #ifndef __MESSAGE_FILTER_PLUGIN_H 00012 #define __MESSAGE_FILTER_PLUGIN_H 00013 00014 #include "RakNetTypes.h" 00015 #include "PluginInterface2.h" 00016 #include "DS_OrderedList.h" 00017 #include "DS_Hash.h" 00018 #include "Export.h" 00019 00021 #define MESSAGE_FILTER_MAX_MESSAGE_ID 256 00022 00023 namespace RakNet 00024 { 00026 class RakPeerInterface; 00027 00029 int RAK_DLL_EXPORT MessageFilterStrComp( char *const &key,char *const &data ); 00030 00032 struct FilterSet 00033 { 00034 bool banOnFilterTimeExceed; 00035 bool kickOnDisallowedMessage; 00036 bool banOnDisallowedMessage; 00037 RakNet::TimeMS disallowedMessageBanTimeMS; 00038 RakNet::TimeMS timeExceedBanTimeMS; 00039 RakNet::TimeMS maxMemberTimeMS; 00040 void (*invalidMessageCallback)(RakPeerInterface *peer, AddressOrGUID systemAddress, int filterSetID, void *userData, unsigned char messageID); 00041 void *disallowedCallbackUserData; 00042 void (*timeoutCallback)(RakPeerInterface *peer, AddressOrGUID systemAddress, int filterSetID, void *userData); 00043 void *timeoutUserData; 00044 int filterSetID; 00045 bool allowedIDs[MESSAGE_FILTER_MAX_MESSAGE_ID]; 00046 DataStructures::OrderedList<RakNet::RakString,RakNet::RakString> allowedRPC4; 00047 }; 00048 00050 int RAK_DLL_EXPORT FilterSetComp( const int &key, FilterSet * const &data ); 00051 00053 struct FilteredSystem 00054 { 00055 FilterSet *filter; 00056 RakNet::TimeMS timeEnteredThisSet; 00057 }; 00058 00063 00073 class RAK_DLL_EXPORT MessageFilter : public PluginInterface2 00074 { 00075 public: 00076 00077 // GetInstance() and DestroyInstance(instance*) 00078 STATIC_FACTORY_DECLARATIONS(MessageFilter) 00079 00080 MessageFilter(); 00081 virtual ~MessageFilter(); 00082 00083 // -------------------------------------------------------------------------------------------- 00084 // User functions 00085 // -------------------------------------------------------------------------------------------- 00086 00090 void SetAutoAddNewConnectionsToFilter(int filterSetID); 00091 00099 void SetAllowMessageID(bool allow, int messageIDStart, int messageIDEnd,int filterSetID); 00100 00105 void SetAllowRPC4(bool allow, const char* uniqueID, int filterSetID); 00106 00114 void SetActionOnDisallowedMessage(bool kickOnDisallowed, bool banOnDisallowed, RakNet::TimeMS banTimeMS, int filterSetID); 00115 00120 void SetDisallowedMessageCallback(int filterSetID, void *userData, void (*invalidMessageCallback)(RakPeerInterface *peer, AddressOrGUID addressOrGUID, int filterSetID, void *userData, unsigned char messageID)); 00121 00126 void SetTimeoutCallback(int filterSetID, void *userData, void (*invalidMessageCallback)(RakPeerInterface *peer, AddressOrGUID addressOrGUID, int filterSetID, void *userData)); 00127 00134 void SetFilterMaxTime(int allowedTimeMS, bool banOnExceed, RakNet::TimeMS banTimeMS, int filterSetID); 00135 00138 int GetSystemFilterSet(AddressOrGUID addressOrGUID); 00139 00145 void SetSystemFilterSet(AddressOrGUID addressOrGUID, int filterSetID); 00146 00150 unsigned GetSystemCount(int filterSetID) const; 00151 00154 unsigned GetFilterSetCount(void) const; 00155 00158 int GetFilterSetIDByIndex(unsigned index); 00159 00162 void DeleteFilterSet(int filterSetID); 00163 00164 // -------------------------------------------------------------------------------------------- 00165 // Packet handling functions 00166 // -------------------------------------------------------------------------------------------- 00167 virtual void Update(void); 00168 virtual PluginReceiveResult OnReceive(Packet *packet); 00169 virtual void OnNewConnection(const SystemAddress &systemAddress, RakNetGUID rakNetGUID, bool isIncoming); 00170 virtual void OnClosedConnection(const SystemAddress &systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason ); 00171 00172 protected: 00173 00174 void Clear(void); 00175 void DeallocateFilterSet(FilterSet *filterSet); 00176 FilterSet* GetFilterSetByID(int filterSetID); 00177 void OnInvalidMessage(FilterSet *filterSet, AddressOrGUID systemAddress, unsigned char messageID); 00178 00179 DataStructures::OrderedList<int, FilterSet*, FilterSetComp> filterList; 00180 // Change to guid 00181 DataStructures::Hash<AddressOrGUID, FilteredSystem, 2048, AddressOrGUID::ToInteger> systemList; 00182 00183 int autoAddNewConnectionsToFilter; 00184 RakNet::Time whenLastTimeoutCheck; 00185 }; 00186 00187 } // namespace RakNet 00188 00189 #endif 00190 00191 #endif // _RAKNET_SUPPORT_*
Copyright © 2007-2010 by The Shadowrun: Awakened Team. This work is licensed under the GNU Lesser General Public License 3.