[haiku-commits] r40584 - haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 20 Feb 2011 17:19:43 +0100 (CET)

Author: kallisti5
Date: 2011-02-20 17:19:43 +0100 (Sun, 20 Feb 2011)
New Revision: 40584
Changeset: http://dev.haiku-os.org/changeset/40584

Modified:
   
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp
   haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h
   haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp
   haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h
   haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp
   haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h
Log:
make protocol selection more generic and easy to configure; this adds 
complexity but allows us to configure ipv4/ipv6 support from a single point.. 
now just have to figure out how to check for the presence of the IPv4 vs IPv6 
network add-ons

Modified: 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp
===================================================================
--- 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp 
    2011-02-20 15:42:46 UTC (rev 40583)
+++ 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp 
    2011-02-20 16:19:43 UTC (rev 40584)
@@ -15,8 +15,8 @@
 #include <StringView.h>
 
 
-InterfaceAddressView::InterfaceAddressView(BRect frame, const char* name,
-       int family, NetworkSettings* settings)
+InterfaceAddressView::InterfaceAddressView(BRect frame, int family,
+       NetworkSettings* settings)
        :
        BGroupView(B_VERTICAL),
        fSettings(settings),

Modified: 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h
===================================================================
--- 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h   
    2011-02-20 15:42:46 UTC (rev 40583)
+++ 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.h   
    2011-02-20 16:19:43 UTC (rev 40584)
@@ -28,8 +28,7 @@
 class InterfaceAddressView : public BGroupView {
 public:
                                                                
InterfaceAddressView(BRect frame,
-                                                                       const 
char* name, int family,
-                                                                       
NetworkSettings* settings);
+                                                                       int 
family, NetworkSettings* settings);
        virtual                                         ~InterfaceAddressView();
        virtual void                            MessageReceived(BMessage* 
message);
        virtual void                            AttachedToWindow();

