Author: phoudoin Date: 2011-01-17 12:21:12 +0100 (Mon, 17 Jan 2011) New Revision: 40239 Changeset: http://dev.haiku-os.org/changeset/40239 Removed: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/EthernetSettingsView.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/EthernetSettingsView.h haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.h Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.h Log: Switched to new BNetwork* classes. Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp 2011-01-16 16:33:11 UTC (rev 40238) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesAddOn.cpp 2011-01-17 11:21:12 UTC (rev 40239) @@ -61,14 +61,14 @@ { float w, h; BRect r = *bounds; - + #define H_MARGIN 10 #define V_MARGIN 10 #define SMALL_MARGIN 3 - + if (r.Width() < 100 || r.Height() < 100) r.Set(0, 0, 100, 100); - + ResizeTo(r.Width(), r.Height()); BRect rlv = r; @@ -77,14 +77,14 @@ rlv.right -= B_V_SCROLL_BAR_WIDTH; fListview = new InterfacesListView(rlv, "interfaces", B_FOLLOW_ALL_SIDES); fListview->SetSelectionMessage(new BMessage(INTERFACE_SELECTED_MSG)); - fListview->SetInvocationMessage(new BMessage(CONFIGURE_INTERFACE_MSG)); - AddChild(new BScrollView(NULL, fListview, B_FOLLOW_ALL_SIDES, B_WILL_DRAW + fListview->SetInvocationMessage(new BMessage(CONFIGURE_INTERFACE_MSG)); + AddChild(new BScrollView(NULL, fListview, B_FOLLOW_ALL_SIDES, B_WILL_DRAW | B_FRAME_EVENTS, false, true)); - + r.top = r.bottom - 60; - fConfigure = new BButton(r, "configure", "Configure" B_UTF8_ELLIPSIS, + fConfigure = new BButton(r, "configure", "Configure" B_UTF8_ELLIPSIS, new BMessage(CONFIGURE_INTERFACE_MSG), B_FOLLOW_BOTTOM | B_FOLLOW_LEFT); - + fConfigure->GetPreferredSize(&w, &h); fConfigure->ResizeToPreferred(); fConfigure->SetEnabled(false); @@ -99,7 +99,7 @@ fOnOff->Hide(); AddChild(fOnOff); - *bounds = Bounds(); + *bounds = Bounds(); return this; } @@ -119,7 +119,7 @@ { int nr = fListview->CurrentSelection(); InterfaceListItem *item = NULL; - if(nr != -1) { + if(nr != -1) { item = dynamic_cast<InterfaceListItem*>(fListview->ItemAt(nr)); } @@ -131,26 +131,26 @@ fOnOff->Hide(); break; } - fOnOff->SetLabel(item->Enabled() ? "Disable" : "Enable"); - fOnOff->Show(); + fOnOff->SetLabel(item->IsDisabled() ? "Enable" : "Disable"); + fOnOff->Show(); break; } - + case CONFIGURE_INTERFACE_MSG: { if (!item) break; - NetworkWindow* nw = new NetworkWindow(item->GetSetting()); + NetworkWindow* nw = new NetworkWindow(item->GetSettings()); nw->Show(); break; } - + case ONOFF_INTERFACE_MSG: if (!item) break; - - item->SetEnabled(!item->Enabled()); - fOnOff->SetLabel(item->Enabled() ? "Disable" : "Enable"); + + item->SetDisabled(!item->IsDisabled()); + fOnOff->SetLabel(item->IsDisabled() ? "Enable" : "Disable"); fListview->Invalidate(); break; Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp 2011-01-16 16:33:11 UTC (rev 40238) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp 2011-01-17 11:21:12 UTC (rev 40239) @@ -9,7 +9,6 @@ #include "InterfacesListView.h" -#include "Setting.h" #include <stdio.h> #include <stdlib.h> @@ -22,44 +21,19 @@ #include <sys/socket.h> #include <sys/sockio.h> -#include <IconUtils.h> #include <File.h> +#include <IconUtils.h> +#include <net_notifications.h> +#include <NetworkDevice.h> +#include <NetworkInterface.h> +#include <NetworkRoster.h> #include <Resources.h> #include <AutoDeleter.h> -#include <net_notifications.h> +#include "Settings.h" -class SocketOpener { -public: - SocketOpener() - { - fSocket = socket(AF_INET, SOCK_DGRAM, 0); - } - - ~SocketOpener() - { - close(fSocket); - } - - status_t InitCheck() - { - return fSocket >= 0 ? B_OK : B_ERROR; - } - - operator int() const - { - return fSocket; - } - -private: - int fSocket; -}; - - - - // #pragma mark - @@ -77,25 +51,30 @@ } +// #pragma mark - + + InterfaceListItem::InterfaceListItem(const char* name) - : + : BListItem(0, false), - fIcon(NULL), - fSettings(new Setting(name)) + fIcon(NULL) { - _InitIcon(); + fInterface.SetTo(name); + _Init(); } InterfaceListItem::~InterfaceListItem() { delete fIcon; + delete fSettings; } -void InterfaceListItem::Update(BView* owner, const BFont* font) -{ - BListItem::Update(owner,font); +void +InterfaceListItem::Update(BView* owner, const BFont* font) +{ + BListItem::Update(owner,font); font_height height; font->GetHeight(&height); @@ -110,21 +89,21 @@ BListView* list = dynamic_cast<BListView*>(owner); if (!list) return; - + font_height height; BFont font; owner->GetFont(&font); font.GetHeight(&height); float fntheight = height.ascent+height.descent+height.leading; - BRect bounds = list->ItemFrame(list->IndexOf(this)); - + BRect bounds = list->ItemFrame(list->IndexOf(this)); + rgb_color oldviewcolor = owner->ViewColor(); rgb_color oldlowcolor = owner->LowColor(); rgb_color oldcolor = owner->HighColor(); rgb_color color = oldviewcolor; - if ( IsSelected() ) + if ( IsSelected() ) color = tint_color(color, B_HIGHLIGHT_BACKGROUND_TINT); owner->SetViewColor( color ); @@ -140,35 +119,35 @@ BPoint namePt = iconPt + BPoint(32+8, fntheight); BPoint driverPt = iconPt + BPoint(32+8, fntheight*2); BPoint commentPt = iconPt + BPoint(32+8, fntheight*3); - + drawing_mode mode = owner->DrawingMode(); - if (fSettings->Enabled()) - owner->SetDrawingMode(B_OP_OVER); - else { + if (fSettings->IsDisabled()) { owner->SetDrawingMode(B_OP_ALPHA); owner->SetBlendingMode(B_CONSTANT_ALPHA, B_ALPHA_OVERLAY); owner->SetHighColor(0, 0, 0, 32); - } - + } else + owner->SetDrawingMode(B_OP_OVER); + owner->DrawBitmapAsync(fIcon, iconPt); - if (!fSettings->Enabled()) + if (fSettings->IsDisabled()) owner->SetHighColor(tint_color(oldcolor, B_LIGHTEN_1_TINT)); owner->SetFont(be_bold_font); owner->DrawString(Name(), namePt); owner->SetFont(be_plain_font); - if (fSettings->Enabled()) { + if (fSettings->IsDisabled()) + owner->DrawString("Disabled.", driverPt); + else { BString str("Enabled, IPv4 address: "); str << fSettings->IP(); owner->DrawString(str.String(), driverPt); - if (fSettings->AutoConfigured()) + if (fSettings->AutoConfigure()) owner->DrawString("DHCP enabled", commentPt); else owner->DrawString("DHCP disabled, use static IP address", commentPt); - } else - owner->DrawString("Disabled.", driverPt); + } owner->SetHighColor(oldcolor); owner->SetDrawingMode(mode); @@ -176,12 +155,16 @@ void -InterfaceListItem::_InitIcon() +InterfaceListItem::_Init() { + fSettings = new Settings(Name()); + + // Init icon BBitmap* icon = NULL; - - const char* mediaTypeName = ""; - int media = fSettings->Media(); + + const char* mediaTypeName = NULL; + + int media = fInterface.Media(); printf("%s media = 0x%x\n", Name(), media); switch (IFM_TYPE(media)) { case IFM_ETHER: @@ -190,6 +173,14 @@ case IFM_IEEE80211: mediaTypeName = "wifi"; break; + default: { + BNetworkDevice device(Name()); + if (device.IsWireless()) + mediaTypeName = "wifi"; + else if (device.IsEthernet()) + mediaTypeName = "ether"; + break; + } } image_info info; @@ -207,12 +198,12 @@ size_t size; // Try specific interface icon? const uint8* rawIcon = (const uint8*)resources.LoadResource(B_VECTOR_ICON_TYPE, Name(), &size); - if (!rawIcon) + if (rawIcon == NULL && mediaTypeName != NULL) // Not found, try interface media type? rawIcon = (const uint8*)resources.LoadResource(B_VECTOR_ICON_TYPE, mediaTypeName, &size); - if (!rawIcon) + if (rawIcon == NULL) // Not found, try default interface icon? - rawIcon = (const uint8*)resources.LoadResource(B_VECTOR_ICON_TYPE, "wifi", &size); + rawIcon = (const uint8*)resources.LoadResource(B_VECTOR_ICON_TYPE, "ether", &size); if (rawIcon) { // Now build the bitmap @@ -244,7 +235,7 @@ BListView::AttachedToWindow(); _InitList(); - + start_watching_network( B_WATCH_NETWORK_INTERFACE_CHANGES | B_WATCH_NETWORK_LINK_CHANGES, this); } @@ -298,42 +289,16 @@ status_t InterfacesListView::_InitList() { - SocketOpener socket; - if (socket.InitCheck() != B_OK) - return B_ERROR; + BNetworkRoster& roster = BNetworkRoster::Default(); + BNetworkInterface interface; + uint32 cookie = 0; - // iterate over all interfaces and retrieve minimal status - ifconf config; - config.ifc_len = sizeof(config.ifc_value); - if (ioctl(socket, SIOCGIFCOUNT, &config, sizeof(struct ifconf)) < 0) - return B_ERROR; - - uint32 count = (uint32)config.ifc_value; - if (count == 0) - return B_ERROR; - - void* buffer = malloc(count * sizeof(struct ifreq)); - if (buffer == NULL) - return B_ERROR; - - MemoryDeleter deleter(buffer); - - config.ifc_len = count * sizeof(struct ifreq); - config.ifc_buf = buffer; - if (ioctl(socket, SIOCGIFCONF, &config, sizeof(struct ifconf)) < 0) - return B_ERROR; - - ifreq* interface = (ifreq*)buffer; - MakeEmpty(); - - for (uint32 i = 0; i < count; i++) { - if (strcmp(interface->ifr_name, "loop") != 0) { - AddItem(new InterfaceListItem(interface->ifr_name)); - // printf("Name = %s\n", interface->ifr_name); + while (roster.GetNextInterface(&cookie, interface) == B_OK) { + if (strncmp(interface.Name(), "loop", 4) && interface.Name()[0]) { + AddItem(new InterfaceListItem(interface.Name())); } - interface = (ifreq*)((addr_t)interface + IF_NAMESIZE - + interface->ifr_addr.sa_len); - } + } + return B_OK; } @@ -345,17 +310,17 @@ return B_OK; } -void +void InterfacesListView::_HandleNetworkMessage(BMessage* message) { const char* name; int32 opcode; - + message->PrintToStream(); - + if (message->FindInt32("opcode", &opcode) != B_OK) return; - + if (message->FindString("interface", &name) != B_OK && message->FindString("device", &name) != B_OK) return; @@ -370,14 +335,14 @@ if (item) InvalidateItem(IndexOf(item)); break; - + case B_NETWORK_INTERFACE_ADDED: if (item) InvalidateItem(IndexOf(item)); else AddItem(new InterfaceListItem(name)); break; - + case B_NETWORK_INTERFACE_REMOVED: if (item) { RemoveItem(item); Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h 2011-01-16 16:33:11 UTC (rev 40238) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h 2011-01-17 11:21:12 UTC (rev 40239) @@ -11,18 +11,20 @@ #ifndef INTERFACES_LIST_VIEW_H #define INTERFACES_LIST_VIEW_H -#include <String.h> -#include <ListView.h> -#include <ListItem.h> -#include <Bitmap.h> - #include <net/if.h> #include <net/if_dl.h> #include <net/if_media.h> #include <net/if_types.h> -#include "Setting.h" +#include <Bitmap.h> +#include <ListView.h> +#include <ListItem.h> +#include <NetworkDevice.h> +#include <NetworkInterface.h> +#include <String.h> +#include "Settings.h" + class InterfaceListItem : public BListItem { public: InterfaceListItem(const char* name); @@ -30,17 +32,18 @@ void DrawItem(BView* owner, BRect bounds, bool complete); void Update(BView* owner, const BFont* font); - - inline const char* Name() { return fSettings->Name(); } - inline bool Enabled() { return fSettings->Enabled(); } - inline void SetEnabled(bool enable){ fSettings->Enable(enable); } - inline Setting* GetSetting() { return fSettings; } + inline const char* Name() { return fInterface.Name(); } + inline bool IsDisabled() { return fSettings->IsDisabled(); } + inline void SetDisabled(bool disable){ fSettings->SetDisabled(disable); } + inline Settings* GetSettings() { return fSettings; } + private: - void _InitIcon(); + void _Init(); BBitmap* fIcon; - Setting* fSettings; + BNetworkInterface fInterface; + Settings* fSettings; }; Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile 2011-01-16 16:33:11 UTC (rev 40238) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Jamfile 2011-01-17 11:21:12 UTC (rev 40239) @@ -1,26 +1,37 @@ SubDir HAIKU_TOP src tests kits net preflet InterfacesAddOn ; +SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src apps networkstatus ] ; +SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src preferences network ] ; + UseHeaders [ FDirName $(HAIKU_TOP) src tests kits net preflet ] ; UseHeaders [ FDirName $(HAIKU_TOP) src servers net ] : true ; UsePrivateHeaders net shared ; UseLibraryHeaders agg icon ; -AddResources Interfaces : - InterfacesIcons.rdef + +AddResources Interfaces : + InterfacesIcons.rdef ; -Addon Interfaces : +Addon Interfaces : InterfacesAddOn.cpp InterfacesListView.cpp - Setting.cpp NetworkWindow.cpp + + # from src/preferences/network EthernetSettingsView.cpp - : - be - <nogrist>NetworkSetup - $(TARGET_NETWORK_LIBS) - $(TARGET_LIBSUPC++) + Settings.cpp + + # from src/apps/networkstatus + RadioView.cpp + WirelessNetworkMenuItem.cpp + : + be + <nogrist>NetworkSetup + $(TARGET_NETWORK_LIBS) + libbnetapi.so + $(TARGET_LIBSUPC++) + $(HAIKU_LOCALE_LIBS) libicon.a libagg.a ; - Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.cpp 2011-01-16 16:33:11 UTC (rev 40238) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.cpp 2011-01-17 11:21:12 UTC (rev 40239) @@ -4,7 +4,7 @@ * * Author: * Andre Alves Garzia, andre@xxxxxxxxxxxxxxx - * Fredrik Modéen + * Fredrik Modéen */ #include "NetworkWindow.h" @@ -13,18 +13,19 @@ #include <GroupLayout.h> #include "EthernetSettingsView.h" +#include "Settings.h" -NetworkWindow::NetworkWindow(Setting* setting) +NetworkWindow::NetworkWindow(Settings* settings) : BWindow(BRect(50, 50, 269, 302), "Network", B_TITLED_WINDOW, B_NOT_RESIZABLE | B_ASYNCHRONOUS_CONTROLS | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS) { SetLayout(new BGroupLayout(B_HORIZONTAL)); - fEthernetView = new EthernetSettingsView(setting); + fEthernetView = new EthernetSettingsView(); // settings); GetLayout()->AddView(fEthernetView); - - SetTitle(setting->Name()); + + SetTitle(settings->Name()); } Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.h =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.h 2011-01-16 16:33:11 UTC (rev 40238) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/NetworkWindow.h 2011-01-17 11:21:12 UTC (rev 40239) @@ -4,7 +4,7 @@ * * Author: * Andre Alves Garzia, andre@xxxxxxxxxxxxxxx - * Fredrik Modéen + * Fredrik Modéen */ #ifndef NETWORK_WINDOW_H #define NETWORK_WINDOW_H @@ -12,12 +12,13 @@ #include <Window.h> -#include "EthernetSettingsView.h" +class Settings; +class EthernetSettingsView; class NetworkWindow : public BWindow { public: - NetworkWindow(Setting* setting); + NetworkWindow(Settings* setting); virtual ~NetworkWindow(); virtual bool QuitRequested(); virtual void MessageReceived(BMessage* mesage);