Author: phoudoin Date: 2010-06-15 00:15:38 +0200 (Tue, 15 Jun 2010) New Revision: 37136 Changeset: http://dev.haiku-os.org/changeset/37136/haiku Modified: 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/Setting.cpp haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.h Log: Implemented interfaces monitoring and disabled state introduced last week. Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp 2010-06-14 21:43:29 UTC (rev 37135) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.cpp 2010-06-14 22:15:38 UTC (rev 37136) @@ -80,9 +80,8 @@ InterfaceListItem::InterfaceListItem(const char* name) : BListItem(0, false), - fEnabled(true), fIcon(NULL), - fSetting(new Setting(name)) + fSettings(new Setting(name)) { _InitIcon(); } @@ -143,7 +142,7 @@ BPoint commentPt = iconPt + BPoint(32+8, fntheight*3); drawing_mode mode = owner->DrawingMode(); - if (fEnabled) + if (fSettings->Enabled()) owner->SetDrawingMode(B_OP_OVER); else { owner->SetDrawingMode(B_OP_ALPHA); @@ -153,23 +152,21 @@ owner->DrawBitmapAsync(fIcon, iconPt); - if (!fEnabled) + if (!fSettings->Enabled()) owner->SetHighColor(tint_color(oldcolor, B_LIGHTEN_1_TINT)); owner->SetFont(be_bold_font); owner->DrawString(Name(), namePt); owner->SetFont(be_plain_font); - if (fEnabled) { + if (fSettings->Enabled()) { BString str("Enabled, IPv4 address: "); - str << fSetting->IP(); + str << fSettings->IP(); owner->DrawString(str.String(), driverPt); - if (fSetting->AutoConfigured()) + if (fSettings->AutoConfigured()) owner->DrawString("DHCP enabled", commentPt); else owner->DrawString("DHCP disabled, use static IP address", commentPt); - - } else owner->DrawString("Disabled.", driverPt); @@ -184,7 +181,7 @@ BBitmap* icon = NULL; const char* mediaTypeName = ""; - int media = fSetting->Media(); + int media = fSettings->Media(); printf("%s media = 0x%x\n", Name(), media); switch (IFM_TYPE(media)) { case IFM_ETHER: @@ -273,8 +270,7 @@ { switch (message->what) { case B_NETWORK_MONITOR: - message->PrintToStream(); - _UpdateList(); + _HandleNetworkMessage(message); break; default: @@ -331,10 +327,10 @@ MakeEmpty(); for (uint32 i = 0; i < count; i++) { - // if (strcmp(interface->ifr_name, "loop") != 0) { + if (strcmp(interface->ifr_name, "loop") != 0) { AddItem(new InterfaceListItem(interface->ifr_name)); // printf("Name = %s\n", interface->ifr_name); - // } + } interface = (ifreq*)((addr_t)interface + IF_NAMESIZE + interface->ifr_addr.sa_len); } @@ -349,3 +345,44 @@ return B_OK; } +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; + + InterfaceListItem* item = FindItem(name); + if (!item) + printf("InterfaceListItem %s not found!\n", name); + + switch (opcode) { + case B_NETWORK_INTERFACE_CHANGED: + case B_NETWORK_DEVICE_LINK_CHANGED: + 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); + delete item; + } + break; + } +} Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h 2010-06-14 21:43:29 UTC (rev 37135) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/InterfacesListView.h 2010-06-14 22:15:38 UTC (rev 37136) @@ -31,17 +31,16 @@ void DrawItem(BView* owner, BRect bounds, bool complete); void Update(BView* owner, const BFont* font); - inline const char* Name() { return fSetting->Name(); } - inline bool Enabled() { return fEnabled; } - inline void SetEnabled(bool enable){ fEnabled = enable; } - inline Setting* GetSetting() { return fSetting; } + 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; } private: void _InitIcon(); - bool fEnabled; BBitmap* fIcon; - Setting* fSetting; + Setting* fSettings; }; @@ -62,6 +61,7 @@ private: status_t _InitList(); status_t _UpdateList(); + void _HandleNetworkMessage(BMessage* message); }; #endif /*INTERFACES_LIST_VIEW_H*/ Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.cpp =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.cpp 2010-06-14 21:43:29 UTC (rev 37135) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.cpp 2010-06-14 22:15:38 UTC (rev 37136) @@ -34,7 +34,8 @@ Setting::Setting(const char *name) : - fAuto(true) + fAuto(true), + fEnabled(false) { fSocket = socket(AF_INET, SOCK_DGRAM, 0); fName = name; @@ -149,6 +150,7 @@ flags = request.ifr_flags; fAuto = (flags & IFF_AUTO_CONFIGURED) != 0; + fEnabled = (flags & IFF_UP) != 0; if (ioctl(fSocket, SIOCGIFMEDIA, &request, sizeof(struct ifreq)) == 0) fMedia = request.ifr_media; Modified: haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.h =================================================================== --- haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.h 2010-06-14 21:43:29 UTC (rev 37135) +++ haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn/Setting.h 2010-06-14 22:15:38 UTC (rev 37136) @@ -21,12 +21,14 @@ void SetGateway(BString ip) {fGateway = ip; } void SetNetmask(BString ip) {fNetmask = ip; } void SetAutoConfigure(bool t) {fAuto = t; } + void Enable(bool enable) { fEnabled = enable; } const char* IP() {return fIP.String(); } const char* Gateway() {return fGateway.String(); } const char* Netmask() {return fNetmask.String(); } const char* Name() {return fName.String(); } bool AutoConfigured() {return fAuto; } + bool Enabled() { return fEnabled; } int Media() { return fMedia; } BObjectList<BString> fNameservers; void ReadConfiguration(); @@ -41,6 +43,7 @@ BString fNetmask; BString fName; bool fAuto; + bool fEnabled; int fMedia; };