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