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;