⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myview.cpp

📁 Linux/Unix下无限网卡配置和管理程序
💻 CPP
字号:
#include <klocale.h>#include <kprocess.h>#include <kstandarddirs.h>#include <kmessagebox.h>#include "myview.h"#include <qpushbutton.h>#include <qlayout.h>#include <qvariant.h>#include <qtooltip.h>#include <qwhatsthis.h>#include <qpixmap.h>#include <qpainter.h>#include <qlabel.h>#include <qvbox.h>#include <qfile.h>#include <netinet/in.h>#include <arpa/inet.h>#include <time.h>bool ALREADY_WARNED=false;intget_range_info (int skfd, const char *ifname, iwrange * range){  struct iwreq wrq;  char buffer[sizeof (iwrange) * 2];	/* Large enough */  memset (buffer, 0, sizeof (range));  strncpy (wrq.ifr_name, ifname, IFNAMSIZ);  wrq.u.data.pointer = (caddr_t) buffer;  wrq.u.data.length = 0;  wrq.u.data.flags = 0;  if (ioctl (skfd, SIOCGIWRANGE, &wrq) < 0)    return (-1);  memcpy ((char *) range, buffer, sizeof (iwrange));  if ((WIRELESS_EXT > 10) && (wrq.u.data.length >= 300))    {#if WIRELESS_EXT > 10      if ((range->we_version_compiled != WIRELESS_EXT)&&(!ALREADY_WARNED))	{	  fprintf (stderr, "Warning : Device %s has been compiled with version %d\n", ifname, range->we_version_compiled);	  fprintf (stderr, "of Wireless Extension, while we are using version %d.\n", WIRELESS_EXT);	  fprintf (stderr, "Some things may be broken...\n\n");	  ALREADY_WARNED=true;	}#endif /* WIRELESS_EXT > 10 */    }  else    {      if ((wrq.u.data.length != sizeof (iwrange))&&(!ALREADY_WARNED))	{	  fprintf (stderr, "Warning : Device %s has been compiled with a different version\n", ifname);	  fprintf (stderr, "of Wireless Extension than ours (we are using version %d).\n", WIRELESS_EXT);	  fprintf (stderr, "Some things may be broken...\n\n");	  ALREADY_WARNED=true;	}    }  return (0);}intiw_getstats (const char *ifname, iwstats * stats){  FILE *f = fopen ("/proc/net/wireless", "r");  char buf[256];  char *bp;  int t;  if (f == NULL)    return -1;  /* Loop on all devices */  while (fgets (buf, 255, f))    {      bp = buf;      while (*bp && isspace (*bp))	bp++;      /* Is it the good device ? */      if (strncmp (bp, ifname, strlen (ifname)) == 0 && bp[strlen (ifname)] == ':')	{	  /* Skip ethX: */	  bp = strchr (bp, ':');	  bp++;	  /* -- status -- */	  bp = strtok (bp, " ");	  sscanf (bp, "%X", &t);	  stats->status = (unsigned short) t;	  /* -- link quality -- */	  bp = strtok (NULL, " ");	  if (strchr (bp, '.') != NULL)	    stats->qual.updated |= 1;	  sscanf (bp, "%d", &t);	  stats->qual.qual = (unsigned char) t;	  /* -- signal level -- */	  bp = strtok (NULL, " ");	  if (strchr (bp, '.') != NULL)	    stats->qual.updated |= 2;	  sscanf (bp, "%d", &t);	  stats->qual.level = (unsigned char) t;	  /* -- noise level -- */	  bp = strtok (NULL, " ");	  if (strchr (bp, '.') != NULL)	    stats->qual.updated += 4;	  sscanf (bp, "%d", &t);	  stats->qual.noise = (unsigned char) t;	  /* -- discarded packets -- */	  bp = strtok (NULL, " ");	  sscanf (bp, "%d", &stats->discard.nwid);	  bp = strtok (NULL, " ");	  sscanf (bp, "%d", &stats->discard.code);	  bp = strtok (NULL, " ");	  sscanf (bp, "%d", &stats->discard.misc);	  fclose (f);	  return 0;	}    }  fclose (f);  return -1;}intget_info (int skfd, const char *ifname, struct wireless_info *info){  struct iwreq wrq;  memset ((char *) info, 0, sizeof (struct wireless_info));  /* Get wireless name */  strncpy (wrq.ifr_name, ifname, IFNAMSIZ);  if (ioctl (skfd, SIOCGIWNAME, &wrq) < 0)    /* If no wireless name : no wireless extensions */    return (-1);  else    strcpy (info->name, wrq.u.name);  /* Get frequency / channel */  strncpy (wrq.ifr_name, ifname, IFNAMSIZ);  if (ioctl (skfd, SIOCGIWFREQ, &wrq) >= 0)    {      info->has_freq = 1;    }  /* Get operation mode */  strncpy (wrq.ifr_name, ifname, IFNAMSIZ);  if (ioctl (skfd, SIOCGIWMODE, &wrq) >= 0)    {      if (wrq.u.mode < 6)	info->has_mode = 1;      info->mode = wrq.u.mode;    }  /* get range info */  if (get_range_info (skfd, ifname, &(info->range)) >= 0)    info->has_range = 1;  /* get network name */  strncpy (wrq.ifr_name, ifname, IFNAMSIZ);  wrq.u.essid.pointer = (caddr_t) info->essid;  wrq.u.essid.length = 0;  wrq.u.essid.flags = 0;  if (ioctl (skfd, SIOCGIWESSID, &wrq) >= 0)    {      info->has_essid = 1;      info->essid_on = wrq.u.data.flags;    };  return 0;};myview::myview (int socketnumber, bool allow1, bool allow2, bool allow3, QWidget * parent, const char *name, WFlags fl):QWidget (parent, name, fl){  if (!name)    setName ("KWiFiManager Kicker Applet");  resize (178, 48);  socket = socketnumber;  KStandardDirs finder;  kdedir = finder.findResourceDir ("data", "kwifimanager/pics/no_card.png");  kdedir += "kwifimanager/pics/";  setMaximumSize (QSize (32767, 48));  setMinimumSize (QSize (16, 16));  setSizePolicy (QSizePolicy ((QSizePolicy::SizeType) 5, (QSizePolicy::SizeType) 5, sizePolicy ().hasHeightForWidth ()));  setCaption (i18n ("Status Bar"));  infocontainer = new wireless_info;  infocontainer2 = new iwstats;  standardfarbe = backgroundColor ();  blink = false;  zeit = 0;  allow_flash_low = allow1;  allow_flash_crit = allow2;  allow_flash_dropped = allow3;  offline = new QPixmap (kdedir + "offline.png");  excellent = new QPixmap (kdedir + "excellent.png");  good = new QPixmap (kdedir + "good.png");  marginal = new QPixmap (kdedir + "marginal.png");  oor_down = new QPixmap (kdedir + "oor_down.png");  oor_minimum = new QPixmap (kdedir + "oor_minimum.png");}voidmyview::paintEvent (QPaintEvent *){  QFile procnetdev ("/proc/net/dev");  procnetdev.open (IO_ReadOnly);  QStringList liste;  QString temp = "";  QString temptrash = "X";  int end = 1;  while ((end != 0) && (temp != temptrash))    {      end = procnetdev.readLine (temp, 9999);      temptrash = temp;      temp.truncate (temp.find (":") > 0 ? temp.find (":") : 0);      temp = temp.stripWhiteSpace ();      if ((end != 0) && (temp != ""))	liste += temp;    };  for (QStringList::Iterator it = liste.begin (); it != liste.end (); ++it)    {      if (get_info (socket, *it, infocontainer) != -1)	{	  iw_getstats (*it, infocontainer2);	  interfc = *it;	  break;	};      interfc = "";    };  int tempstrength = infocontainer2->qual.qual;  if ((infocontainer->mode==2) && (infocontainer->has_range==1) && (infocontainer->range.max_qual.qual!=0))    tempstrength = (int) tempstrength *92 / (int) infocontainer->range.max_qual.qual;  QPainter *strengthpainter = new QPainter (this);  if (infocontainer->has_freq == 0)    {      strengthpainter->drawPixmap (0, 0, *offline);      if (blink) { setBackgroundColor (standardfarbe); blink=false;};    }  else if (infocontainer->mode == 1)    {      strengthpainter->drawPixmap (0, 0, *offline);      if (blink) { setBackgroundColor (standardfarbe); blink=false;};    }  else if (tempstrength > 25)    {      strengthpainter->drawPixmap (0, 0, *excellent);      if (blink) { setBackgroundColor (standardfarbe); blink=false;};    }  else if (tempstrength > 15)    {      strengthpainter->drawPixmap (0, 0, *good);      if (blink) { setBackgroundColor (standardfarbe); blink=false;};    }  else if (tempstrength > 5)    {      if ((zeit!=time(0)) && (blink))	{	  setBackgroundColor (standardfarbe);	  zeit=time(0);	  blink = false;	}      else if ((zeit!=time(0)) && (allow_flash_low))	{	  setBackgroundColor (QColor (255, 255, 0));	  zeit=time(0);	  blink = true;	};      strengthpainter->drawPixmap (0, 0, *marginal);    }  else if (tempstrength > 0)    {      if ((zeit!=time(0)) && (blink))	{	  setBackgroundColor (standardfarbe);	  zeit=time(0);	  blink = false;	}      else if ((zeit!=time(0)) && (allow_flash_crit))	{	  setBackgroundColor (QColor (255, 128, 0));	  zeit=time(0);	  blink = true;	};      strengthpainter->drawPixmap (0, 0, *oor_minimum);    }  else if ((tempstrength == 0) && (infocontainer->mode == 2))    {      if ((zeit!=time(0)) && (blink))	{	  setPaletteBackgroundColor (standardfarbe);	  zeit=time(0);	  blink = false;	}      else if ((zeit!=time(0)) && (allow_flash_dropped))	{	  setPaletteBackgroundColor (QColor (255, 0, 0));	  blink = true;	};      strengthpainter->drawPixmap (0, 0, *oor_down);    }  else    {      strengthpainter->drawPixmap (0, 0, *offline);      if (blink) { setBackgroundColor (standardfarbe); blink=false; };    };  QString sstrength2 = "%1";  if (infocontainer->has_freq == 1)    {      if (infocontainer->mode == 2)	{	  sstrength2 = sstrength2.arg (tempstrength);	}      else	sstrength2 = sstrength2.arg (i18n ("N/A"));    }  else    sstrength2 = sstrength2.arg (i18n ("N/A"));  strengthpainter->drawText (0, 38, sstrength2);  delete strengthpainter;}voidmyview::mousePressEvent (QMouseEvent *aktion){  if (aktion->button()==QMouseEvent::LeftButton) {    KProcess launch;    launch << "kwifimanager";    launch.start (KProcess::DontCare);  };}voidmyview::enterEvent (QEvent *){  QString IP = "Local IP: %1";  QString NET = "Network : %1";  struct sockaddr *sa;  struct sockaddr_in *sin;  struct ifreq ifr;  strncpy (ifr.ifr_name, interfc.latin1 (), IFNAMSIZ);  if (ioctl (socket, SIOCGIFADDR, &ifr) == -1)    {      IP = IP.arg (i18n ("unavailable"));    }  else    {      sa = (struct sockaddr *) &(ifr.ifr_addr);      if (sa->sa_family == AF_INET)	{	  sin = (struct sockaddr_in *) sa;	  IP = IP.arg ((QString) inet_ntoa (sin->sin_addr));	}      else	{	  IP = IP.arg (i18n ("unavailable"));	};    };  NET = NET.arg (infocontainer->essid);  QToolTip::add (this, IP + "\n" + NET);}/* *  Destroys the object and frees any allocated resources */myview::~myview (){  delete offline;  delete excellent;  delete good;  delete marginal;  delete oor_down;  delete oor_minimum;  // no need to delete child widgets, Qt does it all for us}#include "myview.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -