xref: /haiku/headers/os/add-ons/network_settings/NetworkSettings.h (revision e711e6e42fd7ec3111ba9dc2324fa8efedd6674b)
1 /*
2  * Copyright 2006-2015, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Axel Dörfler, axeld@pinc-software.de
7  */
8 #ifndef SETTINGS_H
9 #define SETTINGS_H
10 
11 
12 #include <vector>
13 
14 #include <Message.h>
15 #include <Messenger.h>
16 #include <NetworkAddress.h>
17 #include <Path.h>
18 #include <StringList.h>
19 
20 
21 namespace BNetworkKit {
22 
23 
24 class BNetworkInterfaceSettings;
25 class BNetworkServiceSettings;
26 
27 
28 class BNetworkSettings {
29 public:
30 	static	const uint32		kMsgInterfaceSettingsUpdated = 'SUif';
31 	static	const uint32		kMsgNetworkSettingsUpdated = 'SUnw';
32 	static	const uint32		kMsgServiceSettingsUpdated = 'SUsv';
33 
34 public:
35 								BNetworkSettings();
36 								~BNetworkSettings();
37 
38 			status_t			GetNextInterface(uint32& cookie,
39 									BMessage& interface);
40 			status_t			GetInterface(const char* name,
41 									BMessage& interface) const;
42 			status_t			AddInterface(const BMessage& interface);
43 			status_t			RemoveInterface(const char* name);
44 			BNetworkInterfaceSettings
45 								Interface(const char* name);
46 			const BNetworkInterfaceSettings
47 								Interface(const char* name) const;
48 
49 			int32				CountNetworks() const;
50 			status_t			GetNextNetwork(uint32& cookie,
51 									BMessage& network) const;
52 			status_t			GetNetwork(const char* name,
53 									BMessage& network) const;
54 			status_t			AddNetwork(const BMessage& network);
55 			status_t			RemoveNetwork(const char* name);
56 
57 			const BMessage&		Services() const;
58 			status_t			GetNextService(uint32& cookie,
59 									BMessage& service);
60 			status_t			GetService(const char* name,
61 									BMessage& service) const;
62 			status_t			AddService(const BMessage& service);
63 			status_t			RemoveService(const char* name);
64 			BNetworkServiceSettings
65 								Service(const char* name);
66 			const BNetworkServiceSettings
67 								Service(const char* name) const;
68 
69 			status_t			StartMonitoring(const BMessenger& target);
70 			status_t			StopMonitoring(const BMessenger& target);
71 
72 			status_t			Update(BMessage* message);
73 
74 private:
75 			status_t			_Load(const char* name = NULL,
76 									uint32* _type = NULL);
77 			status_t			_Save(const char* name = NULL);
78 			BPath				_Path(BPath& parent, const char* name);
79 			status_t			_GetPath(const char* name, BPath& path);
80 
81 			status_t			_StartWatching(const char* name,
82 									const BMessenger& target);
83 
84 			bool				_IsWatching(const BMessenger& target) const
85 									{ return fListener == target; }
86 			bool				_IsWatching() const
87 									{ return fListener.IsValid(); }
88 
89 			status_t			_ConvertNetworkToSettings(BMessage& message);
90 			status_t			_ConvertNetworkFromSettings(BMessage& message);
91 
92 			status_t			_GetItem(const BMessage& container,
93 									const char* itemField,
94 									const char* nameField, const char* name,
95 									int32& _index, BMessage& item) const;
96 			status_t			_RemoveItem(BMessage& container,
97 									const char* itemField,
98 									const char* nameField, const char* name,
99 									const char* store = NULL);
100 
101 private:
102 			BMessenger			fListener;
103 			BMessage			fInterfaces;
104 			BMessage			fNetworks;
105 			BMessage			fServices;
106 };
107 
108 
109 class BNetworkInterfaceAddressSettings {
110 public:
111 								BNetworkInterfaceAddressSettings();
112 								BNetworkInterfaceAddressSettings(
113 									const BMessage& data);
114 								BNetworkInterfaceAddressSettings(
115 									const BNetworkInterfaceAddressSettings&
116 										other);
117 								~BNetworkInterfaceAddressSettings();
118 
119 			int					Family() const;
120 			void				SetFamily(int family);
121 			bool				IsAutoConfigure() const;
122 			void				SetAutoConfigure(bool configure);
123 
124 			const BNetworkAddress&
125 								Address() const;
126 			BNetworkAddress&	Address();
127 			const BNetworkAddress&
128 								Mask() const;
129 			BNetworkAddress&	Mask();
130 			const BNetworkAddress&
131 								Peer() const;
132 			BNetworkAddress&	Peer();
133 			const BNetworkAddress&
134 								Broadcast() const;
135 			BNetworkAddress&	Broadcast();
136 			const BNetworkAddress&
137 								Gateway() const;
138 			BNetworkAddress&	Gateway();
139 
140 			status_t			GetMessage(BMessage& data) const;
141 
142 			BNetworkInterfaceAddressSettings&
143 								operator=(
144 									const BNetworkInterfaceAddressSettings&
145 										other);
146 
147 private:
148 			int32				fFamily;
149 			bool				fAutoConfigure;
150 			BNetworkAddress		fAddress;
151 			BNetworkAddress		fMask;
152 			BNetworkAddress		fPeer;
153 			BNetworkAddress		fBroadcast;
154 			BNetworkAddress		fGateway;
155 };
156 
157 
158 class BNetworkInterfaceSettings {
159 public:
160 								BNetworkInterfaceSettings();
161 								BNetworkInterfaceSettings(
162 									const BMessage& message);
163 								~BNetworkInterfaceSettings();
164 
165 			const char*			Name() const;
166 			void				SetName(const char* name);
167 
168 			int32				Flags() const;
169 			void				SetFlags(int32 flags);
170 			int32				MTU() const;
171 			void				SetMTU(int32 mtu);
172 			int32				Metric() const;
173 			void				SetMetric(int32 metric);
174 
175 			int32				CountAddresses() const;
176 			const BNetworkInterfaceAddressSettings&
177 								AddressAt(int32 index) const;
178 			BNetworkInterfaceAddressSettings&
179 								AddressAt(int32 index);
180 			int32				FindFirstAddress(int family) const;
181 			void				AddAddress(const
182 									BNetworkInterfaceAddressSettings& address);
183 			void				RemoveAddress(int32 index);
184 
185 			bool				IsAutoConfigure(int family) const;
186 
187 			status_t			GetMessage(BMessage& data) const;
188 
189 private:
190 			BString				fName;
191 			int32				fFlags;
192 			int32				fMTU;
193 			int32				fMetric;
194 			std::vector<BNetworkInterfaceAddressSettings>
195 								fAddresses;
196 };
197 
198 
199 class BNetworkServiceAddressSettings {
200 public:
201 								BNetworkServiceAddressSettings();
202 								BNetworkServiceAddressSettings(
203 									const BMessage& data, int family = -1,
204 									int type = -1, int protocol = -1,
205 									int port = -1);
206 								~BNetworkServiceAddressSettings();
207 
208 			int					Family() const;
209 			void				SetFamily(int family);
210 			int					Protocol() const;
211 			void				SetProtocol(int protocol);
212 			int					Type() const;
213 			void				SetType(int type);
214 
215 			const BNetworkAddress&
216 								Address() const;
217 			BNetworkAddress&	Address();
218 
219 			status_t			GetMessage(BMessage& data) const;
220 
221 			bool				operator==(
222 									const BNetworkServiceAddressSettings& other)
223 										const;
224 
225 private:
226 			int32				fFamily;
227 			int					fProtocol;
228 			int					fType;
229 			BNetworkAddress		fAddress;
230 };
231 
232 
233 class BNetworkServiceSettings {
234 public:
235 								BNetworkServiceSettings();
236 								BNetworkServiceSettings(
237 									const BMessage& message);
238 								~BNetworkServiceSettings();
239 
240 			status_t			InitCheck() const;
241 
242 			const char*			Name() const;
243 			void				SetName(const char* name);
244 			bool				IsStandAlone() const;
245 			void				SetStandAlone(bool alone);
246 			bool				IsEnabled() const;
247 			void				SetEnabled(bool enable);
248 
249 			int					Family() const;
250 			void				SetFamily(int family);
251 			int					Protocol() const;
252 			void				SetProtocol(int protocol);
253 			int					Type() const;
254 			void				SetType(int type);
255 			int					Port() const;
256 			void				SetPort(int port);
257 
258 			int32				CountArguments() const;
259 			const char*			ArgumentAt(int32 index) const;
260 			void				AddArgument(const char* argument);
261 			void				RemoveArgument(int32 index);
262 
263 			int32				CountAddresses() const;
264 			const BNetworkServiceAddressSettings&
265 								AddressAt(int32 index) const;
266 			void				AddAddress(const
267 									BNetworkServiceAddressSettings& address);
268 			void				RemoveAddress(int32 index);
269 
270 			bool				IsRunning() const;
271 
272 			status_t			GetMessage(BMessage& data) const;
273 
274 private:
275 			BString				fName;
276 			int32				fFamily;
277 			int32				fType;
278 			int32				fProtocol;
279 			int32				fPort;
280 			bool				fEnabled;
281 			bool				fStandAlone;
282 			BStringList			fArguments;
283 			std::vector<BNetworkServiceAddressSettings>
284 								fAddresses;
285 };
286 
287 
288 }	// namespace BNetworkKit
289 
290 
291 #endif	// SETTINGS_H
292