networkinterface.cpp

00001 #include <gui/GUI.h>
00002 #include <os/OS.h>
00003 
00004 using namespace SkyGI;
00005 
00006 class MyNetworkInterface : public View
00007 {
00008 public:
00009         MyNetworkInterface(Window *pParent, const Rect &rFrame, unsigned int nWindowLayoutFlags);
00010 
00011         void Select(ListViewRow* pRow, const InputEvent& nInputEvent);
00012 
00013         TextView *pTextView;
00014         ListView *pList;
00015 };
00016         
00017 void MyNetworkInterface::Select(ListViewRow* pRow, const InputEvent& nInputEvent)
00018 {
00019         int i;
00020         NetworkInterfaceLink nLink;
00021         NetworkInterface pInterface;
00022 
00023         pTextView->Clear();
00024 
00025         if (pInterface.SetTo(((ListViewStringNode*)pRow->GetNode(0))->GetText()) == false)
00026         {
00027                 pTextView->Set("Invalid network interface");
00028                 return;
00029         }
00030 
00031         pTextView->Append(String("DeviceName: ") + pInterface.GetName(), true);
00032         pTextView->Append(String("MAC: ") + pInterface.GetEthernetAddress().GetString(), true);
00033         pTextView->Append(String("IP: ") + pInterface.GetIP().GetString(), true);
00034         pTextView->Append(String("Netmask: ") + pInterface.GetNetMask().GetString(), true);
00035         pTextView->Append(String("Gateway: ") + pInterface.GetDefaultGateway().GetString(), true);
00036         
00037         pTextView->Append(String("Loopback: "), true);
00038         if (pInterface.IsLoopBack())
00039                 pTextView->Append("Yes");
00040         else
00041                 pTextView->Append("No");
00042 
00043         pTextView->Append(String("Running: "), true);
00044         if (pInterface.IsRunning())
00045                 pTextView->Append("Yes");
00046         else
00047                 pTextView->Append("No");
00048 
00049         pTextView->Append(String("Link Status: "), true);
00050         nLink = pInterface.GetLink();
00051         switch (nLink)
00052         {
00053                 case NETWORK_INTERFACE_LINK_UNKNOWN: pTextView->Append("Unknown"); break;
00054                 case NETWORK_INTERFACE_LINK_DISCONNECT: pTextView->Append("Disconnected"); break;
00055                 case NETWORK_INTERFACE_LINK_CONNECTED_10MBIT: pTextView->Append("Connected (10MBIT)"); break;
00056                 case NETWORK_INTERFACE_LINK_CONNECTED_100MBIT: pTextView->Append("Connected (100MBIT)"); break;
00057                 case NETWORK_INTERFACE_LINK_CONNECTED_1000MBIT: pTextView->Append("Connected (1000MBIT)"); break;
00058                 case NETWORK_INTERFACE_LINK_CONNECTED_UNKNOWN: pTextView->Append("Connected (unknown media)"); break;
00059         }
00060 
00061         char str[255];
00062 
00063         std::vector<NetworkRoute> pList = NetworkRoutingTable::Get();
00064         pTextView->Append("", true);
00065         pTextView->Append("Routing table:", true);
00066         sprintf(str, "%d entries", pList.size());
00067         pTextView->Append(str, true);
00068 
00069         for (i=0;i<pList.size();i++)
00070         {
00071                 pTextView->Append("Target: ", true);
00072                 pTextView->Append(pList[i].GetTarget());
00073                 pTextView->Append(" Mask: ");
00074                 pTextView->Append(pList[i].GetNetmask());
00075                 pTextView->Append(" Gateway: ");
00076                 pTextView->Append(pList[i].GetGateway());
00077                 pTextView->Append(" Device: ");
00078                 pTextView->Append(pList[i].GetNetworkDevice());
00079                 pTextView->Append(" Metric: ");
00080                 sprintf(str, "%d",pList[i].GetMetric());
00081                 pTextView->Append(str);
00082         }
00083 
00084         //NetworkRoute r("1.1.1.1", "2.2.2.2", "3.3.3.3", "rtl0", 5);
00085         //if (NetworkRoutingTable::Add(r) == false)
00086         //      printf("failed\n");
00087 
00088 
00089 
00090         pTextView->Append("", true);
00091 
00092 }
00093 
00094 MyNetworkInterface::MyNetworkInterface(Window *pParent, const Rect &rFrame, unsigned int nWindowLayoutFlags) : View(pParent, rFrame, nWindowLayoutFlags)
00095 {
00096         std::vector<String> pNetworkInterfaceList;
00097 
00098         pList = new ListView(this, Rect(0,0,0, 100), WINDOW_LAYOUT_SAME_WIDTH);
00099 
00100         pTextView = new TextView(this, Rect(0,100,0,Height()), WINDOW_LAYOUT_FOLLOW_BOTTOM | WINDOW_LAYOUT_SAME_WIDTH);
00101 
00102         pNetworkInterfaceList = NetworkInterfaceList::Get();
00103 
00104         for (int i=0;i<pNetworkInterfaceList.size();i++)
00105         {
00106                 ListViewRow *pRow = new ListViewRow();
00107                 pRow->Append(new ListViewStringNode(pNetworkInterfaceList[i]));
00108                 pList->Append(pRow);
00109 //              
00110         }
00111 
00112         pList->Sort();
00113         
00114         pList->Selected.Connect(this, &MyNetworkInterface::Select);
00115 }
00116 
00117 void NetworkInterfaceTest()
00118 {
00119         Rect r(Point(100, 100), Point(400, 440));
00120 
00121         ApplicationWindow* pApplicationWindow = new ApplicationWindow(r, "NetworkInterface", WINDOW_LAYOUT_NOTHING, APPLICATION_WINDOW_NO_VIEW);
00122         
00123         pApplicationWindow->GetTitleWindow()->SetFlags( (TitleWindowFlags)(pApplicationWindow->GetTitleWindow()->GetFlags() ));
00124         pApplicationWindow->AttachView(new MyNetworkInterface(pApplicationWindow, pApplicationWindow->GetClientRect(), WINDOW_LAYOUT_NOTHING));
00125         pApplicationWindow->Show();
00126 }
00127 

Generated on Thu Dec 13 18:13:10 2007 for SkyGI by  doxygen 1.5.1-p1