1/*
2 * Copyright 2015-2017 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 *		Ingo Weinhold <ingo_weinhold@gmx.de>
8 *		Alexander von Gluck IV <kallisti5@unixzen.com>
9 */
10
11
12#include <pwd.h>
13
14#include <Button.h>
15#include <Catalog.h>
16#include <LayoutBuilder.h>
17#include <NetworkSettings.h>
18#include <NetworkSettingsAddOn.h>
19#include <StringView.h>
20#include <TextView.h>
21
22#include <NetServer.h>
23#include <RegistrarDefs.h>
24#include <user_group.h>
25#include <util/KMessage.h>
26
27#include "InterfaceListItem.h"
28#include "InterfaceView.h"
29
30
31using namespace BNetworkKit;
32
33
34#undef B_TRANSLATION_CONTEXT
35#define B_TRANSLATION_CONTEXT "VPNInterfaceAddOn"
36
37
38static const uint32 kMsgToggleService = 'tgls';
39
40
41class VPNInterfaceAddOn : public BNetworkSettingsAddOn {
42public:
43								VPNInterfaceAddOn(image_id image,
44									BNetworkSettings& settings);
45	virtual						~VPNInterfaceAddOn();
46
47	virtual	BNetworkSettingsItem*
48								CreateNextItem(uint32& cookie);
49};
50
51
52class VPNInterfaceView : public InterfaceView {
53public:
54								VPNInterfaceView(BNetworkSettings& settings);
55	virtual						~VPNInterfaceView();
56};
57
58
59class VPNInterfaceItem : public BNetworkSettingsItem {
60public:
61								VPNInterfaceItem(BNetworkSettings& settings);
62	virtual						~VPNInterfaceItem();
63
64	virtual	BNetworkSettingsType
65								Type() const;
66
67	virtual BListItem*			ListItem();
68	virtual BView*				View();
69
70	virtual status_t			Revert();
71	virtual bool				IsRevertable();
72
73private:
74			BNetworkSettings&	fSettings;
75			BListItem*			fItem;
76			InterfaceView*		fView;
77};
78
79
80// #pragma mark -
81
82
83VPNInterfaceView::VPNInterfaceView(BNetworkSettings& settings)
84	:
85	InterfaceView()
86{
87}
88
89
90VPNInterfaceView::~VPNInterfaceView()
91{
92}
93
94
95// #pragma mark -
96
97
98VPNInterfaceItem::VPNInterfaceItem(BNetworkSettings& settings)
99	:
100	fSettings(settings),
101	fItem(new InterfaceListItem("My Awesome VPN",
102		B_NETWORK_INTERFACE_TYPE_VPN)),
103	fView(NULL)
104{
105}
106
107
108VPNInterfaceItem::~VPNInterfaceItem()
109{
110	if (fView->Parent() == NULL)
111		delete fView;
112
113	delete fItem;
114}
115
116
117BNetworkSettingsType
118VPNInterfaceItem::Type() const
119{
120	return B_NETWORK_SETTINGS_TYPE_VPN;
121}
122
123
124BListItem*
125VPNInterfaceItem::ListItem()
126{
127	return fItem;
128}
129
130
131BView*
132VPNInterfaceItem::View()
133{
134	if (fView == NULL)
135		fView = new VPNInterfaceView(fSettings);
136
137	return fView;
138}
139
140
141status_t
142VPNInterfaceItem::Revert()
143{
144	return B_OK;
145}
146
147bool
148VPNInterfaceItem::IsRevertable()
149{
150	// TODO
151	return false;
152}
153
154
155// #pragma mark -
156
157
158VPNInterfaceAddOn::VPNInterfaceAddOn(image_id image,
159	BNetworkSettings& settings)
160	:
161	BNetworkSettingsAddOn(image, settings)
162{
163}
164
165
166VPNInterfaceAddOn::~VPNInterfaceAddOn()
167{
168}
169
170
171BNetworkSettingsItem*
172VPNInterfaceAddOn::CreateNextItem(uint32& cookie)
173{
174	if (cookie++ == 0)
175		return new VPNInterfaceItem(Settings());
176
177	return NULL;
178}
179
180
181// #pragma mark -
182
183
184extern "C"
185BNetworkSettingsAddOn*
186instantiate_network_settings_add_on(image_id image, BNetworkSettings& settings)
187{
188	return new VPNInterfaceAddOn(image, settings);
189}
190