[haiku-commits] haiku: hrev51067 - in src: add-ons/network_settings/openvpn preferences/network

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 6 Apr 2017 01:52:36 +0200 (CEST)

hrev51067 adds 2 changesets to branch 'master'
old head: 476da4a52fbeccf9147fa83d09c5460c4b4196b1
new head: 5c08c834129e899c90fc66dfedc06981b50de1cc
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=5c08c834129e+%5E476da4a52fbe

----------------------------------------------------------------------------

6516aed58b55: network preflet: Make InterfaceListItem dumber
  
  * Allows us to use InterfaceListItem for non-physical
    interface things (like a VPN connection)

5c08c834129e: network preflet: Introduce early OpenVPN add-on
  
  * Not included in image... will likely be quite some
    time until it is :-)

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

9 files changed, 279 insertions(+), 21 deletions(-)
.../network_settings/NetworkSettingsAddOn.h      |   1 +
src/add-ons/network_settings/Jamfile             |   4 +
src/add-ons/network_settings/openvpn/Jamfile     |  18 ++
.../network_settings/openvpn/OpenVPN.rdef        |  12 ++
.../openvpn/OpenVPNInterfaceAddOn.cpp            | 189 +++++++++++++++++++
src/preferences/network/InterfaceListItem.cpp    |  44 +++--
src/preferences/network/InterfaceListItem.h      |  13 +-
src/preferences/network/NetworkWindow.cpp        |  18 +-
src/preferences/network/NetworkWindow.h          |   1 +

############################################################################

Commit:      6516aed58b551d679dfc51b9b56c4085481a3266
URL:         http://cgit.haiku-os.org/haiku/commit/?id=6516aed58b55
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Wed Apr  5 18:46:10 2017 UTC

network preflet: Make InterfaceListItem dumber

* Allows us to use InterfaceListItem for non-physical
  interface things (like a VPN connection)

----------------------------------------------------------------------------

diff --git a/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h 
b/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h
index 3644898..ebcc331 100644
--- a/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h
+++ b/headers/os/add-ons/network_settings/NetworkSettingsAddOn.h
@@ -24,6 +24,7 @@ enum BNetworkSettingsType {
        B_NETWORK_SETTINGS_TYPE_INTERFACE = 'intf',
        B_NETWORK_SETTINGS_TYPE_SERVICE = 'serv',
        B_NETWORK_SETTINGS_TYPE_DIAL_UP = 'dial',
+       B_NETWORK_SETTINGS_TYPE_VPN = 'vpnc',
        B_NETWORK_SETTINGS_TYPE_OTHER = 'othr'
 };
 
diff --git a/src/preferences/network/InterfaceListItem.cpp 
b/src/preferences/network/InterfaceListItem.cpp
index 1b12117..df31878 100644
--- a/src/preferences/network/InterfaceListItem.cpp
+++ b/src/preferences/network/InterfaceListItem.cpp
@@ -19,7 +19,6 @@
 #include <Catalog.h>
 #include <ControlLook.h>
 #include <IconUtils.h>
-#include <NetworkDevice.h>
 #include <OutlineListView.h>
 #include <Resources.h>
 #include <String.h>
@@ -32,9 +31,11 @@
 #define B_TRANSLATION_CONTEXT "InterfaceListItem"
 
 
-InterfaceListItem::InterfaceListItem(const char* name)
+InterfaceListItem::InterfaceListItem(const char* name,
+       BNetworkInterfaceType type)
        :
        BListItem(0, false),
+       fType(type),
        fIcon(NULL),
        fFirstLineOffset(0),
        fLineOffset(0),
@@ -166,16 +167,15 @@ InterfaceListItem::ConfigurationUpdated(const BMessage& 
message)
 void
 InterfaceListItem::_Init()
 {
-       const char* mediaTypeName = NULL;
-
-       BNetworkDevice device(Name());
-       if (device.IsWireless())
-               mediaTypeName = "wifi";
-       else if (device.IsEthernet())
-               mediaTypeName = "ether";
-
-       _PopulateBitmaps(mediaTypeName);
-               // Load the interface icons
+       switch(fType) {
+               default:
+               case B_NETWORK_INTERFACE_TYPE_WIFI:
+                       _PopulateBitmaps("wifi");
+                       break;
+               case B_NETWORK_INTERFACE_TYPE_ETHERNET:
+                       _PopulateBitmaps("ether");
+                       break;
+       }
 }
 
 
@@ -257,13 +257,19 @@ InterfaceListItem::_UpdateState()
        fHasLink = fInterface.HasLink();
        fConnecting = (fInterface.Flags() & IFF_CONFIGURING) != 0;
 
