You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
290 lines
12 KiB
290 lines
12 KiB
/***************************************************************************
|
|
* Copyright (C) 2005 by Pawel Nawrocki *
|
|
* pnawrocki@interia.pl *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
***************************************************************************/
|
|
|
|
#ifndef WA_NETPARAMS_H
|
|
#define WA_NETPARAMS_H
|
|
|
|
#include <iostream>
|
|
#include <tqfile.h>
|
|
#include <tdemessagebox.h>
|
|
#include <tdelocale.h>
|
|
|
|
class WANetParams
|
|
{
|
|
public:
|
|
TQString iface;
|
|
TQString essid;
|
|
//TQString mode;
|
|
TQString channel;
|
|
TQString ap;
|
|
bool wep;
|
|
TQString wepMode;
|
|
TQString wepKey;
|
|
bool wpa;
|
|
TQStringList wpaSettings;
|
|
TQString wpaKey;
|
|
|
|
bool dhcp;
|
|
TQString ip;
|
|
TQString netmask;
|
|
TQString broadcast;
|
|
TQString gateway;
|
|
TQString domain;
|
|
TQString dns1;
|
|
TQString dns2;
|
|
|
|
bool hiddenEssid;
|
|
bool wasHiddenEssid;
|
|
bool wasWep;
|
|
|
|
TQString preConnectionCommand;
|
|
TQString postConnectionCommand;
|
|
TQString preDisconnectionCommand;
|
|
TQString postDisconnectionCommand;
|
|
int preConnectionTimeout;
|
|
int postConnectionTimeout;
|
|
int preDisconnectionTimeout;
|
|
int postDisconnectionTimeout;
|
|
bool preConnectionDetached;
|
|
bool postConnectionDetached;
|
|
bool preDisconnectionDetached;
|
|
bool postDisconnectionDetached;
|
|
|
|
bool review()
|
|
{
|
|
bool r = false; //DEFAULTS TO 'no review needed'
|
|
if (wep)
|
|
if ( (wepMode.isEmpty()) || (wepKey.isEmpty()) ) {
|
|
if (!wasWep) {
|
|
KMessageBox::information(0, i18n("<qt><p>The network changed its security settings.</p><p>Please go to <i>Security</i> tab of the following dialog and configure WEP settings.</p></qt>") );
|
|
} else
|
|
KMessageBox::error(0, i18n("<qt><p>Your WEP Key is not set properly.</p><p>Please go to <i>Security</i> tab of the following dialog and enter the required key.</p></qt>") );
|
|
r = true;
|
|
}
|
|
if ( (hiddenEssid) && (!wasHiddenEssid) )
|
|
if ( KMessageBox::questionYesNo(0, i18n("<qt><p>The network has stopped broadcasting its ESSID since the last time you were connected.</p><p>Would you like to use '<b>%1</b>' as an ESSID for this network?</p><p><i>NOTE: If you answer No, a dialog will appear where you will be able to specify a different ESSID.</i></p></qt>").arg(essid) ) != 3 ) // !=YES
|
|
r = true;
|
|
|
|
wasHiddenEssid = hiddenEssid;
|
|
wasWep = wep;
|
|
return r;
|
|
}
|
|
|
|
TQString netParamsString()
|
|
{
|
|
TQStringList mNPS;
|
|
mNPS << boolToString(hiddenEssid) << essid << ap << channel << boolToString(wep) << wepMode << wepKey << boolToString(dhcp) << ip << netmask << broadcast << gateway << domain << dns1 << dns2 << boolToString(wasHiddenEssid) << boolToString(wasWep) << \
|
|
preConnectionCommand << TQString::number(preConnectionTimeout) << boolToString(preConnectionDetached) << \
|
|
postConnectionCommand << TQString::number(postConnectionTimeout) << boolToString(postConnectionDetached) << \
|
|
preDisconnectionCommand << TQString::number(preDisconnectionTimeout) << boolToString(preDisconnectionDetached) << \
|
|
postDisconnectionCommand << TQString::number(postDisconnectionTimeout) << boolToString(postDisconnectionDetached) << \
|
|
wpaSettings.join(",") << wpaKey;
|
|
return mNPS.join(",");
|
|
}
|
|
|
|
void loadNetParamsString( const TQString & nps )
|
|
{
|
|
/*if (nps.section(",",0,0)=="true")
|
|
hiddenEssid=true;
|
|
else
|
|
hiddenEssid=false;*/ // COMMENTED OUT because hiddenEssid boolean is set from the list item
|
|
essid = nps.section(",",1,1);
|
|
ap = nps.section(",",2,2);
|
|
//channel = nps.section(",",3,3); COMMENTED OUT because channel is set from the list item
|
|
/*if (nps.section(",",4,4)=="true")
|
|
wep=true;
|
|
else
|
|
wep=false;*/ // COMMENTED OUT because wep boolean is set from the list item
|
|
wepMode = nps.section(",",5,5);
|
|
wepKey = nps.section(",",6,6);
|
|
dhcp = ( nps.section(",",7,7) == "true" );
|
|
ip = nps.section(",",8,8);
|
|
netmask = nps.section(",",9,9);
|
|
broadcast = nps.section(",",10,10);
|
|
gateway = nps.section(",",11,11);
|
|
domain = nps.section(",",12,12);
|
|
dns1 = nps.section(",",13,13);
|
|
dns2 = nps.section(",",14,14);
|
|
wasHiddenEssid = ( nps.section(",",15,15)=="true" );
|
|
wasWep = ( nps.section(",",16,16)=="true" );
|
|
|
|
preConnectionCommand = nps.section(",",17,17);
|
|
preConnectionTimeout = nps.section(",",18,18).toInt();
|
|
preConnectionDetached = ( nps.section(",",19,19) == "true" );
|
|
|
|
postConnectionCommand = nps.section(",",20,20);
|
|
postConnectionTimeout = nps.section(",",21,21).toInt();
|
|
postConnectionDetached = ( nps.section(",",22,22) == "true" );
|
|
|
|
preDisconnectionCommand = nps.section(",",23,23);
|
|
preDisconnectionTimeout = nps.section(",",24,24).toInt();
|
|
preDisconnectionDetached = ( nps.section(",",25,25) == "true" );
|
|
|
|
postDisconnectionCommand = nps.section(",",26,26);
|
|
postDisconnectionTimeout = nps.section(",",27,27).toInt();
|
|
postDisconnectionDetached = ( nps.section(",",28,28) == "true" );
|
|
wpaSettings = TQStringList::split( ",", nps.section(",",29,32) ); // 4 fields
|
|
wpaKey = nps.section(",",33,33);
|
|
|
|
}
|
|
private:
|
|
TQString boolToString( bool b )
|
|
{
|
|
TQString result;
|
|
b ? result = "true" : result = "false";
|
|
return result;
|
|
}
|
|
};
|
|
|
|
class WACommands
|
|
{
|
|
public:
|
|
bool allFound;
|
|
TQStringList notFound;
|
|
|
|
void init()
|
|
{
|
|
TQStringList binDirs;
|
|
binDirs << "/sbin" << "/usr/sbin" << "/usr/local/sbin" << "/bin" << "/usr/bin" << "/usr/local/bin";
|
|
|
|
wpa_supplicant = getPath("wpa_supplicant", binDirs);
|
|
wpa_cli = getPath("wpa_cli", binDirs);
|
|
dhcp = getPath("dhcpcd", binDirs); //these 2 checks have to be first, so allFound flag is properly set.
|
|
if (dhcp.isEmpty())
|
|
dhcp = getPath("dhclient", binDirs);
|
|
if (!dhcp.isEmpty()) {
|
|
allFound=1;
|
|
dhcpClient = dhcp.section("/",-1,-1);
|
|
std::cout << "DHCP Client: " << dhcpClient.ascii() << std::endl;
|
|
}
|
|
|
|
ifconfig = getPath("ifconfig", binDirs);
|
|
iwconfig = getPath("iwconfig", binDirs);
|
|
iwlist = getPath("iwlist", binDirs);
|
|
route = getPath("route", binDirs);
|
|
pidof = getPath("pidof", binDirs);
|
|
|
|
if (!allFound)
|
|
std::cout << "Executable(s) not found:" << notFound.join(", ").ascii() << std::endl;
|
|
else
|
|
std::cout << "All executables found." << std::endl;
|
|
}
|
|
|
|
TQStringList cmd( const TQString & action, const WANetParams & np, const bool & quiet = false )
|
|
{
|
|
TQStringList mCmd;
|
|
|
|
/*if (action=="ifup")
|
|
mCmd << ifconfig << np.iface << "up";
|
|
|
|
else if (action=="ifdown")
|
|
mCmd << ifconfig << np.iface << "down";
|
|
|
|
else*/ if (action=="radio_on")
|
|
mCmd << iwconfig << np.iface << "txpower" << "auto";
|
|
|
|
else if (action=="scan")
|
|
mCmd << iwlist << np.iface << "scan";
|
|
|
|
else if (action=="disconnect")
|
|
mCmd << iwconfig << np.iface << "mode" << "managed" << "key" << "off" << "ap" << "off" << "essid" << "off";
|
|
|
|
else if (action=="iwconfig_set") {
|
|
mCmd << iwconfig << np.iface << "mode" << "managed";
|
|
if (np.channel.toInt()>0)
|
|
mCmd << "channel" << np.channel;
|
|
mCmd << "key";
|
|
if (np.wep && !np.wepKey.isEmpty())
|
|
mCmd << np.wepMode << np.wepKey;
|
|
else
|
|
mCmd << "off";
|
|
mCmd << "essid" << np.essid;
|
|
|
|
} else if (action=="iwconfig_ap") {
|
|
mCmd << iwconfig << np.iface << "ap" << np.ap;
|
|
|
|
} else if (action=="ifconfig_dhcp") {
|
|
if (dhcpClient=="dhcpcd")
|
|
mCmd << dhcp << "-nd" << np.iface;
|
|
else if (dhcpClient=="dhclient")
|
|
mCmd << dhcp << np.iface; // << "-1" << "-q"
|
|
|
|
} else if (action=="kill_dhcp") {
|
|
if ( dhcpClient=="dhcpcd") //dhcpcd
|
|
mCmd << dhcp << "-k" << np.iface;
|
|
else //dhclient
|
|
mCmd << dhcp << "-r" << np.iface;
|
|
|
|
} else if (action=="ifconfig_manual") {
|
|
mCmd << ifconfig << np.iface << np.ip;
|
|
if (!np.netmask.isEmpty())
|
|
mCmd << "netmask" << np.netmask;
|
|
if (!np.broadcast.isEmpty())
|
|
mCmd << "broadcast" << np.broadcast;
|
|
|
|
} else if (action=="route_add") {
|
|
if (!np.gateway.isEmpty())
|
|
mCmd << route << "add" << "default" << "gw" << np.gateway;
|
|
|
|
} else if (action=="route_del") {
|
|
if (!np.gateway.isEmpty())
|
|
mCmd << route << "del" << "default" << "gw" << np.gateway;
|
|
|
|
} else
|
|
std::cout << "Unknown action: " << action.ascii() << std::endl;
|
|
|
|
if ( (!mCmd.isEmpty()) && (!quiet) ) {//mCmd = TQStringList();
|
|
TQString mCmdString = mCmd.join(" ");
|
|
if (!np.wepKey.isEmpty()) mCmdString.replace(np.wepKey, "xxxxxxxxxx");
|
|
std::cout << action.ascii() << ": " << mCmdString.ascii() << std::endl;
|
|
}
|
|
return mCmd;
|
|
}
|
|
|
|
TQString route;
|
|
TQString dhcpClient;
|
|
TQString wpa_supplicant;
|
|
TQString wpa_cli;
|
|
private:
|
|
TQString ifconfig;
|
|
TQString iwconfig;
|
|
TQString iwlist;
|
|
TQString dhcp;
|
|
TQString pidof;
|
|
|
|
TQString getPath(TQString file, TQStringList dirs)
|
|
{
|
|
TQString s;
|
|
for ( TQStringList::Iterator it = dirs.begin(); it != dirs.end(); it++ ) {
|
|
if (TQFile( TQString(*it+"/"+file) ).exists()) {
|
|
s = TQString(*it+"/"+file);
|
|
break;
|
|
}
|
|
}
|
|
if (s.isEmpty()) {
|
|
allFound = 0;
|
|
notFound << file;
|
|
}
|
|
return s;
|
|
}
|
|
};
|
|
|
|
#endif //WA_NETPARAMS_H
|