xref: /haiku/src/add-ons/kernel/network/ppp/shared/libppp/headers/PPPInterfaceListener.h (revision abdb7d1abbf1686ecb8f7132e576d332f6cc01ed)
1 /*
2  * Copyright 2003-2005, Haiku Inc.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _PPP_INTERFACE_LISTENER__H
7 #define _PPP_INTERFACE_LISTENER__H
8 
9 #include <PPPManager.h>
10 #include <Locker.h>
11 
12 class BHandler;
13 
14 
15 #define PPP_REPORT_MESSAGE	'P3RM'
16 	//!< The what field of PPPInterfaceListener report messages.
17 
18 
19 class PPPInterfaceListener {
20 	public:
21 		PPPInterfaceListener(BHandler *target);
22 		PPPInterfaceListener(const PPPInterfaceListener& copy);
23 		~PPPInterfaceListener();
24 
25 		status_t InitCheck() const;
26 
27 		//!	Returns the target BHandler for the report messages.
Target()28 		BHandler *Target() const
29 			{ return fTarget; }
30 		void SetTarget(BHandler *target);
31 
32 		//!	Returns whether the listener is watching an interface.
IsWatching()33 		bool IsWatching() const
34 			{ return fIsWatching; }
35 		//!	Returns which interface is being watched or \c PPP_UNDEFINED_INTERFACE_ID.
Interface()36 		ppp_interface_id Interface() const
37 			{ return fInterface; }
38 
39 		//!	Returns the internal PPPManager object used for accessing the PPP stack.
Manager()40 		const PPPManager& Manager() const
41 			{ return fManager; }
42 
43 		bool WatchInterface(ppp_interface_id ID);
44 		void WatchManager();
45 		void StopWatchingInterface();
46 		void StopWatchingManager();
47 
48 		//!	Just sets the target to the given listener's target.
49 		PPPInterfaceListener& operator= (const PPPInterfaceListener& copy)
50 			{ SetTarget(copy.Target()); return *this; }
51 
52 	private:
53 		void Construct();
54 
55 	private:
56 		BHandler *fTarget;
57 		thread_id fReportThread;
58 
59 		bool fIsWatching;
60 		ppp_interface_id fInterface;
61 
62 		PPPManager fManager;
63 };
64 
65 
66 #endif
67