[haiku-commits] r37136 - haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn

  • From: philippe.houdoin@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 15 Jun 2010 00:15:38 +0200 (CEST)

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;
 };
 


Other related posts:

  • » [haiku-commits] r37136 - haiku/trunk/src/tests/kits/net/preflet/InterfacesAddOn - philippe . houdoin