Shadowrun: Awakened 29 September 2011 - Build 871
MessageFilter.h
Go to the documentation of this file.
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.

GNU Lesser General Public License 3 Sourceforge.net