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.
wlassistant/src/netparams.h

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