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);
+}