Branch data Line data Source code
1 : : // $Id: EventHandler.h 5911 2008-07-03 22:59:01Z vern $
2 : : //
3 : : // Capsulates local and remote event handlers.
4 : :
5 : : #ifndef EVENTHANDLER
6 : : #define EVENTHANDLER
7 : :
8 : : #include <assert.h>
9 : :
10 : : #include "List.h"
11 : : #include "BroList.h"
12 : : #include "net_util.h"
13 : :
14 : : class Func;
15 : : class FuncType;
16 : : class Serializer;
17 : : class SerialInfo;
18 : : class UnserialInfo;
19 : :
20 : : class EventHandler {
21 : : public:
22 : : EventHandler(const char* name);
23 : : ~EventHandler();
24 : :
25 : 1136 : const char* Name() { return name; }
26 : 680 : Func* LocalHandler() { return local; }
27 : : FuncType* FType();
28 : :
29 : : void SetLocalHandler(Func* f);
30 : :
31 : : void AddRemoteHandler(SourceID peer);
32 : : void RemoveRemoteHandler(SourceID peer);
33 : :
34 : : void Call(val_list* vl, bool no_remote = false);
35 : :
36 : : // Returns true if there is at least one local or remote handler.
37 : 202825 : operator bool() const
38 [ + - ][ + + ]: 202825 : { return enabled && (local || receivers.length()); }
[ - + ]
39 : :
40 : 1118 : void SetUsed() { used = true; }
41 : 140 : bool Used() { return used; }
42 : :
43 : 0 : const char* Group() { return group; }
44 : 216 : void SetGroup(const char* arg_group)
45 : 216 : { group = copy_string(arg_group); }
46 : :
47 : 0 : void SetEnable(bool arg_enable) { enabled = arg_enable; }
48 : :
49 : : // We don't serialize the handler(s) itself here, but
50 : : // just the reference to it.
51 : : bool Serialize(SerialInfo* info) const;
52 : : static EventHandler* Unserialize(UnserialInfo* info);
53 : :
54 : : private:
55 : : const char* name;
56 : : const char* group;
57 : : Func* local;
58 : : FuncType* type;
59 : : bool used; // this handler is indeed used somewhere
60 : : bool enabled;
61 : :
62 : 1066 : declare(List, SourceID);
63 : : typedef List(SourceID) receiver_list;
64 : : receiver_list receivers;
65 : : };
66 : :
67 : : // Encapsulates a ptr to an event handler to overload the boolean operator.
68 : : class EventHandlerPtr {
69 : : public:
70 : 28124 : EventHandlerPtr(EventHandler* p = 0) { handler = p; }
71 : 90694 : EventHandlerPtr(const EventHandlerPtr& h) { handler = h.handler; }
72 : :
73 : 128 : const EventHandlerPtr& operator=(EventHandler* p)
74 : 128 : { handler = p; return *this; }
75 : 25950 : const EventHandlerPtr& operator=(const EventHandlerPtr& h)
76 : 25950 : { handler = h.handler; return *this; }
77 : :
78 : 1066 : EventHandler* Ptr() { return handler; }
79 : :
80 [ + - ][ + + ]: 202825 : operator bool() const { return handler && *handler; }
81 : 24310 : EventHandler* operator->() { return handler; }
82 : 0 : const EventHandler* operator->() const { return handler; }
83 : :
84 : : private:
85 : : EventHandler* handler;
86 : : };
87 : :
88 : : #endif
|