Author: kallisti5 Date: 2011-02-19 18:03:21 +0100 (Sat, 19 Feb 2011) New Revision: 40560 Changeset: http://dev.haiku-os.org/changeset/40560 Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h Log: start using std::map for address storage; as things are easier to store, return and set parameters in header; works great! Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp 2011-02-19 15:27:02 UTC (rev 40559) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfaceAddressView.cpp 2011-02-19 17:03:21 UTC (rev 40560) @@ -106,14 +106,14 @@ { // Populate address fields with current settings - const char* currMode = fSettings->AutoConfigure() ? "Automatic" : "Static"; + const char* currMode = fSettings->AutoConfigure(fFamily) + ? "Automatic" : "Static"; - _EnableFields(!fSettings->AutoConfigure()); + _EnableFields(!fSettings->AutoConfigure(fFamily)); // if Autoconfigured, disable address fields until changed - // TODO : AutoConfigure needs to be based on family if (fSettings->IPAddr(fFamily).IsEmpty() - && !fSettings->AutoConfigure()) + && !fSettings->AutoConfigure(fFamily)) { currMode = "None"; _EnableFields(false); @@ -143,3 +143,4 @@ return B_OK; } + Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp 2011-02-19 15:27:02 UTC (rev 40559) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp 2011-02-19 17:03:21 UTC (rev 40560) @@ -95,9 +95,6 @@ { BListView* list = dynamic_cast<BListView*>(owner); - BNetworkAddress addrIPv4 = fSettings->IPAddr(AF_INET); - BNetworkAddress addrIPv6 = fSettings->IPAddr(AF_INET6); - if (!list) return; @@ -127,8 +124,10 @@ } else if (!fInterface.HasLink()) { interfaceState << "no link"; stateIcon = fIconOffline; - } else if (addrIPv4.IsEmpty() && addrIPv6.IsEmpty() - && fSettings->AutoConfigure()) { + } else if ((fSettings->IPAddr(AF_INET).IsEmpty() + && fSettings->IPAddr(AF_INET6).IsEmpty()) + && (fSettings->AutoConfigure(AF_INET) + || fSettings->AutoConfigure(AF_INET6))) { interfaceState << "connecting" B_UTF8_ELLIPSIS; stateIcon = fIconPending; } else { @@ -177,23 +176,23 @@ // Render IPv4 Address BString v4str("IPv4: "); - if (addrIPv4.IsEmpty()) + if (fSettings->IPAddr(AF_INET).IsEmpty()) v4str << "none"; else { - v4str << addrIPv4.ToString(); + v4str << fSettings->IP(AF_INET); } - if (fSettings->AutoConfigure()) + if (fSettings->AutoConfigure(AF_INET)) v4str << " (DHCP)"; else - v4str << " (manual)"; + v4str << " (static)"; list->DrawString(v4str.String(), v4addrPt); // Render IPv6 Address (if present) - if (!addrIPv6.IsEmpty()) { + if (!fSettings->IPAddr(AF_INET6).IsEmpty()) { BString v6str("IPv6: "); - v6str << addrIPv6.ToString(); + v6str << fSettings->IP(AF_INET6); list->DrawString(v6str, v6addrPt); } } Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile 2011-02-19 15:27:02 UTC (rev 40559) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile 2011-02-19 17:03:21 UTC (rev 40560) @@ -29,6 +29,7 @@ $(TARGET_NETWORK_LIBS) libbnetapi.so $(TARGET_LIBSUPC++) + $(TARGET_LIBSTDC++) $(HAIKU_LOCALE_LIBS) libicon.a libagg.a ; Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp 2011-02-19 15:27:02 UTC (rev 40559) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp 2011-02-19 17:03:21 UTC (rev 40560) @@ -35,13 +35,11 @@ NetworkSettings::NetworkSettings(const char* name) : - fIPv4Auto(true), - fIPv6Auto(true), fDisabled(false), fNameServers(5, true) { - fSocket4 = socket(AF_INET, SOCK_DGRAM, 0); - fSocket6 = socket(AF_INET6, SOCK_DGRAM, 0); + fSocket[AF_INET] = socket(AF_INET, SOCK_DGRAM, 0); + fSocket[AF_INET6] = socket(AF_INET6, SOCK_DGRAM, 0); fName = name; @@ -51,13 +49,14 @@ NetworkSettings::~NetworkSettings() { - close(fSocket4); - close(fSocket6); + close(fSocket[AF_INET]); + close(fSocket[AF_INET6]); } // -- Interface address read code + void NetworkSettings::ReadConfiguration() { @@ -72,20 +71,20 @@ if (zeroAddrV4 >= 0) { fNetworkInterface.GetAddressAt(zeroAddrV4, netIntAddr4); - fIPv4Addr = netIntAddr4.Address(); - fIPv4Mask = netIntAddr4.Mask(); + fAddress[AF_INET] = netIntAddr4.Address(); + fNetmask[AF_INET] = netIntAddr4.Mask(); } if (zeroAddrV6 >= 0) { fNetworkInterface.GetAddressAt(zeroAddrV6, netIntAddr6); - fIPv6Addr = netIntAddr6.Address(); - fIPv6Mask = netIntAddr6.Mask(); + fAddress[AF_INET6] = netIntAddr6.Address(); + fNetmask[AF_INET6] = netIntAddr6.Mask(); } // Obtain gateway ifconf config; config.ifc_len = sizeof(config.ifc_value); - if (ioctl(fSocket4, SIOCGRTSIZE, &config, sizeof(config)) < 0) + if (ioctl(fSocket[AF_INET], SIOCGRTSIZE, &config, sizeof(config)) < 0) return; uint32 size = (uint32)config.ifc_value; @@ -100,7 +99,7 @@ config.ifc_len = size; config.ifc_buf = buffer; - if (ioctl(fSocket4, SIOCGRTTABLE, &config, sizeof(config)) < 0) + if (ioctl(fSocket[AF_INET], SIOCGRTTABLE, &config, sizeof(config)) < 0) return; ifreq* interface = (ifreq*)buffer; @@ -111,7 +110,7 @@ if ((route.flags & RTF_GATEWAY) != 0) { sockaddr_in* inetAddress = (sockaddr_in*)route.gateway; - fIPv4Gateway = inet_ntoa(inetAddress->sin_addr); + fGateway[AF_INET] = inet_ntoa(inetAddress->sin_addr); } int32 addressSize = 0; @@ -126,20 +125,20 @@ + sizeof(route_entry) + addressSize); } + fDisabled = (fNetworkInterface.Flags() & IFF_UP) == 0; + // Obtain selfconfiguration options // TODO : This needs to be determined by the protocol flags // instead of the interface flag... protocol flags don't seem // to be complete yet. (netIntAddr4.Flags() and netIntAddr6.Flags()) - fIPv4Auto = (fNetworkInterface.Flags() + fAutoConfigure[AF_INET] = (fNetworkInterface.Flags() & (IFF_AUTO_CONFIGURED | IFF_CONFIGURING)) != 0; - fIPv6Auto = (fNetworkInterface.Flags() + fAutoConfigure[AF_INET6] = (fNetworkInterface.Flags() & (IFF_AUTO_CONFIGURED | IFF_CONFIGURING)) != 0; - fDisabled = (fNetworkInterface.Flags() & IFF_UP) == 0; - // Read wireless network from interfaces fWirelessNetwork.SetTo(NULL); @@ -207,95 +206,3 @@ } -BNetworkAddress -NetworkSettings::IPAddr(int family) -{ - if (family == AF_INET6) - return fIPv6Addr; - - return fIPv4Addr; -} - - -const char* -NetworkSettings::IP(int family) -{ - if (family == AF_INET6) - return fIPv6Addr.ToString(); - - return fIPv4Addr.ToString(); -} - - -const char* -NetworkSettings::Netmask(int family) -{ - if (family == AF_INET6) - return fIPv6Mask.ToString(); - - return fIPv4Mask.ToString(); -} - - -const char* -NetworkSettings::Gateway(int family) -{ - if (family == AF_INET6) - return fIPv6Gateway.ToString(); - - return fIPv4Gateway.ToString(); -} - - -int32 -NetworkSettings::PrefixLen(int family) -{ - if (family == AF_INET6) - return fIPv6Mask.PrefixLength(); - - return fIPv4Mask.PrefixLength(); -} - - -// -- Interface address write code - - -void -NetworkSettings::SetIP(int family, const char* ip) -{ - if (family == AF_INET6) - fIPv6Addr = ip; - else - fIPv4Addr = ip; -} - - -void -NetworkSettings::SetNetmask(int family, const char* mask) -{ - if (family == AF_INET6) - fIPv6Mask = mask; - else - fIPv4Mask = mask; -} - - -void -NetworkSettings::SetGateway(int family, const char* ip) -{ - if (family == AF_INET6) - fIPv6Gateway = ip; - else - fIPv4Gateway = ip; -} - - -void -NetworkSettings::SetAutoConfigure(int family, bool autoConf) -{ - if (family == AF_INET6) - fIPv6Auto = autoConf; - else - fIPv4Auto = autoConf; -} - Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h 2011-02-19 15:27:02 UTC (rev 40559) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h 2011-02-19 17:03:21 UTC (rev 40560) @@ -16,34 +16,53 @@ #include <ObjectList.h> #include <String.h> +#include <map> + +typedef std::map<int, BNetworkAddress> AddressMap; +typedef std::map<int, bool> BoolMap; +typedef std::map<int, int> SocketMap; + + class NetworkSettings { public: NetworkSettings(const char* name); virtual ~NetworkSettings(); - void SetIP(int family, const char* ip); - void SetNetmask(int family, const char* mask); - void SetGateway(int family, const char* mask); - void SetAutoConfigure(int family, bool autoConf); + void SetIP(int family, const char* ip) + { fAddress[family].SetTo(ip); } + void SetNetmask(int family, const char* mask) + { fNetmask[family].SetTo(mask); } + void SetGateway(int family, const char* ip) + { fGateway[family].SetTo(ip); } + void SetAutoConfigure(int family, bool autoConf) + { fAutoConfigure[family] = autoConf; } void SetDisabled(bool disabled) { fDisabled = disabled; } + // void SetWirelessNetwork(const char* name) // { fWirelessNetwork.SetTo(name); } // void SetDomain(const BString& domain) // { fDomain = domain; } - BNetworkAddress IPAddr(int family); - const char* IP(int family); - const char* Netmask(int family); - const char* Gateway(int family); - int32 PrefixLen(int family); + bool AutoConfigure(int family) + { return fAutoConfigure[family]; } + BNetworkAddress IPAddr(int family) + { return fAddress[family]; } + const char* IP(int family) + { return fAddress[family].ToString(); } + const char* Netmask(int family) + { return fNetmask[family].ToString(); } + const char* Gateway(int family) + { return fGateway[family].ToString(); } + int32 PrefixLen(int family) + { return fNetmask[family].PrefixLength(); } + const char* Name() { return fName.String(); } const char* Domain() { return fDomain.String(); } - bool AutoConfigure() { return fIPv4Auto; } bool IsDisabled() { return fDisabled; } const BString& WirelessNetwork() { return fWirelessNetwork; } @@ -52,23 +71,15 @@ void ReadConfiguration(); private: - int fSocket4; - int fSocket6; - + SocketMap fSocket; BNetworkInterface fNetworkInterface; - // IPv4 address configuration - bool fIPv4Auto; - BNetworkAddress fIPv4Addr; - BNetworkAddress fIPv4Mask; - BNetworkAddress fIPv4Gateway; + // Stored network addresses and paramaters + BoolMap fAutoConfigure; + AddressMap fAddress; + AddressMap fNetmask; + AddressMap fGateway; - // IPv6 address configuration - bool fIPv6Auto; - BNetworkAddress fIPv6Addr; - BNetworkAddress fIPv6Mask; - BNetworkAddress fIPv6Gateway; - BString fName; BString fDomain; bool fDisabled;