source: src-qt4/pc-netmanager/src/wificonfig/wificonfigwidgetbase.cpp @ 0cfe72f

9.1-release9.2-releasereleng/10.0releng/10.0.1
Last change on this file since 0cfe72f was 0cfe72f, checked in by Kris Moore <kris@…>, 13 months ago

Add all the changes for related using of split pcbsd-utils libs

  • Property mode set to 100644
File size: 41.0 KB
Line 
1/****************************************************************************
2** ui.h extension file, included from the uic-generated form implementation.
3**
4** If you want to add, delete, or rename functions or slots, use
5** Qt Designer to update this file, preserving your code.
6**
7** You should not define a constructor or destructor in this file.
8** Instead, write your code in functions called init() and destroy().
9** These will automatically be called by the form's constructor and
10** destructor.
11*****************************************************************************/
12#include <QFile>
13#include <QSettings>
14#include <QTextStream>
15#include <QDebug>
16#include <QInputDialog>
17#include <QXmlStreamReader>
18
19#include <pcbsd-utils.h>
20#include <pcbsd-netif.h>
21#include <unistd.h>
22
23#include "wificonfigwidgetbase.h"
24#include "ui_wificonfigwidgetbase.h"
25
26QString saveSSID; //need this to pass to a couple slots rather than requiring a currently available wifi
27
28void wificonfigwidgetbase::slotClose()
29{
30    exit(0);
31}
32
33void wificonfigwidgetbase::slotApply()
34{
35    QString tmp;
36    QString ifConfigLine;
37    if ( ! pushApply->isEnabled() ) {
38        return;
39    }
40
41    // Get ifConfig Line
42    if (! checkDHCP->isChecked() )
43    {
44        if ( lineIP->text() == "..." || lineNetmask->text() == "..." )
45        {
46            QMessageBox::information( this, tr("Missing Fields"),
47                    tr("You must enter an IP and Netmask to continue!\n") );
48            return;
49        }
50       
51        if ( ! pcbsd::Utils::validateIPV4(lineIP->text()) ) {
52            QMessageBox::warning( this, tr("Warning"),
53            tr("IP Address is out of range! (") + lineIP->text() + tr(") Fields must be between 0-255.") );
54           return;
55               }
56       
57        if ( ! pcbsd::Utils::validateIPV4(lineNetmask->text()) ) {
58            QMessageBox::warning( this, tr("Warning"),
59            tr("Netmask is out of range! (") + lineNetmask->text() + tr(") Fields must be between 0-255.") );
60           return;
61               }
62       
63        if ( checkMAC->isChecked() )
64            ifConfigLine=lineIP->text() + " netmask " + lineNetmask->text();
65        else
66            ifConfigLine=lineIP->text() + " netmask " + lineNetmask->text() + " ether " + lineMAC->text();
67
68    } else {
69        ifConfigLine="SYNCDHCP";
70    } 
71
72    // See if we need to enable a country code
73    if ( groupCountryCode->isChecked() )
74    {
75       tmp = comboCountryCode->currentText().section("(", 1, 1);
76       tmp = tmp.section(")", 0, 0);
77       ifConfigLine+=" country " + tmp;
78    }
79
80    // Now create the wpa_supplicant file based on saved configuration
81    updateWPASupp();
82
83    // Only updating WPA supp?
84    if (WPAONLY) 
85       return;
86   
87    // If the user disabled the device, do so now
88    if ( checkDisableWireless->isChecked() )
89    {
90         pcbsd::Utils::setConfFileValue( "/etc/rc.conf", "ifconfig_" + DeviceName, "", -1);
91         runCommand("ifconfig " + DeviceName + " down");
92         pushApply->setEnabled(FALSE);
93         return;
94    } 
95
96    // Save the config
97    pcbsd::Utils::setConfFileValue( "/etc/rc.conf", "ifconfig_lagg0", "", -1);
98    pcbsd::Utils::setConfFileValue( "/etc/rc.conf", "ifconfig_" + DeviceName, \
99         "ifconfig_" + DeviceName + "=\"WPA " + ifConfigLine + "\"", -1);
100
101    // Check if we need to enable LAGG
102    if ( usingLagg )
103      NetworkInterface::enableLagg(DeviceName);
104
105    // Set perms on wpa_supplicant.conf
106    system("chmod 600 /etc/wpa_supplicant.conf");
107
108    // Restart the network
109    buttonCancel->setEnabled(false);
110    pcbsd::Utils::restartNetworking();
111
112    buttonCancel->setEnabled(true);
113    pushApply->setEnabled(FALSE);
114}
115
116
117void wificonfigwidgetbase::updateWPASupp()
118{
119    bool listEmpty = false;
120    QString tmp;
121
122    QFile fileout( "/etc/wpa_supplicant.conf" );
123    if ( fileout.open( QIODevice::WriteOnly ) ) {
124       QTextStream streamout( &fileout );
125
126
127       // Loop through all the devices we have now
128       for(int curItem=0; curItem < 145; curItem++)
129       {
130         if ( SSIDList[curItem].isEmpty() ){
131           if(curItem==0){ listEmpty=true; }
132           break;
133         }
134         
135         // Fix to prevent kernel panic on net restart
136         if ( curItem == 0 )
137           streamout << "ctrl_interface=/var/run/wpa_supplicant\n\n";
138
139         if ( WPAONLY ) {
140           streamout << "ap_scan=0\n";
141           streamout << "fast_reauth=0\n";
142           streamout << "network={\n ssid=\"" + SSIDList[curItem] + "\"\n";
143         } else {
144           if ( BSSID[curItem] )
145             streamout << "network={\n bssid=" + SSIDList[curItem] + "\n";
146           else
147             streamout << "network={\n ssid=\"" + SSIDList[curItem] + "\"\n";
148         }
149       
150         streamout << " priority=" << 145 - curItem << "\n";
151
152         if ( ! WPAONLY )
153           streamout << " scan_ssid=1\n";
154
155         if ( SSIDEncType[curItem] == NO_ENCRYPTION )
156         {
157            streamout << " key_mgmt=NONE\n";
158         } else if (SSIDEncType[curItem] == WEP_ENCRYPTION ) {
159           // Ensure we don't end up with invalid key index
160           if ( WEPIndex[curItem] !=0 && WEPIndex[curItem] !=1 && WEPIndex[curItem] !=2 && WEPIndex[curItem] !=3 )
161              WEPIndex[curItem] = 0;
162         
163           streamout << " key_mgmt=NONE\n";
164           streamout << " wep_tx_keyidx=" + tmp.setNum(WEPIndex[curItem]) + "\n";
165           // Check if we are using a plaintext WEP or not
166           if ( WEPHex[curItem] )
167             streamout << " wep_key" + tmp.setNum(WEPIndex[curItem]) + "=\"" + WEPKey[curItem] + "\"\n";
168           else
169             streamout << " wep_key" + tmp.setNum(WEPIndex[curItem]) + "=\"" + WEPKey[curItem] + "\"\n";
170
171         } else if (SSIDEncType[curItem] == WPA_ENCRYPTION ) {
172
173            streamout << " psk=\"" + WPAPersonalKey[curItem] + "\"\n"; 
174
175         } else if (SSIDEncType[curItem] == WPAE_ENCRYPTION ) {
176            QString keyType;
177            if ( WPAEKeyMgmt[curItem] == KEYWPAEAP )
178               keyType="WPA-EAP";
179            if ( WPAEKeyMgmt[curItem] == KEY8021X )
180               keyType="IEEE8021X";
181
182            if ( WPAEType[curItem] == 1) {
183              streamout << " proto=RSN\n key_mgmt=" << keyType << "\n eap=TLS\n";
184              streamout << " identity=\"" + WPAEIdent[curItem] + "\"\n";
185              if ( ! WPAECACert[curItem].isEmpty() )
186                streamout << " ca_cert=\"" + WPAECACert[curItem] + "\"\n";
187              if ( ! WPAEClientCert[curItem].isEmpty() )
188                streamout << " client_cert=\"" + WPAEClientCert[curItem] + "\"\n";
189              streamout << " private_key=\"" + WPAEPrivKeyFile[curItem] + "\"\n";
190              streamout << " private_key_password=\"" + WPAEPassword[curItem] + "\"\n";
191
192            } else if (WPAEType[curItem] == 2) {
193              streamout << " proto=RSN\n key_mgmt=" << keyType << "\n eap=TTLS\n";
194              streamout << " identity=\"" + WPAEIdent[curItem] + "\"\n";
195              streamout << " password=\"" + WPAEPassword[curItem] + "\"\n";
196              if ( ! WPAECACert[curItem].isEmpty() )
197                streamout << " ca_cert=\"" + WPAECACert[curItem] + "\"\n";
198              streamout << " phase2=\"auth=MD5\"\n";
199         
200            } else if (WPAEType[curItem] == 3) {
201              streamout << " proto=RSN\n key_mgmt=" << keyType << "\n eap=PEAP\n";
202              streamout << " identity=\"" + WPAEIdent[curItem] + "\"\n";
203              streamout << " password=\"" + WPAEPassword[curItem] + "\"\n";
204              if ( ! WPAECACert[curItem].isEmpty() )
205                streamout << " ca_cert=\"" + WPAECACert[curItem] + "\"\n";
206              streamout << " phase1=\"peaplabel=0\"\n";
207              streamout << " phase2=\"auth=MSCHAPV2\"\n";
208            }
209         }
210
211         streamout << "}\n\n";
212       } // End of for loop
213
214       fileout.close();
215    } 
216
217    // If no networks, clear out WPA supplicant.conf and reset rc.conf
218    if ( listEmpty  && ! WPAONLY ){
219       fileout.remove();
220       pcbsd::Utils::setConfFileValue( "/etc/rc.conf", "ifconfig_lagg0", "", -1);
221       pcbsd::Utils::setConfFileValue( "/etc/rc.conf", "ifconfig_" + DeviceName, "ifconfig_" + DeviceName + "=\"SYNCDHCP\"");
222    } 
223
224}
225
226
227void wificonfigwidgetbase::slotCheckDHCPBox()
228{
229   if ( checkDHCP->isChecked() ) {
230        groupBoxIP->setEnabled(FALSE);
231   } else {
232        groupBoxIP->setEnabled(TRUE);
233   }
234   
235    pushApply->setEnabled(TRUE);
236}
237
238
239// Function which is called at the program init
240void wificonfigwidgetbase::setDevice( QString Device )
241{ 
242   
243  // Connect our add / remove buttons for wifi
244  connect( pushDown, SIGNAL( clicked() ), this, SLOT( slotMoveDown() ) ); 
245  connect( pushUp, SIGNAL( clicked() ), this, SLOT( slotMoveUp() ) ); 
246  connect( pushAddWifi, SIGNAL( clicked() ), this, SLOT( slotAddNewProfile() ) ); 
247  connect( pushEditWifi, SIGNAL( clicked() ), this, SLOT( slotEditProfile() ) ); 
248  connect( pushRemoveWifi, SIGNAL( clicked() ), this, SLOT( slotRemoveProfile() ) ); 
249  connect( pushRescan, SIGNAL( clicked() ), this, SLOT( slotRescan() ) );
250  connect( pushAddHidden, SIGNAL( clicked() ), this, SLOT( slotAddHiddenProfile() ) );
251  connect( checkDHCP, SIGNAL( clicked() ), this, SLOT( slotCheckDHCPBox() ) );
252  connect( groupCountryCode, SIGNAL( clicked() ), this, SLOT( slotCheckGlobalText() ) );
253
254  // Save the device name for later
255  DeviceName = Device;
256
257  // Center the dialog window
258  QDesktopWidget *d = QApplication::desktop();
259  move(d->width() / 3, d->height() / 4);
260 
261  // Connect the slot to refresh
262  QTimer::singleShot(100,  this,  SLOT(slotFinishLoading() ) );
263 
264  // Check if we are using the lagg0 device
265  QSettings settings("PCBSD");
266  usingLagg = settings.value("/pc-netmanager/useLagg", false).toBool();
267 
268  //Load the available wifi access points
269  slotRescan();
270
271}
272
273void wificonfigwidgetbase::loadCountryCodes()
274{
275  QFile file("/etc/regdomain.xml");
276  if (!file.open(QFile::ReadOnly | QFile::Text))
277  return;
278
279  QXmlStreamReader reader;
280  QString code, name;
281  int comboNum = 0;
282
283  reader.setDevice(&file);
284  reader.readNext();
285  while (!reader.atEnd()) {
286      if (reader.isStartElement()) {
287          if (reader.name() == "country") {
288             name="";
289             code = reader.attributes().value("id").toString();
290             while (!reader.atEnd()) {
291                 if (reader.isEndElement() && reader.name() == "country")
292                    break;
293                 if (reader.isStartElement() && reader.name() == "name") {
294                    name = reader.readElementText();
295                 }
296                 reader.readNext();
297             }
298             if ( !name.isEmpty() && !code.isEmpty() && code != "DEBUG" )
299                comboCountryCode->addItem(name + " (" + code.toLower() + ")" );
300             if ( Country == code.toLower() )
301                comboCountryCode->setCurrentIndex(comboNum);
302
303             comboNum++;
304          }
305      }
306      reader.readNext();
307  }
308
309  // Now if we change index, enable Apply Button
310  connect( comboCountryCode, SIGNAL( currentIndexChanged(int) ), this, SLOT( slotCheckGlobalText() ) );
311}
312
313void wificonfigwidgetbase::slotRescan()
314{
315    QString strength, ssid, security, FileLoad;
316    QStringList ifconfout, ifline;   
317    int foundItem = 0;
318
319    // Clear the list box and disable the add button
320    listNewWifi->clear();
321    pushAddWifi->setEnabled(FALSE);
322           
323    // Start the scan and get the output
324    ifconfout = pcbsd::Utils::runShellCommand("ifconfig -v " + DeviceName + " up list scan");
325
326    //display the info for each wifi access point
327    for(int i=1; i<ifconfout.size(); i++){    //Skip the header line by starting at 1
328      ifline = NetworkInterface::parseWifiScanLine(ifconfout[i],true); //get a single line
329      //save the info for this wifi
330      //qDebug() << "ifconfig run";
331      ssid = ifline[0];
332      strength = ifline[4];
333      //determine the icon based on if there is security encryption
334      security = ifline[6]; //NetworkInterface::getWifiSecurity(ssid,DeviceName);
335      if(security.contains("None")){
336        FileLoad = ":object-unlocked.png";
337      }else{
338        FileLoad = ":object-locked.png";
339      }
340      //qDebug() << "ssid check";
341      //Make sure we do not display blank ssid entry points
342      if( !ssid.isEmpty() ){
343
344      // qDebug()<<"Checking for duplicate SSID's";
345      bool duplicateSSID = FALSE;
346      int dupRow;
347      for ( int z = 0 ; z < listNewWifi->count() ; z++){
348        //qDebug() << listNewWifi->item(z)->text() << ssid;
349        if ( listNewWifi->item(z)->text().contains(ssid+" (") ){
350          dupRow = z;
351          duplicateSSID = TRUE;
352          break;
353        }
354      }
355      if( !duplicateSSID ){
356        //Add the wifi access point to the list
357        listNewWifi->addItem(new QListWidgetItem(QIcon(FileLoad), ssid + " (signal: " +strength + ")") );
358        foundItem = 1; //set the flag for wifi signals found
359      }else{
360        //Check if the new signal strength is greater, replace if it is
361        QString oldStrength = listNewWifi->item(dupRow)->text();
362        oldStrength = oldStrength.section("(signal:",1,1).section("%)",0,0).simplified();
363        if( strength.section("%",0,0).toInt() > oldStrength.toInt() ){
364          //New signal strength is greater - replace the string
365          qDebug() << "Changing signal strength for "+ssid+" to reflect a stronger signal found";
366          //qDebug() << strength << oldStrength;
367          listNewWifi->item(dupRow)->setText( ssid+" (signal: "+strength+")" );
368        }
369      }
370      } //End of check for empty SSID entry points
371    }
372   
373    if ( foundItem == 1 ){
374      listNewWifi->setCurrentRow(-1);
375      pushAddWifi->setEnabled(TRUE);
376    } else {
377      pushAddWifi->setEnabled(FALSE);
378    }
379
380}
381
382// Slot which moves a SSID higher in the connection priority
383void wificonfigwidgetbase::slotMoveUp()
384{
385    QString tmpString;
386    int tmpInt;
387    bool tmpBool;
388    int curRow = 1;
389    bool MovedItem = false;
390
391    // Check if we have a selection to work with
392    if ( listWifi->currentRow() != -1 )
393    {
394      // Locate the SSID we want to remove
395      QString editSSID = listWifi->item(listWifi->currentRow())->text();
396      for ( int i = 0; i < 145; i++)
397      {
398          if ( SSIDList[i] == editSSID && i != 0 )
399          {
400            // We found the ssid we need to move up
401            tmpString = SSIDList[i-1];
402            SSIDList[i-1] = SSIDList[i] ; 
403            SSIDList[i] = tmpString; 
404           
405            tmpInt = SSIDEncType[i-1];
406            SSIDEncType[i-1] = SSIDEncType[i];
407            SSIDEncType[i] = tmpInt;
408
409            tmpBool = BSSID[i-1];
410            BSSID[i-1] = BSSID[i];
411            BSSID[i] = tmpBool;
412
413            tmpString = WEPKey[i-1];
414            WEPKey[i-1] = WEPKey[i];
415            WEPKey[i] = tmpString;
416
417            tmpInt = WEPIndex[i-1];
418            WEPIndex[i-1] = WEPIndex[i];
419            WEPIndex[i] = tmpInt;
420
421            tmpBool = WEPHex[i-1];
422            WEPHex[i-1] = WEPHex[i];
423            WEPHex[i] = tmpBool;
424
425            tmpString = WPAPersonalKey[i-1];
426            WPAPersonalKey[i-1] = WPAPersonalKey[i];
427            WPAPersonalKey[i] = tmpString;
428
429            tmpString = WPAEIdent[i-1];
430            WPAEIdent[i-1] = WPAEIdent[i];
431            WPAEIdent[i] = tmpString;
432
433            tmpString = WPAECACert[i-1];
434            WPAECACert[i-1] = WPAECACert[i];
435            WPAECACert[i] = tmpString;
436
437            tmpString = WPAEClientCert[i-1];
438            WPAEClientCert[i-1] = WPAEClientCert[i];
439            WPAEClientCert[i] = tmpString;
440
441            tmpString = WPAEPrivKeyFile[i-1];
442            WPAEPrivKeyFile[i-1] = WPAEPrivKeyFile[i];
443            WPAEPrivKeyFile[i] = tmpString;
444
445            tmpString = WPAEPassword[i-1];
446            WPAEPassword[i-1] = WPAEPassword[i];
447            WPAEPassword[i] = tmpString;
448
449            tmpInt = WPAEType[i-1];
450            WPAEType[i-1] = WPAEType[i];
451            WPAEType[i] = tmpInt;
452
453            tmpInt = WPAEKeyMgmt[i-1];
454            WPAEKeyMgmt[i-1] = WPAEKeyMgmt[i];
455            WPAEKeyMgmt[i] = tmpInt;
456
457            curRow=i-1;
458            MovedItem=true;
459            break;
460          }
461      }
462
463      // Refresh the SSID list and enable the apply button
464      if ( MovedItem) {
465        slotRefreshSSIDList();
466        pushApply->setEnabled(TRUE);
467        listWifi->setCurrentRow(curRow);
468      }
469    }
470}
471
472
473// Slot which moves a SSID lower in the connection priority
474void wificonfigwidgetbase::slotMoveDown()
475{
476    QString tmpString;
477    int tmpInt;
478    bool tmpBool;
479    int curRow = 1;
480    bool MovedItem = false;
481
482    // Check if we have a selection to work with
483    if ( listWifi->currentRow() != -1 )
484    {
485      // Locate the SSID we want to remove
486      QString editSSID = listWifi->item(listWifi->currentRow())->text();
487      for ( int i = 0; i < 145; i++)
488      {
489          if ( SSIDList[i] == editSSID && ! SSIDList[i+1].isEmpty())
490          {
491            // We found the ssid we need to move down
492            tmpString = SSIDList[i+1];
493            SSIDList[i+1] = SSIDList[i] ; 
494            SSIDList[i] = tmpString; 
495           
496            tmpInt = SSIDEncType[i+1];
497            SSIDEncType[i+1] = SSIDEncType[i];
498            SSIDEncType[i] = tmpInt;
499
500            tmpBool = BSSID[i+1];
501            BSSID[i+1] = BSSID[i];
502            BSSID[i] = tmpBool;
503
504            tmpString = WEPKey[i+1];
505            WEPKey[i+1] = WEPKey[i];
506            WEPKey[i] = tmpString;
507
508            tmpInt = WEPIndex[i+1];
509            WEPIndex[i+1] = WEPIndex[i];
510            WEPIndex[i] = tmpInt;
511
512            tmpBool = WEPHex[i+1];
513            WEPHex[i+1] = WEPHex[i];
514            WEPHex[i] = tmpBool;
515
516            tmpString = WPAPersonalKey[i+1];
517            WPAPersonalKey[i+1] = WPAPersonalKey[i];
518            WPAPersonalKey[i] = tmpString;
519
520            tmpString = WPAEIdent[i+1];
521            WPAEIdent[i+1] = WPAEIdent[i];
522            WPAEIdent[i] = tmpString;
523
524            tmpString = WPAECACert[i+1];
525            WPAECACert[i+1] = WPAECACert[i];
526            WPAECACert[i] = tmpString;
527
528            tmpString = WPAEClientCert[i+1];
529            WPAEClientCert[i+1] = WPAEClientCert[i];
530            WPAEClientCert[i] = tmpString;
531
532            tmpString = WPAEPrivKeyFile[i+1];
533            WPAEPrivKeyFile[i+1] = WPAEPrivKeyFile[i];
534            WPAEPrivKeyFile[i] = tmpString;
535
536            tmpString = WPAEPassword[i+1];
537            WPAEPassword[i+1] = WPAEPassword[i];
538            WPAEPassword[i] = tmpString;
539
540            tmpInt = WPAEType[i+1];
541            WPAEType[i+1] = WPAEType[i];
542            WPAEType[i] = tmpInt;
543
544            tmpInt = WPAEKeyMgmt[i+1];
545            WPAEKeyMgmt[i+1] = WPAEKeyMgmt[i];
546            WPAEKeyMgmt[i] = tmpInt;
547
548            curRow=i+1;
549            MovedItem=true;
550            break;
551          }
552      }
553
554      // Refresh the SSID list and enable the apply button
555      if ( MovedItem) {
556        slotRefreshSSIDList();
557        pushApply->setEnabled(TRUE);
558        listWifi->setCurrentRow(curRow);
559       }
560
561    }
562}
563
564void wificonfigwidgetbase::slotEditProfile()
565{
566    bool foundSSID=false;
567    int curItem=0;
568
569    // Check if we have a selection to work with
570    if ( listWifi->currentRow() != -1 )
571    {
572      // Locate the SSID we want to remove
573      QString editSSID = listWifi->item(listWifi->currentRow())->text();
574      for ( int i = 0; i < 145; i++)
575      {
576          if ( SSIDList[i] == editSSID )
577          {
578            // We found the ssid we need to edit
579            foundSSID=true; 
580            curItem=i;
581            break;
582          }
583      }
584
585      // Lets go ahead and open the edit dialog on this SSID
586      if (foundSSID)
587      {
588          // Set our internal flag that this is an edit on an existing device
589          wifiselect = new wifiselectiondialog();
590          wifiselect->init(DeviceName);
591          wifiselect->setWPAOnly(WPAONLY);
592
593          // Check the type of SSID this is, and issue appropriate edit
594          if ( SSIDEncType[curItem] == NO_ENCRYPTION) {
595             wifiselect->initEdit(SSIDList[curItem], BSSID[curItem]);
596          }
597          if ( SSIDEncType[curItem] == WEP_ENCRYPTION) {
598             wifiselect->initEdit(SSIDList[curItem], BSSID[curItem], WEPKey[curItem], WEPIndex[curItem], WEPHex[curItem]);
599          }
600          if ( SSIDEncType[curItem] == WPA_ENCRYPTION) {
601             wifiselect->initEdit(SSIDList[curItem], BSSID[curItem], WPAPersonalKey[curItem]);
602          }
603          if ( SSIDEncType[curItem] == WPAE_ENCRYPTION) {
604             wifiselect->initEdit(SSIDList[curItem], BSSID[curItem], WPAEType[curItem], WPAEIdent[curItem], WPAECACert[curItem], WPAEClientCert[curItem], WPAEPrivKeyFile[curItem], WPAEPassword[curItem], WPAEKeyMgmt[curItem]);
605          }
606
607
608          // Connect our delete signal, which runs before we add a new SSID
609          connect( wifiselect, SIGNAL( signalDeleteSSID(QString) ), this, SLOT( slotRemoveProfileSSID(QString) ) ); 
610
611          // Connect our save signals
612          connect( wifiselect, SIGNAL( signalSavedOpen(QString, bool) ), this, SLOT( slotAddNewProfileOpen(QString, bool) ) );
613          connect( wifiselect, SIGNAL( signalSavedWEP( QString, bool, QString, int, bool ) ), this, SLOT( slotAddNewProfileWEP( QString, bool, QString, int, bool) ) );
614   connect( wifiselect, SIGNAL( signalSavedWPA(QString, bool, QString) ), this, SLOT( slotAddNewProfileWPA(QString, bool, QString) ) );
615          connect( wifiselect, SIGNAL( signalSavedWPAE(QString, bool, int, QString, QString, QString, QString, QString, int) ), this, SLOT ( slotAddNewProfileWPAE(QString, bool, int, QString, QString, QString, QString, QString, int) ) );
616
617          wifiselect->exec();
618      }
619
620
621    }
622}
623
624
625void wificonfigwidgetbase::slotRemoveProfile()
626{
627    // Check if we have a selection to work with
628    if ( listWifi->currentRow() != -1 )
629    {
630      // Locate the SSID we want to remove
631      QString removeSSID = listWifi->item(listWifi->currentRow())->text();
632      slotRemoveProfileSSID(removeSSID);
633
634      // Refresh the SSID list and enable the apply button
635      slotRefreshSSIDList();
636      pushApply->setEnabled(TRUE);
637
638    }
639 
640}
641
642void wificonfigwidgetbase::slotAddHiddenProfile(){
643  //Prompt for the desired SSID
644  bool ok;
645  QString ssidc = QInputDialog::getText(this,tr("Network Name"),tr("Please enter the name of the network you wish to add"), QLineEdit::Normal,"",&ok);
646  //check if a name was given
647  if( ok && !ssidc.isEmpty()){
648    slotAddNewProfileSSID(ssidc.simplified());
649  }
650}
651
652void wificonfigwidgetbase::slotAddNewProfile()
653{
654   //Get the selected SSID
655   if( (listNewWifi->currentRow())!=-1 ){
656    QString line = listNewWifi->item(listNewWifi->currentRow())->text();
657    QString ssidc = line.section(" (",0,0,QString::SectionSkipEmpty);
658    slotAddNewProfileSSID(ssidc);
659   }else{
660     QMessageBox::warning(this,"No Wifi Point Selected","Please select a wireless network to add");
661   }   
662}
663
664void wificonfigwidgetbase::slotAddNewProfileSSID(QString ssidc){ 
665  /*  ssidc - SSID of the network to add
666  */
667
668    //Get the Security Type
669    QString sec = NetworkInterface::getWifiSecurity(ssidc,DeviceName);
670
671    //Save the SSID for the future save slots
672    saveSSID = ssidc;
673
674    //Open the proper security dialog and link it to the save slots
675    if(sec.contains("None")){
676      slotAddNewProfileOpen(ssidc,false); //call the function to save the variables (no security settings)
677    }else if(sec.contains("WEP")){
678     dialogWEP = new wepConfig();
679     connect( dialogWEP, SIGNAL( saved(QString, int, bool) ), this, SLOT( slotWEPSave(QString, int, bool) ) );
680     dialogWEP->exec();
681    }else if(sec.contains("WPA")){ //both WPA and WPA2 encryption
682     dialogWPA = new dialogWPAPersonal();
683     connect( dialogWPA, SIGNAL( saved(QString) ), this, SLOT( slotWPAPSave(QString) ) );
684     dialogWPA->exec();
685    }else{
686      //Put error handling here
687      slotAddNewProfileOpen(ssidc,false); //call the function to save the variables (no security settings)
688      if ( ! WPAONLY )
689        QMessageBox::warning(this,"Unknown Wifi Security","The security for this wifi access point could not be automatically determined.\n Please edit the profile to manually set the proper security encryption.");
690    }
691}
692
693void wificonfigwidgetbase::slotWEPSave(QString newkey, int newindex, bool hexkey)
694{
695  //get the ssid
696  //QString line = listNewWifi->item(listNewWifi->currentRow())->text();
697  //QString ssidc = line.section(" (",0,0,QString::SectionSkipEmpty);
698  QString ssidc = saveSSID;
699  saveSSID.clear();
700  //Add the profile
701  slotAddNewProfileWEP(ssidc,false,newkey,newindex,hexkey);
702}
703
704void wificonfigwidgetbase::slotWPAPSave(QString newkey)
705{
706  //get the ssid
707  //QString line = listNewWifi->item(listNewWifi->currentRow())->text();
708  //QString ssidc = line.section(" (",0,0,QString::SectionSkipEmpty);
709  QString ssidc = saveSSID;
710  saveSSID.clear();
711  //Add the profile
712  slotAddNewProfileWPA(ssidc,false,newkey);
713}
714
715
716void wificonfigwidgetbase::runCommand( QString Command )
717{
718        FILE *file = popen(Command.toLatin1(),"r"); 
719        pclose(file);
720}
721
722void wificonfigwidgetbase::slotRemoveProfileSSID(QString RemoveSSID)
723{
724   bool foundSSID=false;
725
726   // Loop through, remove selected SSID, and move any entries after it up
727   for (int remItem = 0; remItem < 145; remItem++)
728   {
729
730     if ( RemoveSSID == SSIDList[remItem] ) {
731       foundSSID=true;
732     }
733
734     if(foundSSID) 
735     {
736       SSIDList[remItem] = SSIDList[remItem+1] ; 
737       SSIDEncType[remItem] = SSIDEncType[remItem+1];
738       BSSID[remItem] = BSSID[remItem+1];
739       WEPKey[remItem] = WEPKey[remItem+1];
740       WEPIndex[remItem] = WEPIndex[remItem+1];
741       WEPHex[remItem] = WEPHex[remItem+1];
742       WPAPersonalKey[remItem] = WPAPersonalKey[remItem+1];
743       WPAEIdent[remItem] = WPAEIdent[remItem+1];
744       WPAECACert[remItem] = WPAECACert[remItem+1];
745       WPAEClientCert[remItem] = WPAEClientCert[remItem+1];
746       WPAEPrivKeyFile[remItem] = WPAEPrivKeyFile[remItem+1];
747       WPAEPassword[remItem] = WPAEPassword[remItem+1];
748       WPAEType[remItem] = WPAEType[remItem+1];
749       WPAEKeyMgmt[remItem] = WPAEKeyMgmt[remItem+1];
750     }
751
752     if ( SSIDList[remItem+1].isEmpty() )
753     {
754       break;
755     }
756
757   }
758
759   
760}
761
762void wificonfigwidgetbase::slotAddNewProfileOpen(QString SSID, bool isBSSID)
763{
764   for (int dupItem = 0; dupItem < 145; dupItem++)
765   {
766      if ( SSID == SSIDList[dupItem] ) {
767          QMessageBox::warning( this, tr("Error"), tr("You already have a wireless network with this SSID! Please remove it first.\n") );
768          return;
769      }
770   }
771
772
773   int curItem=0;
774
775   while( ! SSIDList[curItem].isEmpty() && curItem < 145 )
776   {
777     curItem++;
778   }
779
780    // Find which current item we are working on
781
782    SSIDList[curItem] = SSID;
783    BSSID[curItem] = isBSSID;
784   
785    // Refresh the SSID listbox and enable the apply button
786    slotRefreshSSIDList();
787    slotCheckGlobalText();
788}
789
790void wificonfigwidgetbase::slotAddNewProfileWEP( QString SSID, bool isBSSID, QString newKey, int newIndex, bool hexkey )
791{
792   for (int dupItem = 0; dupItem < 145; dupItem++)
793   {
794      if ( SSID == SSIDList[dupItem] ) {
795        QMessageBox::warning( this, tr("Error"), tr("You already have a wireless network with this SSID! Please remove it first.\n") );
796        return;
797      }
798   }
799
800
801   int curItem=0;
802
803   while( ! SSIDList[curItem].isEmpty() && curItem < 145 )
804   {
805     curItem++;
806   }
807
808    // Find which current item we are working on
809 
810    SSIDList[curItem] = SSID;
811    SSIDEncType[curItem] = WEP_ENCRYPTION;
812    BSSID[curItem] = isBSSID;
813    WEPKey[curItem] = newKey;
814    WEPIndex[curItem] = newIndex;
815    WEPIndex[curItem]--;
816    WEPHex[curItem] = hexkey;
817
818    // Refresh the SSID listbox and enable the apply button
819    slotRefreshSSIDList();
820    slotCheckGlobalText();
821
822}
823
824
825void wificonfigwidgetbase::slotAddNewProfileWPA( QString SSID, bool isBSSID, QString newKey )
826{
827   for (int dupItem = 0; dupItem < 145; dupItem++)
828   {
829      if ( SSID == SSIDList[dupItem] ) {
830        QMessageBox::warning( this, tr("Error"), tr("You already have a wireless network with this SSID! Please remove it first.\n") );
831        return;
832      }
833   }
834
835   int curItem=0;
836
837   while( ! SSIDList[curItem].isEmpty() && curItem < 145 )
838   {
839     curItem++;
840   }
841
842
843   SSIDList[curItem] = SSID;
844   SSIDEncType[curItem] = WPA_ENCRYPTION;
845   BSSID[curItem] = isBSSID;
846   WPAPersonalKey[curItem] = newKey;
847   
848   // Refresh the SSID listbox and enable the apply button
849   slotRefreshSSIDList();
850   slotCheckGlobalText();
851}
852
853
854void wificonfigwidgetbase::slotAddNewProfileWPAE( QString SSID, bool isBSSID, int type, QString EAPIdent, QString CACert, QString ClientCert, QString PrivKeyFile, QString PrivKeyPass, int keyMgmt )
855{
856
857   for (int dupItem = 0; dupItem < 145; dupItem++)
858   {
859      if ( SSID == SSIDList[dupItem] ) {
860        QMessageBox::warning( this, tr("Error"), tr("You already have a wireless network with this SSID! Please remove it first.\n") );
861        return;
862      }
863   }
864
865   int curItem=0;
866
867   while( ! SSIDList[curItem].isEmpty() && curItem < 145 )
868   {
869     curItem++;
870   }
871
872
873   SSIDList[curItem] = SSID;
874   SSIDEncType[curItem] = WPAE_ENCRYPTION;
875   BSSID[curItem] = isBSSID;
876   WPAEType[curItem] = type;
877   WPAEIdent[curItem] = EAPIdent;
878   WPAECACert[curItem] = CACert;
879   WPAEClientCert[curItem] = ClientCert;
880   WPAEPrivKeyFile[curItem] = PrivKeyFile;
881   WPAEPassword[curItem] = PrivKeyPass;
882   WPAEKeyMgmt[curItem] = keyMgmt;
883
884   // Refresh the SSID listbox and enable the apply button
885   slotRefreshSSIDList();
886   slotCheckGlobalText();
887
888}
889
890
891void wificonfigwidgetbase::slotCheckDisabled()
892{
893        if ( checkDisableWireless->isChecked() ) 
894        {
895            tabMainWidget->setEnabled(FALSE);
896        } else {
897            tabMainWidget->setEnabled(TRUE);
898        }
899       
900         pushApply->setEnabled(TRUE); 
901}
902
903
904void wificonfigwidgetbase::slotOK()
905{
906    if ( pushApply->isEnabled() )
907    {
908        slotApply();
909        sleep(1);
910    }
911        close();
912}
913
914
915void wificonfigwidgetbase::slotMACClicked()
916{
917   if ( checkMAC->isChecked() ) {
918        groupMAC->setEnabled(FALSE);
919   } else {
920        groupMAC->setEnabled(TRUE);
921   }
922    pushApply->setEnabled(TRUE);
923}
924
925
926QString wificonfigwidgetbase::getLineFromCommandOutput( QString command )
927{
928        FILE *file = popen(command.toLatin1(),"r"); 
929       
930        char buffer[100];
931       
932        QString line = ""; 
933        char firstChar;
934       
935        if ((firstChar = fgetc(file)) != -1){
936                line += firstChar;
937                line += fgets(buffer,100,file);
938        }
939       
940       
941        pclose(file);
942       
943       
944        return line;
945}
946
947
948QString wificonfigwidgetbase::getNetmaskForIdent( QString ident )
949{
950   NetworkInterface ifr(ident);
951   return ifr.netmaskAsString();
952}
953
954
955QString wificonfigwidgetbase::getOutErrorsForIdent( QString ident )
956{
957   NetworkInterface ifr(ident);
958   return QString::number(ifr.errorsRx());
959}
960
961
962QString wificonfigwidgetbase::getOutPacketsForIdent( QString ident )
963{
964   NetworkInterface ifr(ident);
965   return QString::number(ifr.packetsRx());
966}
967
968
969QString wificonfigwidgetbase::getInErrorsForIdent( QString ident )
970{
971   NetworkInterface ifr(ident);
972   return QString::number(ifr.errorsTx());
973}
974
975
976QString wificonfigwidgetbase::getInPacketsForIdent( QString ident )
977{
978   NetworkInterface ifr(ident);
979   return QString::number(ifr.packetsTx());
980}
981
982
983QString wificonfigwidgetbase::getStatusForIdent( QString ident )
984{
985   NetworkInterface ifr(ident);
986   return ifr.mediaStatusAsString();
987}
988
989
990QString wificonfigwidgetbase::getMacForIdent( QString ident )
991{
992   NetworkInterface ifr(ident);
993   return ifr.macAsString();
994}
995
996
997QString wificonfigwidgetbase::getIpForIdent( QString ident )
998{
999   NetworkInterface ifr(ident);
1000   return ifr.ipAsString();
1001}
1002
1003
1004QString wificonfigwidgetbase::getNameForIdent( QString ident )
1005{
1006   NetworkInterface ifr(ident);
1007   return ifr.desc();
1008}
1009
1010void wificonfigwidgetbase::loadInfo()
1011{
1012  QString tmp;
1013
1014  // Get all the device information for the info tab
1015  if ( textInfoName->text().isEmpty() ) {
1016    if ( DeviceName.indexOf("wlan") != -1 )
1017    {
1018      tmp = NetworkInterface::getWifiParent(DeviceName);
1019
1020      // Get HW Identify line
1021      tmp = getNameForIdent(tmp);
1022
1023      // If the name comes up bogus for some reason
1024      if( tmp.isEmpty() ) {
1025         tmp = tr("Unknown Wireless Device");
1026      }
1027
1028      tmp.truncate(20);
1029      textInfoName->setText(tmp);
1030
1031    } else {
1032      textInfoName->setText(getNameForIdent(DeviceName));
1033    }
1034  }
1035
1036
1037  if ( usingLagg ) {
1038    textIP->setText(getIpForIdent("lagg0") );
1039    textNetmask->setText(getNetmaskForIdent( "lagg0" ) );
1040    textGateway->setText(getGatewayForIdent( "lagg0" ) );
1041  } else {
1042    textIP->setText(getIpForIdent(DeviceName) );
1043    textNetmask->setText(getNetmaskForIdent( DeviceName ) );
1044    textGateway->setText(getGatewayForIdent( DeviceName ) );
1045  }
1046
1047  textMac->setText(getMacForIdent( DeviceName ) );
1048  textStatus->setText(getStatusForIdent( DeviceName ) );
1049  textIPv6->setText(getIPv6ForIdent( DeviceName) );
1050  tmp = getMediaForIdent(DeviceName);
1051  tmp.truncate(20);
1052  textMedia->setText(tmp);
1053 
1054  // Get the packet status for this device
1055  textPacketsIn->setText(getInPacketsForIdent( DeviceName) );
1056  textPacketsInErrors->setText( getInErrorsForIdent( DeviceName) );
1057  textPacketsOut->setText(getOutPacketsForIdent( DeviceName) );
1058  textPacketsOutErrors->setText(getOutErrorsForIdent( DeviceName) );
1059
1060  // Connect the slot to refresh
1061  QTimer::singleShot(3000,  this,  SLOT(loadInfo() ) );
1062}
1063
1064
1065void wificonfigwidgetbase::showInfo()
1066{
1067     tabMainWidget->setCurrentWidget( tabMainWidget->widget(2) );
1068}
1069
1070
1071void wificonfigwidgetbase::slotFinishLoading()
1072{
1073   QString tmp, tmp2;
1074   bool ok;
1075
1076   // Get the ifconfig string
1077   if ( usingLagg )
1078     tmp = pcbsd::Utils::getConfFileValue( "/etc/rc.conf", "ifconfig_lagg0=", 1 );
1079
1080   if ( tmp.isEmpty() )
1081     tmp = pcbsd::Utils::getConfFileValue( "/etc/rc.conf", "ifconfig_" + DeviceName + "=", 1 );
1082
1083   if ( tmp.isEmpty() || tmp.indexOf("OFF") != -1 )  {
1084      checkDisableWireless->setChecked(TRUE);
1085      tabMainWidget->setEnabled(FALSE);
1086   } else if ( tmp.indexOf("DHCP") != -1 ) {
1087      checkDHCP->setChecked(TRUE);
1088      lineNetmask->setText("255.255.255.0");
1089      slotCheckDHCPBox();
1090     
1091            // Look for the mac address change
1092        if ( tmp.indexOf("ether") != -1 ) {
1093                tmp2 = tmp;
1094                tmp2 = tmp2.remove(0, tmp.indexOf("ether") + 6 );
1095                //if ( tmp.indexOf(" ") != -1 ) {
1096                //  tmp2.truncate(tmp.indexOf(" ") );
1097                //}
1098                lineMAC->setText(tmp2);
1099                checkMAC->setChecked(FALSE);
1100                groupMAC->setEnabled(TRUE);
1101        } 
1102
1103
1104   } else {
1105     // Look for an IP configuration
1106     tmp2 = tmp;
1107     tmp2 = tmp2.simplified();
1108
1109     if ( tmp.indexOf("laggport") != -1 )
1110       tmp2.remove(0, tmp2.lastIndexOf("laggport") + 9);
1111
1112     if ( tmp.indexOf("country") != -1 )
1113       tmp2.remove(0, tmp2.lastIndexOf("country") + 10);
1114
1115     if ( tmp.indexOf("WPA") == 0)
1116       tmp2.remove(0, tmp2.indexOf(" ") + 1);
1117
1118     if ( ! tmp2.isEmpty()) {
1119        // Get the IP address first
1120        lineIP->setText(tmp2.section(" ", 0, 0));
1121
1122          // Look for the netmask
1123          if ( tmp.indexOf("netmask") != -1 ) {
1124             tmp2 = tmp;
1125             tmp2 = tmp2.remove(0, tmp.indexOf("netmask") + 8 );
1126             if ( tmp.indexOf("ether") != -1 ) {
1127                tmp2.truncate(tmp.indexOf("ether") );
1128             }
1129             tmp2 = tmp2.simplified();
1130
1131             lineNetmask->setText(tmp2);
1132
1133          } else {
1134             // No netmask specified, default it instead
1135             lineNetmask->setText("255.255.255.0");
1136          }
1137      }
1138   }
1139   
1140   // Look for a country code
1141   tmp = pcbsd::Utils::getConfFileValue( "/etc/rc.conf", "ifconfig_" + DeviceName + "=", 1 );
1142   if ( tmp.indexOf("country ") != -1 ) {
1143       tmp.remove(0, tmp.lastIndexOf("country") + 8);
1144       Country = tmp.section(" ", 0,0);
1145       groupCountryCode->setChecked(true);
1146   }
1147
1148   // Look for the wpa_supplicant.conf file
1149   QFile file( "/etc/wpa_supplicant.conf" );
1150   if ( file.open( QIODevice::ReadOnly ) ) {
1151      int curItem=0;
1152      QTextStream stream( &file );
1153      QString line;
1154      while ( !stream.atEnd() ) {
1155
1156            line = stream.readLine(); // line of text excluding '\n'
1157
1158            // Check if we are at the end of a network profile block
1159            if ( line.indexOf("}") == 0)
1160            {
1161                curItem++;
1162            }
1163
1164            if ( line.indexOf(" ssid=") != -1 )
1165            {
1166                tmp2 = line.remove(0, line.indexOf("\"") +1 );
1167                tmp2.truncate(tmp2.indexOf("\"") );
1168                SSIDList[curItem] = tmp2;
1169                BSSID[curItem] = false;
1170                SSIDEncType[curItem]=NO_ENCRYPTION;
1171            }
1172
1173            if ( line.indexOf(" bssid=") != -1 )
1174            {
1175                tmp2 = line.remove(0, line.indexOf("=") +1 );
1176                SSIDList[curItem] = tmp2;
1177                BSSID[curItem] = true;
1178                SSIDEncType[curItem]=NO_ENCRYPTION;
1179            }
1180       
1181       
1182            // Check if we are using a WEP key for this network
1183            if ( line.indexOf("wep_key") != -1 )
1184            {                 
1185                if (line.indexOf("\"") != -1 )
1186                {
1187                   tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1188                   tmp2.truncate(tmp2.indexOf("\""));
1189                   WEPHex[curItem]=false;
1190                } else {
1191                   tmp2 = line.remove(0, line.indexOf("=") + 1 );
1192                   WEPHex[curItem]=true;
1193                }
1194                // Save the keycode
1195                WEPKey[curItem] = tmp2;
1196                SSIDEncType[curItem]=WEP_ENCRYPTION;
1197            }
1198
1199           // Check for the WEP tx key id
1200           if ( line.indexOf("wep_tx_keyidx") != -1 )
1201           {                   
1202                tmp2 = line.remove(0, line.indexOf("wep_tx_keyidx") +1 );
1203                // Save the keycode
1204                tmp2.truncate(tmp2.indexOf("=") );
1205                ok = tmp2.toInt(&ok);
1206                if ( ok ) {
1207                    WEPIndex[curItem] = tmp2.toInt(&ok);
1208                    WEPIndex[curItem]++;
1209                }
1210           }
1211                 
1212           // Check if we are using WPA-Personal
1213           if ( line.indexOf("psk=") != -1 )
1214           {                   
1215                tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1216                tmp2.truncate( tmp2.indexOf("\"") );
1217                         
1218                       
1219                // Save the keycode
1220                WPAPersonalKey[curItem] = tmp2;
1221                SSIDEncType[curItem]=WPA_ENCRYPTION;
1222           }
1223                   
1224           // Check if we are using WPA-Enterprise
1225           if ( line.indexOf("eap=") != -1 )
1226           {                   
1227                tmp2 = line.remove(0, line.indexOf("=") + 1 );
1228
1229                //Check to see whic type of WPA-Ent we are using
1230                if ( tmp2 == "TLS") {
1231                    WPAEType[curItem] = 1;
1232                } else if (tmp2 == "TTLS" ) {
1233                    WPAEType[curItem] = 2;
1234                } else if (tmp2 == "PEAP" ) {
1235                    WPAEType[curItem] = 3;
1236                }
1237                       
1238                SSIDEncType[curItem]=WPAE_ENCRYPTION;
1239           }
1240                   
1241           // Check for a identity= line
1242           if ( line.indexOf("identity=") != -1 )
1243           {                   
1244                tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1245                tmp2.truncate( tmp2.indexOf("\"") );
1246
1247                // Save the keycode
1248                WPAEIdent[curItem] = tmp2;
1249           }
1250                   
1251           // Check for a ca_cert= line
1252           if ( line.indexOf("ca_cert=") != -1 )
1253           {                   
1254                tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1255                tmp2.truncate( tmp2.indexOf("\"") );
1256
1257                // Save the keycode
1258                WPAECACert[curItem] = tmp2;
1259           }
1260       
1261           // Check for a client_cert= line
1262           if ( line.indexOf("client_cert=") != -1 )
1263           {                   
1264                tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1265                tmp2.truncate( tmp2.indexOf("\"") );
1266
1267                // Save the keycode
1268                WPAEClientCert[curItem] = tmp2;
1269           }
1270                   
1271          // Check for a private_key= line
1272           if ( line.indexOf("private_key=") != -1 )
1273           {                   
1274                tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1275                tmp2.truncate( tmp2.indexOf("\"") );
1276
1277                // Save the keycode
1278                WPAEPrivKeyFile[curItem] = tmp2;
1279           }
1280           
1281          // Check for a private_key_passwd= line
1282          if ( line.indexOf("private_key_passwd=") != -1 )
1283          {                   
1284                tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1285                tmp2.truncate( tmp2.indexOf("\"") );
1286
1287                // Save the keycode
1288                WPAEPassword[curItem] = tmp2;
1289          }
1290
1291          // Figure out the key mgmt
1292          if ( line.indexOf("key_mgmt=WPA-EAP") != -1 )
1293                WPAEKeyMgmt[curItem] = KEYWPAEAP;
1294          if ( line.indexOf("key_mgmt=IEEE8021X") != -1 )
1295                WPAEKeyMgmt[curItem] = KEY8021X;
1296       
1297         // Check for a private_key_passwd= line
1298         if ( line.indexOf("password=") != -1 )
1299         {                     
1300                tmp2 = line.remove(0, line.indexOf("\"") + 1 );
1301                tmp2.truncate( tmp2.indexOf("\"") );
1302
1303                // Save the keycode
1304                WPAEPassword[curItem] = tmp2;
1305         }
1306
1307      }
1308
1309   }
1310
1311
1312   // Refresh the ssid profile list
1313   slotRefreshSSIDList(); 
1314
1315   // Load the list of country codes we can set
1316   loadCountryCodes();
1317
1318   
1319   // Start loading the info tab
1320   loadInfo();
1321
1322   pushApply->setEnabled(FALSE);
1323}
1324
1325
1326// Slot which reads the arrays and displays the list of WIFI profiles
1327void wificonfigwidgetbase::slotRefreshSSIDList()
1328{
1329
1330  listWifi->clear();
1331
1332  int curItem=0;
1333
1334  while( ! SSIDList[curItem].isEmpty() )
1335  {
1336     if ( SSIDEncType[curItem] == NO_ENCRYPTION )
1337     {
1338       listWifi->addItem(new QListWidgetItem(QIcon(":object-unlocked.png"), SSIDList[curItem] ) );
1339     } else {
1340
1341       listWifi->addItem(new QListWidgetItem(QIcon(":object-locked.png"), SSIDList[curItem] ) );
1342     }
1343
1344     curItem++;
1345
1346     // We only need 145 wireless networks
1347     if ( curItem > 145 )
1348     {
1349        break;
1350     }
1351  }
1352
1353}
1354
1355
1356QString wificonfigwidgetbase::getIPv6ForIdent( QString ident )
1357{
1358        QString command = "nice ifconfig " +ident + " | grep \"inet6 \"";
1359        QString inputLine = getLineFromCommandOutput(command);
1360        QString ip= "";
1361       
1362        if (inputLine != "" && inputLine.indexOf("inet6 ") != -1){
1363               
1364                ip = inputLine.remove(0, inputLine.indexOf("inet6 ") + 5);
1365                ip.truncate(ip.indexOf("%"));
1366               
1367               
1368        }
1369       
1370        return ip;
1371}
1372
1373
1374QString wificonfigwidgetbase::getGatewayForIdent( QString ident )
1375{
1376        QString command = "nice netstat -n -r | grep \"default\" | grep " + ident;
1377        QString inputLine = getLineFromCommandOutput(command);
1378        QString packets = "";
1379       
1380        if (inputLine != "" ){
1381                inputLine = inputLine.simplified();
1382                packets = inputLine.section(' ', 1, 1 );
1383        }
1384       
1385        return packets;
1386}
1387
1388
1389QString wificonfigwidgetbase::getMediaForIdent( QString ident )
1390{
1391        QString command = "nice ifconfig " +ident + " | grep media:";
1392        QString inputLine = getLineFromCommandOutput(command);
1393        QString status = "";
1394       
1395        if (inputLine != "" && inputLine.indexOf("media:") != -1){
1396          status = inputLine.remove(0, inputLine.indexOf("media:") + 7);
1397        }
1398       
1399        return status;
1400}
1401
1402
1403void wificonfigwidgetbase::slotCheckGlobalText()
1404{
1405    pushApply->setEnabled(TRUE);
1406}
1407
1408
1409void wificonfigwidgetbase::setModeWPAOnly()
1410{
1411    WPAONLY = true;
1412    tabMainWidget->removeTab(2);
1413    tabMainWidget->removeTab(1);
1414    pushRescan->setHidden(true);
1415    labelAvailWifi->setHidden(true);
1416    checkDisableWireless->setHidden(true);
1417    listNewWifi->setHidden(true);
1418    pushAddWifi->setHidden(true);
1419    pushAddHidden->setText(tr("Add &network"));
1420    setWindowTitle("WPA Supplicant Configuration");
1421    tabMainWidget->setTabText(0, tr("WPA Configuration") );
1422}
Note: See TracBrowser for help on using the repository browser.