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
31 using namespace BNetworkKit;
32
33
34 #undef B_TRANSLATION_CONTEXT
35 #define B_TRANSLATION_CONTEXT "VPNInterfaceAddOn"
36
37
38 static const uint32 kMsgToggleService = 'tgls';
39
40
41 class VPNInterfaceAddOn : public BNetworkSettingsAddOn {
42 public:
43 VPNInterfaceAddOn(image_id image,
44 BNetworkSettings& settings);
45 virtual ~VPNInterfaceAddOn();
46
47 virtual BNetworkSettingsItem*
48 CreateNextItem(uint32& cookie);
49 };
50
51
52 class VPNInterfaceView : public InterfaceView {
53 public:
54 VPNInterfaceView(BNetworkSettings& settings);
55 virtual ~VPNInterfaceView();
56 };
57
58
59 class VPNInterfaceItem : public BNetworkSettingsItem {
60 public:
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
73 private:
74 BNetworkSettings& fSettings;
75 BListItem* fItem;
76 InterfaceView* fView;
77 };
78
79
80 // #pragma mark -
81
82
VPNInterfaceView(BNetworkSettings & settings)83 VPNInterfaceView::VPNInterfaceView(BNetworkSettings& settings)
84 :
85 InterfaceView()
86 {
87 }
88
89
~VPNInterfaceView()90 VPNInterfaceView::~VPNInterfaceView()
91 {
92 }
93
94
95 // #pragma mark -
96
97
VPNInterfaceItem(BNetworkSettings & settings)98 VPNInterfaceItem::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
~VPNInterfaceItem()108 VPNInterfaceItem::~VPNInterfaceItem()
109 {
110 if (fView->Parent() == NULL)
111 delete fView;
112
113 delete fItem;
114 }
115
116
117 BNetworkSettingsType
Type() const118 VPNInterfaceItem::Type() const
119 {
120 return B_NETWORK_SETTINGS_TYPE_VPN;
121 }
122
123
124 BListItem*
ListItem()125 VPNInterfaceItem::ListItem()
126 {
127 return fItem;
128 }
129
130
131 BView*
View()132 VPNInterfaceItem::View()
133 {
134 if (fView == NULL)
135 fView = new VPNInterfaceView(fSettings);
136
137 return fView;
138 }
139
140
141 status_t
Revert()142 VPNInterfaceItem::Revert()
143 {
144 return B_OK;
145 }
146
147 bool
IsRevertable()148 VPNInterfaceItem::IsRevertable()
149 {
150 // TODO
151 return false;
152 }
153
154
155 // #pragma mark -
156
157
VPNInterfaceAddOn(image_id image,BNetworkSettings & settings)158 VPNInterfaceAddOn::VPNInterfaceAddOn(image_id image,
159 BNetworkSettings& settings)
160 :
161 BNetworkSettingsAddOn(image, settings)
162 {
163 }
164
165
~VPNInterfaceAddOn()166 VPNInterfaceAddOn::~VPNInterfaceAddOn()
167 {
168 }
169
170
171 BNetworkSettingsItem*
CreateNextItem(uint32 & cookie)172 VPNInterfaceAddOn::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
184 extern "C"
185 BNetworkSettingsAddOn*
instantiate_network_settings_add_on(image_id image,BNetworkSettings & settings)186 instantiate_network_settings_add_on(image_id image, BNetworkSettings& settings)
187 {
188 return new VPNInterfaceAddOn(image, settings);
189 }
190