-       BNetworkDevice device(Name());
-       if (device.IsWireless())
-               fSubtitle = B_TRANSLATE("Wireless device");
-       else if (device.IsEthernet())
-               fSubtitle = B_TRANSLATE("Ethernet device");
-       else
-               fSubtitle = "";
+       switch (fType) {
+               case B_NETWORK_INTERFACE_TYPE_WIFI:
+                       fSubtitle = B_TRANSLATE("Wireless device");
+                       break;
+               case B_NETWORK_INTERFACE_TYPE_ETHERNET:
+                       fSubtitle = B_TRANSLATE("Ethernet device");
+                       break;
+               case B_NETWORK_INTERFACE_TYPE_VPN:
+                       fSubtitle = B_TRANSLATE("VPN connection");
+                       break;
+               default:
+                       fSubtitle = "";
+       }
 }
 
 
diff --git a/src/preferences/network/InterfaceListItem.h 
b/src/preferences/network/InterfaceListItem.h
index 396afe8..caaf60f 100644
--- a/src/preferences/network/InterfaceListItem.h
+++ b/src/preferences/network/InterfaceListItem.h
@@ -17,13 +17,22 @@
 #include <NetworkSettingsAddOn.h>
 
 
+enum BNetworkInterfaceType {
+    B_NETWORK_INTERFACE_TYPE_WIFI = 'wifi',
+    B_NETWORK_INTERFACE_TYPE_ETHERNET = 'ethr',
+    B_NETWORK_INTERFACE_TYPE_VPN = 'nvpn',
+    B_NETWORK_INTERFACE_TYPE_OTHER = 'othe',
+};
+
+
 class BBitmap;
 
 
 class InterfaceListItem : public BListItem,
        public BNetworkKit::BNetworkConfigurationListener {
 public:
-                                                               
InterfaceListItem(const char* name);
+                                                               
InterfaceListItem(const char* name,
+                                                                       
BNetworkInterfaceType type);
                                                                
~InterfaceListItem();
 
                        void                            DrawItem(BView* owner,
@@ -42,6 +51,8 @@ private:
                        const char*                     _StateText() const;
 
 private:
+                       BNetworkInterfaceType fType;
+
                        BBitmap*                        fIcon;
                        BBitmap*                        fIconOffline;
                        BBitmap*                        fIconPending;
diff --git a/src/preferences/network/NetworkWindow.cpp 
b/src/preferences/network/NetworkWindow.cpp
index 56458c2..dbeb791 100644
--- a/src/preferences/network/NetworkWindow.cpp
+++ b/src/preferences/network/NetworkWindow.cpp
@@ -25,6 +25,7 @@
 #include <Deskbar.h>
 #include <Directory.h>
 #include <LayoutBuilder.h>
+#include <NetworkDevice.h>
 #include <NetworkInterface.h>
 #include <NetworkNotifications.h>
 #include <NetworkRoster.h>
@@ -94,6 +95,7 @@ NetworkWindow::NetworkWindow()
                B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | 
B_AUTO_UPDATE_SIZE_LIMITS),
        fServicesItem(NULL),
        fDialUpItem(NULL),
+       fVPNItem(NULL),
        fOtherItem(NULL)
 {
        // Profiles section
@@ -336,7 +338,15 @@ NetworkWindow::_ScanInterfaces()
                if ((interface.Flags() & IFF_LOOPBACK) != 0)
                        continue;
 
-               InterfaceListItem* item = new 
InterfaceListItem(interface.Name());
+               BNetworkDevice device(interface.Name());
+               BNetworkInterfaceType type = B_NETWORK_INTERFACE_TYPE_OTHER;
+
+               if (device.IsWireless())
+                       type = B_NETWORK_INTERFACE_TYPE_WIFI;
+               else if (device.IsEthernet())
+                       type = B_NETWORK_INTERFACE_TYPE_ETHERNET;
+
+               InterfaceListItem* item = new 
InterfaceListItem(interface.Name(), type);
                item->SetExpanded(true);
 
                fInterfaceItemMap.insert(std::pair<BString, InterfaceListItem*>(
@@ -440,6 +450,7 @@ NetworkWindow::_ScanAddOns()
 
                _SortItemsUnder(fServicesItem);
                _SortItemsUnder(fDialUpItem);
+               _SortItemsUnder(fVPNItem);
                _SortItemsUnder(fOtherItem);
        }
 
@@ -481,6 +492,11 @@ NetworkWindow::_ListItemFor(BNetworkSettingsType type)
                                fDialUpItem = _CreateItem(B_TRANSLATE("Dial 
Up"));
                        return fDialUpItem;
 
+               case B_NETWORK_SETTINGS_TYPE_VPN:
+                       if (fVPNItem == NULL)
+                               fVPNItem = _CreateItem(B_TRANSLATE("VPN"));
+                       return fVPNItem;
+
                case B_NETWORK_SETTINGS_TYPE_OTHER:
                        if (fOtherItem == NULL)
                                fOtherItem = _CreateItem(B_TRANSLATE("Other"));
diff --git a/src/preferences/network/NetworkWindow.h 
b/src/preferences/network/NetworkWindow.h
index 10d49b3..5d937a4 100644
--- a/src/preferences/network/NetworkWindow.h
+++ b/src/preferences/network/NetworkWindow.h
@@ -78,6 +78,7 @@ private:
                        ItemMap                         fInterfaceItemMap;
                        BListItem*                      fServicesItem;
                        BListItem*                      fDialUpItem;
+                       BListItem*                      fVPNItem;
                        BListItem*                      fOtherItem;
 
                        SettingsMap                     fSettingsMap;

############################################################################

Revision:    hrev51067
Commit:      5c08c834129e899c90fc66dfedc06981b50de1cc
URL:         http://cgit.haiku-os.org/haiku/commit/?id=5c08c834129e
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Wed Apr  5 18:50:00 2017 UTC

network preflet: Introduce early OpenVPN add-on

* Not included in image... will likely be quite some
  time until it is :-)

----------------------------------------------------------------------------

diff --git a/src/add-ons/network_settings/Jamfile 
b/src/add-ons/network_settings/Jamfile
index 72abc94..6c31b98 100644
--- a/src/add-ons/network_settings/Jamfile
+++ b/src/add-ons/network_settings/Jamfile
@@ -9,3 +9,7 @@ SubInclude HAIKU_TOP src add-ons network_settings dnsclient ;
 SubInclude HAIKU_TOP src add-ons network_settings ftpd ;
 SubInclude HAIKU_TOP src add-ons network_settings sshd ;
 SubInclude HAIKU_TOP src add-ons network_settings telnetd ;
+
+# VPN add-ons
+SubInclude HAIKU_TOP src add-ons network_settings openvpn ;
+
diff --git a/src/add-ons/network_settings/openvpn/Jamfile 
b/src/add-ons/network_settings/openvpn/Jamfile
new file mode 100644
index 0000000..6bc04c3
--- /dev/null
+++ b/src/add-ons/network_settings/openvpn/Jamfile
@@ -0,0 +1,18 @@
+SubDir HAIKU_TOP src add-ons network_settings openvpn ;
+
+UsePublicHeaders [ FDirName add-ons network_settings ] ;
+UsePrivateHeaders app libroot kernel net shared ;
+UseHeaders [ FDirName $(HAIKU_TOP) src preferences network ] : false ;
+
+AddResources OpenVPN : OpenVPN.rdef ;
+
+Addon OpenVPNInterface :
+       OpenVPNInterfaceAddOn.cpp
+
+       : be bnetapi shared <nogrist>Network [ TargetLibsupc++ ]
+               [ TargetLibstdc++ ] localestub
+;
+
+DoCatalogs OpenVPNInterface : x-vnd.Haiku-OpenVPNInterface :
+       OpenVPNInterfaceAddOn.cpp
+;
diff --git a/src/add-ons/network_settings/openvpn/OpenVPN.rdef 
b/src/add-ons/network_settings/openvpn/OpenVPN.rdef
new file mode 100644
index 0000000..ce4514d
--- /dev/null
+++ b/src/add-ons/network_settings/openvpn/OpenVPN.rdef
@@ -0,0 +1,12 @@
+resource app_signature "application/x-vnd.Haiku-SSHService";
+
+resource app_version {
+       major  = 1,
+       middle = 0,
+       minor  = 0,
+       variety = 0,
+       internal = 0,
+       short_info = "1.0.0",
+       long_info = "Haiku SSH server settings"
+};
+
diff --git a/src/add-ons/network_settings/openvpn/OpenVPNInterfaceAddOn.cpp 
b/src/add-ons/network_settings/openvpn/OpenVPNInterfaceAddOn.cpp
new file mode 100644
index 0000000..2822696
--- /dev/null
+++ b/src/add-ons/network_settings/openvpn/OpenVPNInterfaceAddOn.cpp
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2015-2017 Haiku, Inc. All rights reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * Authors:
+ *             Axel Dörfler, <axeld@xxxxxxxxxxxxxxxx>
+ *             Ingo Weinhold <ingo_weinhold@xxxxxx>
+ *             Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
+ */
+
+
+#include <pwd.h>
+
+#include <Button.h>
+#include <Catalog.h>
+#include <LayoutBuilder.h>
+#include <NetworkSettings.h>
+#include <NetworkSettingsAddOn.h>
+#include <StringView.h>
+#include <TextView.h>
+
+#include <NetServer.h>
+#include <RegistrarDefs.h>
+#include <user_group.h>
+#include <util/KMessage.h>
+
+#include "InterfaceListItem.h"
+#include "InterfaceView.h"
+
+
+using namespace BNetworkKit;
+
+
+#undef B_TRANSLATION_CONTEXT
+#define B_TRANSLATION_CONTEXT "OpenVPNInterfaceAddOn"
+
+
+static const uint32 kMsgToggleService = 'tgls';
+
+
+class OpenVPNInterfaceAddOn : public BNetworkSettingsAddOn {
+public:
+                                                               
OpenVPNInterfaceAddOn(image_id image,
+                                                                       
BNetworkSettings& settings);
+       virtual                                         
~OpenVPNInterfaceAddOn();
+
+       virtual BNetworkSettingsItem*
+                                                               
CreateNextItem(uint32& cookie);
+};
+
+
+class OpenVPNInterfaceView : public InterfaceView {
+public:
+                                                               
OpenVPNInterfaceView(BNetworkSettings& settings);
+       virtual                                         ~OpenVPNInterfaceView();
+};
+
+
+class OpenVPNInterfaceItem : public BNetworkSettingsItem {
+public:
+                                                               
OpenVPNInterfaceItem(BNetworkSettings& settings);
+       virtual                                         ~OpenVPNInterfaceItem();
+
+       virtual BNetworkSettingsType
+                                                               Type() const;
+
+       virtual BListItem*                      ListItem();
+       virtual BView*                          View();
+
+       virtual status_t                        Revert();
+       virtual bool                            IsRevertable();
+
+private:
+                       BNetworkSettings&       fSettings;
+                       BListItem*                      fItem;
+                       InterfaceView*          fView;
+};
+
+
+// #pragma mark -
+
+
+OpenVPNInterfaceView::OpenVPNInterfaceView(BNetworkSettings& settings)
+       :
+       InterfaceView()
+{
+}
+
+
+OpenVPNInterfaceView::~OpenVPNInterfaceView()
+{
+}
+
+
+// #pragma mark -
+
+
+OpenVPNInterfaceItem::OpenVPNInterfaceItem(BNetworkSettings& settings)
+       :
+       fSettings(settings),
+       fItem(new InterfaceListItem("My Awesome VPN",
+               B_NETWORK_INTERFACE_TYPE_VPN)),
+       fView(NULL)
+{
+}
+
+
+OpenVPNInterfaceItem::~OpenVPNInterfaceItem()
+{
+       if (fView->Parent() == NULL)
+               delete fView;
+
+       delete fItem;
+}
+
+
+BNetworkSettingsType
+OpenVPNInterfaceItem::Type() const
+{
+       return B_NETWORK_SETTINGS_TYPE_VPN;
+}
+
+
+BListItem*
+OpenVPNInterfaceItem::ListItem()
+{
+       return fItem;
+}
+
+
+BView*
+OpenVPNInterfaceItem::View()
+{
+       if (fView == NULL)
+               fView = new OpenVPNInterfaceView(fSettings);
+
+       return fView;
+}
+
+
+status_t
+OpenVPNInterfaceItem::Revert()
+{
+       return B_OK;
+}
+
+bool
+OpenVPNInterfaceItem::IsRevertable()
+{
+       // TODO
+       return false;
+}
+
+
+// #pragma mark -
+
+
+OpenVPNInterfaceAddOn::OpenVPNInterfaceAddOn(image_id image,
+       BNetworkSettings& settings)
+       :
+       BNetworkSettingsAddOn(image, settings)
+{
+}
+
+
+OpenVPNInterfaceAddOn::~OpenVPNInterfaceAddOn()
+{
+}
+
+
+BNetworkSettingsItem*
+OpenVPNInterfaceAddOn::CreateNextItem(uint32& cookie)
+{
+       if (cookie++ == 0)
+               return new OpenVPNInterfaceItem(Settings());
+
+       return NULL;
+}
+
+
+// #pragma mark -
+
+
+extern "C"
+BNetworkSettingsAddOn*
+instantiate_network_settings_add_on(image_id image, BNetworkSettings& settings)
+{
+       return new OpenVPNInterfaceAddOn(image, settings);
+}


Other related posts: