diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp index 904ae9b0e0..520adcb1d7 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp @@ -15,7 +15,6 @@ #include "InterfacesAddOn.h" -#include "InterfacesListView.h" #include "InterfaceWindow.h" #include @@ -58,14 +57,6 @@ InterfacesAddOn::Name() } -status_t -InterfacesAddOn::Save() -{ - printf("I am saved!\n"); - return B_OK; -} - - BView* InterfacesAddOn::CreateView(BRect *bounds) { @@ -118,6 +109,14 @@ InterfacesAddOn::AttachedToWindow() } +status_t +InterfacesAddOn::Save() +{ + // TODO : Profile? + return fListview->SaveItems(); +} + + void InterfacesAddOn::MessageReceived(BMessage* msg) { diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.h b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.h index de6ef900a4..afba979039 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.h +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.h @@ -13,9 +13,11 @@ #include #include +#include #include #include "NetworkSetupAddOn.h" +#include "InterfacesListView.h" class InterfacesAddOn : public NetworkSetupAddOn, public BBox @@ -26,6 +28,7 @@ public: const char* Name(); status_t Save(); + BView* CreateView(BRect *bounds); enum { @@ -38,7 +41,7 @@ public: void MessageReceived(BMessage* msg); private: - BListView* fListview; + InterfacesListView* fListview; BButton* fConfigure; BButton* fOnOff; }; diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp index a12ec758ea..d5b5dd83be 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp @@ -382,6 +382,24 @@ InterfacesListView::FindItem(const char* name) } +status_t +InterfacesListView::SaveItems() +{ + // Grab each fSettings instance and write it's settings + for (int32 i = CountItems(); i-- > 0;) { + InterfaceListItem* item = dynamic_cast(ItemAt(i)); + if (item == NULL) + continue; + + NetworkSettings* ns = item->GetSettings(); + // TODO : SetConfiguration doesn't use the interface settings file + ns->SetConfiguration(); + } + + return B_OK; +} + + status_t InterfacesListView::_InitList() { diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h index 30f1094cf2..881d29ffef 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h +++ b/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h @@ -72,7 +72,8 @@ public: virtual ~InterfacesListView(); - InterfaceListItem* FindItem(const char* name); + InterfaceListItem* FindItem(const char* name); + status_t SaveItems(); protected: virtual void AttachedToWindow(); diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp index 81eef03437..f2327b63b6 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp +++ b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.cpp @@ -101,6 +101,11 @@ NetworkSettings::_DetectProtocols() // -- Interface address read code +/*! ReadConfiguration pulls the current interface settings + from the interfaces via BNetworkInterface and friends + and populates this classes private settings BAddresses + with them. +*/ void NetworkSettings::ReadConfiguration() { @@ -272,10 +277,56 @@ NetworkSettings::ReadConfiguration() } +/*! SetConfiguration sets this classes current BNetworkAddress settings + to the interface directly via BNetworkInterface and friends +*/ +void +NetworkSettings::SetConfiguration() +{ + BNetworkInterface fNetworkInterface(fName); + printf("Setting %s\n", Name()); + for (int index = 0; index < MAX_PROTOCOLS; index++) { + int inet_id = fProtocols[index].inet_id; + if (fProtocols[index].present) { + int32 zeroAddr = fNetworkInterface.FindFirstAddress(inet_id); + if (zeroAddr >= 0) { + BNetworkInterfaceAddress interfaceConfig; + fNetworkInterface.GetAddressAt(zeroAddr, + interfaceConfig); + interfaceConfig.SetAddress(fAddress[inet_id]); + interfaceConfig.SetMask(fNetmask[inet_id]); + fNetworkInterface.SetAddress(interfaceConfig); + fNetworkInterface.SetTo(zeroAddr); + } else { + // TODO : test this case (no address set for this protocol) + printf("no zeroAddr found for %s(%d), found %lu\n", + fProtocols[index].name, inet_id, zeroAddr); + BNetworkInterfaceAddress interfaceConfig; + interfaceConfig.SetAddress(fAddress[inet_id]); + interfaceConfig.SetMask(fNetmask[inet_id]); + fNetworkInterface.AddAddress(interfaceConfig); + } + + } + } +} + + +/*! LoadConfiguration reads the current interface configuration + file that NetServer looks for and populates this class with it +*/ +void +NetworkSettings::LoadConfiguration() +{ + +} + + +/*! WriteConfiguration reads this classes settings and write them to + the current interface configuration file that NetServer watches for. +*/ void NetworkSettings::WriteConfiguration() { - } - diff --git a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h index 8e88c4d997..729ab6f947 100644 --- a/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h +++ b/src/tests/kits/net/preflet/InterfacesAddOn/NetworkSettings.h @@ -86,7 +86,13 @@ public: BObjectList& NameServers() { return fNameServers; } + /* Grab and write interface settings directly from interface */ void ReadConfiguration(); + void SetConfiguration(); + + /* Grab and write interface settings from interface configuration + file and let NetServer sort it out */ + void LoadConfiguration(); void WriteConfiguration(); private: diff --git a/src/tests/kits/net/preflet/NetworkSetupWindow.cpp b/src/tests/kits/net/preflet/NetworkSetupWindow.cpp index 2ae595d353..9eca8963fb 100644 --- a/src/tests/kits/net/preflet/NetworkSetupWindow.cpp +++ b/src/tests/kits/net/preflet/NetworkSetupWindow.cpp @@ -44,6 +44,7 @@ NetworkSetupWindow::NetworkSetupWindow(const char *title) B_TRANSLATE("Profile:"), profilesPopup); profilesMenuField->SetFont(be_bold_font); + profilesMenuField->SetEnabled(false); // ---- Settings section