Modified: 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp
===================================================================
--- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp  
2011-02-20 15:42:46 UTC (rev 40583)
+++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.cpp  
2011-02-20 16:19:43 UTC (rev 40584)
@@ -60,16 +60,25 @@
 void
 InterfaceWindow::MessageReceived(BMessage* message)
 {
+       int* supportedFamilies = fNetworkSettings->ProtocolVersions();
+       unsigned int index;
+
        switch (message->what) {
                case MSG_IP_REVERT:
-                       // RFC : we could check fTabView for Selection
-                       // here and only revert the selected tab.
-                       fIPv4TabView->RevertFields();
-                       fIPv6TabView->RevertFields();
+                       for (index = 0; index < sizeof(supportedFamilies); 
index++)
+                       {
+                               int protocol = supportedFamilies[index];
+                               if (protocol > 0)
+                                       fTabIPView[protocol]->RevertFields();
+                       }
                        break;
                case MSG_IP_SAVE:
-                       fIPv4TabView->SaveFields();
-                       fIPv6TabView->SaveFields();
+                       for (index = 0; index < sizeof(supportedFamilies); 
index++)
+                       {
+                               int protocol = supportedFamilies[index];
+                               if (protocol > 0)
+                                       fTabIPView[protocol]->SaveFields();
+                       }
                        this->Quit();
                        break;
                default:
@@ -83,20 +92,23 @@
 InterfaceWindow::_PopulateTabs()
 {
        BRect frame = fTabView->Bounds();
-       fIPv4TabView = new InterfaceAddressView(frame, "net_settings_ipv4",
-               AF_INET, fNetworkSettings);
-       fIPv6TabView = new InterfaceAddressView(frame, "net_settings_ipv6",
-               AF_INET6, fNetworkSettings);
+       int* supportedFamilies = fNetworkSettings->ProtocolVersions();
 
-       BTab* tab4 = new BTab;
-       BTab* tab6 = new BTab;
+       unsigned int index;
+       for (index = 0; index < sizeof(supportedFamilies); index++)
+       {
+               int protocol = supportedFamilies[index];
+               if (protocol > 0)
+               {
+                       fTabIPView[protocol] = new InterfaceAddressView(frame,
+                               protocol, fNetworkSettings);
+                       BTab* tab = new BTab;
+                       fTabView->AddTab(fTabIPView[protocol], tab);
+                       tab->SetLabel((protocol == AF_INET) ? "IPv4" : "IPv6");
+                               // TODO : find a better way
+               }
+       }
 
-       fTabView->AddTab(fIPv4TabView, tab4);
-       tab4->SetLabel("IPv4");
-
-       fTabView->AddTab(fIPv6TabView, tab6);
-       tab6->SetLabel("IPv6");
-
        return B_OK;
 }
 

Modified: 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h
===================================================================
--- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h    
2011-02-20 15:42:46 UTC (rev 40583)
+++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceWindow.h    
2011-02-20 16:19:43 UTC (rev 40584)
@@ -19,13 +19,18 @@
 #include <TabView.h>
 #include <Window.h>
 
+#include <map>
 
+
 enum {
        MSG_IP_SAVE = 'ipap',
        MSG_IP_REVERT = 'iprv'
 };
 
 
+typedef std::map<int, InterfaceAddressView*> IPViewMap;
+
+
 class InterfaceWindow : public BWindow {
 public:
                                                                
InterfaceWindow(NetworkSettings* settings);
@@ -41,8 +46,7 @@
                        BButton*                        fRevertButton;
                        BTabView*                       fTabView;
 
-                       InterfaceAddressView* fIPv4TabView;
-                       InterfaceAddressView* fIPv6TabView;
+                       IPViewMap                       fTabIPView;
 };
 
 

Modified: 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp
===================================================================
--- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp  
2011-02-20 15:42:46 UTC (rev 40583)
+++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp  
2011-02-20 16:19:43 UTC (rev 40584)
@@ -38,19 +38,35 @@
        fDisabled(false),
        fNameServers(5, true)
 {
-       fSocket[AF_INET] = socket(AF_INET, SOCK_DGRAM, 0);
-       fSocket[AF_INET6] = socket(AF_INET6, SOCK_DGRAM, 0);
+       // TODO : Detect supported IP protocol versions
+       memset(fProtocolVersions, 0, sizeof(fProtocolVersions));
+       fProtocolVersions[0] = AF_INET;
+       fProtocolVersions[1] = AF_INET6;
 
+       unsigned int index;
+       for (index = 0; index < sizeof(fProtocolVersions); index++)
+       {
+               int protocol = fProtocolVersions[index];
+               if (protocol > 0)
+                       fSocket[protocol] = socket(protocol, SOCK_DGRAM, 0);
+       }
+
        fName = name;
 
+
        ReadConfiguration();
 }
 
 
 NetworkSettings::~NetworkSettings()
 {
-       close(fSocket[AF_INET]);
-       close(fSocket[AF_INET6]);
+       unsigned int index;
+       for (index = 0; index < sizeof(fProtocolVersions); index++)
+       {
+               int protocol = fProtocolVersions[index];
+               if (protocol > 0)
+                       close(fSocket[protocol]);
+       }
 }
 
 
@@ -62,25 +78,24 @@
 {
        BNetworkInterface fNetworkInterface(fName);
 
-       // Obtain possible IPv4 and IPv6 addresses
-       int32 zeroAddrV4 = fNetworkInterface.FindFirstAddress(AF_INET);
-       int32 zeroAddrV6 = fNetworkInterface.FindFirstAddress(AF_INET6);
+       unsigned int index;
+       for (index = 0; index < sizeof(fProtocolVersions); index++)
+       {
+               int protocol = fProtocolVersions[index];
 
-       BNetworkInterfaceAddress netIntAddr4;
-       BNetworkInterfaceAddress netIntAddr6;
-
-       if (zeroAddrV4 >= 0) {
-               fNetworkInterface.GetAddressAt(zeroAddrV4, netIntAddr4);
-               fAddress[AF_INET] = netIntAddr4.Address();
-               fNetmask[AF_INET] = netIntAddr4.Mask();
+               if (protocol > 0) {
+                       int32 zeroAddr = 
fNetworkInterface.FindFirstAddress(protocol);
+                       if (zeroAddr >= 0) {
+                               fNetworkInterface.GetAddressAt(zeroAddr,
+                                       fInterfaceAddressMap[protocol]);
+                               fAddress[protocol]
+                                       = 
fInterfaceAddressMap[protocol].Address();
+                               fNetmask[protocol]
+                                       = fInterfaceAddressMap[protocol].Mask();
+                       }
+               }
        }
 
-       if (zeroAddrV6 >= 0) {
-               fNetworkInterface.GetAddressAt(zeroAddrV6, netIntAddr6);
-               fAddress[AF_INET6] = netIntAddr6.Address();
-               fNetmask[AF_INET6] = netIntAddr6.Mask();
-       }
-
        // Obtain gateway
        ifconf config;
        config.ifc_len = sizeof(config.ifc_value);
@@ -206,3 +221,10 @@
 }
 
 
+void
+NetworkSettings::WriteConfiguration()
+{
+
+
+}
+

Modified: 
haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h
===================================================================
--- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h    
2011-02-20 15:42:46 UTC (rev 40583)
+++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h    
2011-02-20 16:19:43 UTC (rev 40584)
@@ -20,6 +20,7 @@
 
 
 typedef std::map<int, BNetworkAddress> AddressMap;
+typedef std::map<int, BNetworkInterfaceAddress> InterfaceAddressMap;
 typedef std::map<int, bool> BoolMap;
 typedef std::map<int, int> SocketMap;
 
@@ -29,6 +30,9 @@
                                                                
NetworkSettings(const char* name);
        virtual                                         ~NetworkSettings();
 
+                       int*                            ProtocolVersions()
+                                                                       { 
return fProtocolVersions; }
+
                        void                            SetIP(int family, const 
char* ip)
                                                                        { 
fAddress[family].SetTo(ip); }
                        void                            SetNetmask(int family, 
const char* mask)
@@ -69,11 +73,16 @@
                        BObjectList<BString>& NameServers() { return 
fNameServers; }
 
                        void                            ReadConfiguration();
+                       void                            WriteConfiguration();
 
 private:
                        SocketMap                       fSocket;
                        BNetworkInterface       fNetworkInterface;
+                       InterfaceAddressMap     fInterfaceAddressMap;
 
+                       int                                     
fProtocolVersions[3];
+                                                                       // OS 
Supported protocol versions
+
                        // Stored network addresses and paramaters
                        BoolMap                         fAutoConfigure;
                        AddressMap                      fAddress;


Other related posts: