mirror of
https://gitee.com/drabel/LibQQt.git
synced 2025-01-04 10:18:44 +08:00
更新ethnet manager的说明
This commit is contained in:
parent
c50b5b6549
commit
0ab8042a50
@ -5,23 +5,23 @@
|
||||
|
||||
QQtEthenetManager* QQtEthenetManager::_instance = NULL;
|
||||
|
||||
QQtEthenetManager* QQtEthenetManager::Instance(QObject* parent)
|
||||
QQtEthenetManager* QQtEthenetManager::Instance ( QObject* parent )
|
||||
{
|
||||
if (_instance)
|
||||
if ( _instance )
|
||||
return _instance;
|
||||
|
||||
_instance = new QQtEthenetManager(parent);
|
||||
_instance = new QQtEthenetManager ( parent );
|
||||
return _instance;
|
||||
}
|
||||
|
||||
bool QQtEthenetManager::setCurrentWifi(QString bssid_mac, QString password)
|
||||
bool QQtEthenetManager::setCurrentWifi ( QString bssid_mac, QString password )
|
||||
{
|
||||
for (QList<TWifi>::Iterator it = m_wifiList.begin();
|
||||
it != m_wifiList.end(); it++)
|
||||
for ( QList<TWifi>::Iterator it = m_wifiList.begin();
|
||||
it != m_wifiList.end(); it++ )
|
||||
{
|
||||
TWifi wifi = *it;
|
||||
|
||||
if (bssid_mac == wifi[ESSID_BSSID])
|
||||
if ( bssid_mac == wifi[ESSID_BSSID] )
|
||||
{
|
||||
m_status = "";
|
||||
m_curWifi = wifi;
|
||||
@ -32,7 +32,7 @@ bool QQtEthenetManager::setCurrentWifi(QString bssid_mac, QString password)
|
||||
|
||||
restoreWifi();
|
||||
|
||||
if (!restartWifi())
|
||||
if ( !restartWifi() )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -46,11 +46,11 @@ void QQtEthenetManager::ipconfig()
|
||||
|
||||
QString QQtEthenetManager::currentNetName()
|
||||
{
|
||||
if ("eth0" == m_netName)
|
||||
if ( "eth0" == m_netName )
|
||||
return "Wired Lan";
|
||||
|
||||
if ("wlan0" == m_netName)
|
||||
if ("COMPLETED" == m_status)
|
||||
if ( "wlan0" == m_netName )
|
||||
if ( "COMPLETED" == m_status )
|
||||
return m_curWifi[ESSID_NAME];
|
||||
|
||||
return "";
|
||||
@ -65,36 +65,36 @@ void QQtEthenetManager::readStatus()
|
||||
char key[MAX_LEN]; //设置一个合适的长度,以存储每一行输出
|
||||
char value[MAX_LEN]; //设置一个合适的长度,以存储每一行输出
|
||||
|
||||
bzero(result, MAX_LEN);
|
||||
bzero(key, MAX_LEN);
|
||||
bzero(value, MAX_LEN);
|
||||
FILE* pp = popen("wpa_cli -iwlan0 status", "r"); //建立管道
|
||||
bzero ( result, MAX_LEN );
|
||||
bzero ( key, MAX_LEN );
|
||||
bzero ( value, MAX_LEN );
|
||||
FILE* pp = popen ( "wpa_cli -iwlan0 status", "r" ); //建立管道
|
||||
|
||||
if (!pp)
|
||||
if ( !pp )
|
||||
return;
|
||||
|
||||
while (fgets(result, sizeof(result), pp) != NULL)
|
||||
while ( fgets ( result, sizeof ( result ), pp ) != NULL )
|
||||
{
|
||||
sscanf(result, "%[^=]=%s", key, value);
|
||||
sscanf ( result, "%[^=]=%s", key, value );
|
||||
|
||||
/*
|
||||
* 如果这里不用QString包含,会对比地址
|
||||
*/
|
||||
if (QString("wpa_state") == QString(key))
|
||||
if ( QString ( "wpa_state" ) == QString ( key ) )
|
||||
{
|
||||
m_curWifi[ESSID_STATUS] = value;
|
||||
}
|
||||
else if (QString("bssid") == QString(key))
|
||||
else if ( QString ( "bssid" ) == QString ( key ) )
|
||||
{
|
||||
m_curWifi[ESSID_BSSID] = value;
|
||||
}
|
||||
else if (QString("ssid") == QString(key))
|
||||
else if ( QString ( "ssid" ) == QString ( key ) )
|
||||
{
|
||||
m_curWifi[ESSID_NAME] = value;
|
||||
}
|
||||
}
|
||||
|
||||
pclose(pp);
|
||||
pclose ( pp );
|
||||
|
||||
return;
|
||||
}
|
||||
@ -103,18 +103,18 @@ void QQtEthenetManager::refreshWifiList()
|
||||
{
|
||||
static int scanid = 0;
|
||||
|
||||
if (scanid == 12)
|
||||
scanid = 0, system("wpa_cli -iwlan0 scan");
|
||||
if ( scanid == 12 )
|
||||
scanid = 0, system ( "wpa_cli -iwlan0 scan" );
|
||||
|
||||
scanid ++;
|
||||
|
||||
FILE* pp = popen("wpa_cli -iwlan0 scan_r", "r"); //建立管道
|
||||
FILE* pp = popen ( "wpa_cli -iwlan0 scan_r", "r" ); //建立管道
|
||||
|
||||
if (!pp)
|
||||
if ( !pp )
|
||||
return;
|
||||
|
||||
char cmdresult[MAX_LEN]; //设置一个合适的长度,以存储每一行输出
|
||||
fgets(cmdresult, sizeof(cmdresult), pp) ; //""
|
||||
fgets ( cmdresult, sizeof ( cmdresult ), pp ) ; //""
|
||||
|
||||
char bssid[MAX_PATH];
|
||||
char frequency[MAX_PATH];
|
||||
@ -124,19 +124,19 @@ void QQtEthenetManager::refreshWifiList()
|
||||
|
||||
m_wifiList.clear();
|
||||
|
||||
while (fgets(cmdresult, sizeof(cmdresult), pp) != NULL)
|
||||
while ( fgets ( cmdresult, sizeof ( cmdresult ), pp ) != NULL )
|
||||
{
|
||||
sscanf(cmdresult, "%s\t%s\t%s\t%s\t%s\n", bssid, frequency, signal, flag, ssid);
|
||||
sscanf ( cmdresult, "%s\t%s\t%s\t%s\t%s\n", bssid, frequency, signal, flag, ssid );
|
||||
|
||||
TWifi wifi;
|
||||
wifi[ESSID_NAME] = ssid;
|
||||
|
||||
if (strstr(flag, "WPA"))
|
||||
if ( strstr ( flag, "WPA" ) )
|
||||
wifi[ESSID_TYPE] = "WPA";
|
||||
else
|
||||
wifi[ESSID_TYPE] = "WEP";
|
||||
|
||||
if (strstr(flag, "WPA") || strstr(flag, "WEP"))
|
||||
if ( strstr ( flag, "WPA" ) || strstr ( flag, "WEP" ) )
|
||||
wifi[ESSID_ENCRYP] = "YES";
|
||||
else
|
||||
wifi[ESSID_ENCRYP] = "NO";
|
||||
@ -147,18 +147,18 @@ void QQtEthenetManager::refreshWifiList()
|
||||
wifi[ESSID_SIGNAL] = signal;
|
||||
wifi[ESSID_FLAG] = flag;
|
||||
|
||||
if (wifi[ESSID_BSSID] == m_curWifi[ESSID_BSSID])
|
||||
if ( wifi[ESSID_BSSID] == m_curWifi[ESSID_BSSID] )
|
||||
wifi[ESSID_STATUS] = m_curWifi[ESSID_STATUS];
|
||||
else
|
||||
wifi[ESSID_STATUS] = "";
|
||||
|
||||
m_wifiList.push_back(wifi);
|
||||
m_wifiList.push_back ( wifi );
|
||||
|
||||
//pline() << ssid << frequency << signal << flag << bssid << wifi[ESSID_STATUS];
|
||||
}
|
||||
|
||||
//pline() << m_wifiList.size();
|
||||
pclose(pp); //关闭管道
|
||||
pclose ( pp ); //关闭管道
|
||||
emit sigRefreshed();
|
||||
}
|
||||
|
||||
@ -166,25 +166,25 @@ void QQtEthenetManager::refreshWifiStatus()
|
||||
{
|
||||
readStatus();
|
||||
|
||||
if (m_status == m_curWifi[ESSID_STATUS])
|
||||
if ( m_status == m_curWifi[ESSID_STATUS] )
|
||||
return;
|
||||
|
||||
pline() << m_curWifi[ESSID_BSSID] << m_curWifi[ESSID_NAME] << m_curWifi[ESSID_STATUS];
|
||||
|
||||
m_status = m_curWifi[ESSID_STATUS];
|
||||
emit sigStatusChanged(m_status);
|
||||
emit sigStatusChanged ( m_status );
|
||||
|
||||
if ("COMPLETED" == m_status)
|
||||
if ( "COMPLETED" == m_status )
|
||||
emit sigConnected();
|
||||
else if ("SCANNING" == m_status)
|
||||
else if ( "SCANNING" == m_status )
|
||||
emit sigScanning();
|
||||
else if ("ASSOCIATING" == m_status)
|
||||
else if ( "ASSOCIATING" == m_status )
|
||||
emit sigConnecting();
|
||||
else if ("INACTIVE" == m_status)
|
||||
else if ( "INACTIVE" == m_status )
|
||||
emit sigDisConnected();
|
||||
else if ("4WAY_HANDSHAKE" == m_status)
|
||||
else if ( "4WAY_HANDSHAKE" == m_status )
|
||||
emit sigDisConnected();
|
||||
else if ("DISCONNECTED" == m_status)
|
||||
else if ( "DISCONNECTED" == m_status )
|
||||
emit sigDisConnected();
|
||||
}
|
||||
|
||||
@ -192,25 +192,25 @@ void QQtEthenetManager::checkLanConnection()
|
||||
{
|
||||
char cmdbuf[MAX_PATH];
|
||||
char cmdresult[MAX_PATH]; //设置一个合适的长度,以存储每一行输出
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
bzero(cmdresult, MAX_PATH);
|
||||
sprintf(cmdbuf, "cat /sys/class/net/eth0/carrier");
|
||||
FILE* pp = popen(cmdbuf, "r"); //建立管道
|
||||
fgets(cmdresult, sizeof(cmdresult), pp); //""
|
||||
pclose(pp);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
bzero ( cmdresult, MAX_PATH );
|
||||
sprintf ( cmdbuf, "cat /sys/class/net/eth0/carrier" );
|
||||
FILE* pp = popen ( cmdbuf, "r" ); //建立管道
|
||||
fgets ( cmdresult, sizeof ( cmdresult ), pp ); //""
|
||||
pclose ( pp );
|
||||
|
||||
QString netName = m_netName;
|
||||
|
||||
if (strstr(cmdresult, "0"))
|
||||
if ( strstr ( cmdresult, "0" ) )
|
||||
m_netName = "wlan0";
|
||||
else
|
||||
m_netName = "eth0";
|
||||
|
||||
if (netName != m_netName)
|
||||
if ( netName != m_netName )
|
||||
{
|
||||
config();
|
||||
|
||||
if ("wlan0" == m_netName)
|
||||
if ( "wlan0" == m_netName )
|
||||
emit sigLanDisConnected();
|
||||
else
|
||||
emit sigLanConnected();
|
||||
@ -219,75 +219,75 @@ void QQtEthenetManager::checkLanConnection()
|
||||
return;
|
||||
}
|
||||
|
||||
void QQtEthenetManager::DhcpPassed(QString netname)
|
||||
void QQtEthenetManager::DhcpPassed ( QString netname )
|
||||
{
|
||||
int sockfd;
|
||||
struct ifreq ifr;
|
||||
struct sockaddr_in sin;
|
||||
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
sockfd = socket ( AF_INET, SOCK_DGRAM, 0 );
|
||||
|
||||
if (sockfd == -1)
|
||||
if ( sockfd == -1 )
|
||||
{
|
||||
perror("socket");
|
||||
perror ( "socket" );
|
||||
return;
|
||||
}
|
||||
|
||||
strncpy(ifr.ifr_name, netname.toLatin1().data(), IFNAMSIZ);
|
||||
strncpy ( ifr.ifr_name, netname.toLatin1().data(), IFNAMSIZ );
|
||||
ifr.ifr_name[IFNAMSIZ - 1] = 0;
|
||||
|
||||
//ip
|
||||
if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0)
|
||||
perror("ioctl");
|
||||
if ( ioctl ( sockfd, SIOCGIFADDR, &ifr ) < 0 )
|
||||
perror ( "ioctl" );
|
||||
|
||||
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
|
||||
QString ip = QString(inet_ntoa(sin.sin_addr));
|
||||
memcpy ( &sin, &ifr.ifr_addr, sizeof ( sin ) );
|
||||
QString ip = QString ( inet_ntoa ( sin.sin_addr ) );
|
||||
|
||||
//mask
|
||||
if (ioctl(sockfd, SIOCGIFNETMASK, &ifr) < 0)
|
||||
perror("ioctl");
|
||||
if ( ioctl ( sockfd, SIOCGIFNETMASK, &ifr ) < 0 )
|
||||
perror ( "ioctl" );
|
||||
|
||||
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
|
||||
QString mask = QString(inet_ntoa(sin.sin_addr));
|
||||
memcpy ( &sin, &ifr.ifr_addr, sizeof ( sin ) );
|
||||
QString mask = QString ( inet_ntoa ( sin.sin_addr ) );
|
||||
|
||||
//mac
|
||||
if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0)
|
||||
perror("ioctl");
|
||||
if ( ioctl ( sockfd, SIOCGIFHWADDR, &ifr ) < 0 )
|
||||
perror ( "ioctl" );
|
||||
|
||||
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
|
||||
QString mac = QString(inet_ntoa(sin.sin_addr));
|
||||
close(sockfd);
|
||||
memcpy ( &sin, &ifr.ifr_addr, sizeof ( sin ) );
|
||||
QString mac = QString ( inet_ntoa ( sin.sin_addr ) );
|
||||
close ( sockfd );
|
||||
//gw
|
||||
FILE* fp;
|
||||
char buf[MAX_PATH];
|
||||
char gateway[MAX_PATH];
|
||||
bzero(buf, MAX_PATH);
|
||||
bzero(gateway, MAX_PATH);
|
||||
fp = popen("ip route", "r");
|
||||
bzero ( buf, MAX_PATH );
|
||||
bzero ( gateway, MAX_PATH );
|
||||
fp = popen ( "ip route", "r" );
|
||||
|
||||
while (fgets(buf, sizeof(buf), fp) != NULL)
|
||||
while ( fgets ( buf, sizeof ( buf ), fp ) != NULL )
|
||||
{
|
||||
if (strstr(buf, "default via"))
|
||||
if ( strstr ( buf, "default via" ) )
|
||||
{
|
||||
sscanf(buf, "%*s%*s%s", gateway);
|
||||
sscanf ( buf, "%*s%*s%s", gateway );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pclose(fp);
|
||||
pclose ( fp );
|
||||
QString gw = gateway;
|
||||
//dns
|
||||
QFile file("/etc/resolv.conf");
|
||||
file.open(QFile::ReadOnly);
|
||||
QFile file ( "/etc/resolv.conf" );
|
||||
file.open ( QFile::ReadOnly );
|
||||
QByteArray nameserver = file.readLine();
|
||||
nameserver[nameserver.size() - 1] = '\0';
|
||||
QList<QByteArray> namelist = nameserver.split(' ');
|
||||
QList<QByteArray> namelist = nameserver.split ( ' ' );
|
||||
QString dns = namelist.size() > 1 ? namelist[1] : gw;
|
||||
file.close();
|
||||
|
||||
//pt
|
||||
pline() << netname << ip << mask << gw << dns;
|
||||
|
||||
setAddr(ip, mask, gw, dns);
|
||||
setAddr ( ip, mask, gw, dns );
|
||||
saveScript();
|
||||
}
|
||||
|
||||
@ -297,32 +297,32 @@ void QQtEthenetManager::checkNetworkClear()
|
||||
m_clearThread->start();
|
||||
}
|
||||
|
||||
QQtEthenetManager::QQtEthenetManager(QObject* parent) :
|
||||
QObject(parent)
|
||||
QQtEthenetManager::QQtEthenetManager ( QObject* parent ) :
|
||||
QObject ( parent )
|
||||
{
|
||||
m_bUseDHCP = false;
|
||||
m_clearThread = new QQtNetWorkClearThread(this);
|
||||
connect(m_clearThread, SIGNAL(cleared()), this, SIGNAL(sigNetworkClear()));
|
||||
connect(m_clearThread, SIGNAL(notcleared()), this, SIGNAL(sigNetworkNotClear()));
|
||||
m_thread = new QQtDHCPThread(this);
|
||||
connect(m_thread, SIGNAL(passed(QString)), this, SLOT(DhcpPassed(QString)));
|
||||
m_clearThread = new QQtNetWorkClearThread ( this );
|
||||
connect ( m_clearThread, SIGNAL ( cleared() ), this, SIGNAL ( sigNetworkClear() ) );
|
||||
connect ( m_clearThread, SIGNAL ( notcleared() ), this, SIGNAL ( sigNetworkNotClear() ) );
|
||||
m_thread = new QQtDHCPThread ( this );
|
||||
connect ( m_thread, SIGNAL ( passed ( QString ) ), this, SLOT ( DhcpPassed ( QString ) ) );
|
||||
/*
|
||||
* 检查网线
|
||||
* 搜索热点
|
||||
* 刷新连接状态
|
||||
*/
|
||||
m_workTimer = new QTimer(this);
|
||||
m_workTimer->setSingleShot(false);
|
||||
connect(m_workTimer, SIGNAL(timeout()), this, SLOT(refreshWifiList()));
|
||||
connect(m_workTimer, SIGNAL(timeout()), this, SLOT(refreshWifiStatus()));
|
||||
connect(m_workTimer, SIGNAL(timeout()), this, SLOT(checkLanConnection()));
|
||||
connect(m_workTimer, SIGNAL(timeout()), this, SLOT(checkNetworkClear()));
|
||||
m_workTimer = new QTimer ( this );
|
||||
m_workTimer->setSingleShot ( false );
|
||||
connect ( m_workTimer, SIGNAL ( timeout() ), this, SLOT ( refreshWifiList() ) );
|
||||
connect ( m_workTimer, SIGNAL ( timeout() ), this, SLOT ( refreshWifiStatus() ) );
|
||||
connect ( m_workTimer, SIGNAL ( timeout() ), this, SLOT ( checkLanConnection() ) );
|
||||
connect ( m_workTimer, SIGNAL ( timeout() ), this, SLOT ( checkNetworkClear() ) );
|
||||
#ifdef __EMBEDDED_LINUX__
|
||||
m_workTimer->start(5000);
|
||||
m_workTimer->start ( 5000 );
|
||||
/*
|
||||
* 更新一次,以后一直调用scan_r 5-6s
|
||||
*/
|
||||
system("wpa_cli -iwlan0 scan");
|
||||
system ( "wpa_cli -iwlan0 scan" );
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -336,62 +336,63 @@ void QQtEthenetManager::restoreWifi()
|
||||
char cmdbuf[MAX_PATH];
|
||||
char cmdresult[MAX_PATH];
|
||||
|
||||
FILE* fp = fopen("/etc/wpa_supplicant.conf", "wb");
|
||||
fprintf(fp, "ctrl_interface=/var/run/wpa_supplicant\nctrl_interface_group=0\nap_scan=1\n\n");
|
||||
FILE* fp = fopen ( "/etc/wpa_supplicant.conf", "wb" );
|
||||
fprintf ( fp, "ctrl_interface=/var/run/wpa_supplicant\nctrl_interface_group=0\nap_scan=1\n\n" );
|
||||
|
||||
if ("NO" == encryt)
|
||||
if ( "NO" == encryt )
|
||||
{
|
||||
pline() << "None Encryption";
|
||||
fprintf(fp, "network={\n\tssid=%s\n\tkey_mgmt=NONE\n\tpriority=5\n}\n", name.toLatin1().data());
|
||||
fprintf ( fp, "network={\n\tssid=%s\n\tkey_mgmt=NONE\n\tpriority=5\n}\n", name.toLatin1().data() );
|
||||
}
|
||||
else if ("WEP" == type)
|
||||
else if ( "WEP" == type )
|
||||
{
|
||||
pline() << "WEP Encryption";
|
||||
fprintf(fp,
|
||||
"network={\n\tssid=\"%s\"\n\tkey_mgmt=NONE\n\twep_key0=%s\n\twep_tx_keyidx=0\n\tpriority=5\n\tauth_alg=SHARED\n}\n",
|
||||
name.toLatin1().data(), password.toLatin1().data());
|
||||
fprintf ( fp,
|
||||
"network={\n\tssid=\"%s\"\n\tkey_mgmt=NONE\n\twep_key0=%s\n\twep_tx_keyidx=0\n\tpriority=5\n\tauth_alg=SHARED\n}\n",
|
||||
name.toLatin1().data(), password.toLatin1().data() );
|
||||
}
|
||||
else if ("WPA" == type)
|
||||
else if ( "WPA" == type )
|
||||
{
|
||||
pline() << "WPA Encryption";
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
bzero(cmdresult, MAX_PATH);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
bzero ( cmdresult, MAX_PATH );
|
||||
#if 0
|
||||
sprintf(cmdbuf, "wpa_passphrase %s %s | awk 'NR==4{print $1}'", name.toLatin1().data(), wifiPassword.toLatin1().data());
|
||||
FILE* pp = popen(cmdbuf, "r"); //建立管道
|
||||
fgets(cmdresult, sizeof(cmdresult), pp) ; //""
|
||||
pclose(pp);
|
||||
fprintf(fp,
|
||||
"network={\n\tssid=\"%s\"\n\tkey_mgmt=WPA-PSK\n\tgroup=TKIP\n\tpairwise=CCMP\n\tproto=WPA\n\t#psk=\"%s\"\n\t%s\tpriority=5\n}\n",
|
||||
name, wifiPassword, cmdresult);
|
||||
sprintf ( cmdbuf, "wpa_passphrase %s %s | awk 'NR==4{print $1}'", name.toLatin1().data(),
|
||||
wifiPassword.toLatin1().data() );
|
||||
FILE* pp = popen ( cmdbuf, "r" ); //建立管道
|
||||
fgets ( cmdresult, sizeof ( cmdresult ), pp ) ; //""
|
||||
pclose ( pp );
|
||||
fprintf ( fp,
|
||||
"network={\n\tssid=\"%s\"\n\tkey_mgmt=WPA-PSK\n\tgroup=TKIP\n\tpairwise=CCMP\n\tproto=WPA\n\t#psk=\"%s\"\n\t%s\tpriority=5\n}\n",
|
||||
name, wifiPassword, cmdresult );
|
||||
#else
|
||||
sprintf(cmdbuf, "wpa_passphrase %s %s", name.toLatin1().data(), password.toLatin1().data());
|
||||
FILE* pp = popen(cmdbuf, "r"); //建立管道
|
||||
sprintf ( cmdbuf, "wpa_passphrase %s %s", name.toLatin1().data(), password.toLatin1().data() );
|
||||
FILE* pp = popen ( cmdbuf, "r" ); //建立管道
|
||||
|
||||
while (fgets(cmdresult, sizeof(cmdresult), pp)) //""
|
||||
while ( fgets ( cmdresult, sizeof ( cmdresult ), pp ) ) //""
|
||||
{
|
||||
fputs(cmdresult, fp);
|
||||
fputs ( cmdresult, fp );
|
||||
}
|
||||
|
||||
pclose(pp);
|
||||
pclose ( pp );
|
||||
#endif
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
fclose ( fp );
|
||||
}
|
||||
|
||||
bool QQtEthenetManager::restartWifi()
|
||||
{
|
||||
char cmdbuf[MAX_PATH];
|
||||
char cmdresult[MAX_PATH]; //设置一个合适的长度,以存储每一行输出
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
bzero(cmdresult, MAX_PATH);
|
||||
sprintf(cmdbuf, "wpa_cli -iwlan0 reconf");
|
||||
FILE* pp = popen(cmdbuf, "r"); //建立管道
|
||||
fgets(cmdresult, sizeof(cmdresult), pp); //""
|
||||
pclose(pp);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
bzero ( cmdresult, MAX_PATH );
|
||||
sprintf ( cmdbuf, "wpa_cli -iwlan0 reconf" );
|
||||
FILE* pp = popen ( cmdbuf, "r" ); //建立管道
|
||||
fgets ( cmdresult, sizeof ( cmdresult ), pp ); //""
|
||||
pclose ( pp );
|
||||
|
||||
if (strstr(cmdresult, "FAIL"))
|
||||
if ( strstr ( cmdresult, "FAIL" ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -400,139 +401,139 @@ bool QQtEthenetManager::restartWifi()
|
||||
void QQtEthenetManager::saveScript()
|
||||
{
|
||||
QString ip, mask, gw, dns;
|
||||
getAddr(ip, mask, gw, dns);
|
||||
getAddr ( ip, mask, gw, dns );
|
||||
|
||||
QFile script("./net.sh");
|
||||
script.open(QFile::WriteOnly);
|
||||
QFile script ( "./init_net.sh" );
|
||||
script.open ( QFile::WriteOnly );
|
||||
char cmdbuf[MAX_PATH];
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "#!/bin/sh\n\n");
|
||||
script.write(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "#!/bin/sh\n\n" );
|
||||
script.write ( cmdbuf );
|
||||
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "ifconfig eth0 %s netmask %s up\n",
|
||||
ip.toLatin1().data(),
|
||||
mask.toLatin1().data());
|
||||
script.write(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "ifconfig eth0 %s netmask %s up\n",
|
||||
ip.toLatin1().data(),
|
||||
mask.toLatin1().data() );
|
||||
script.write ( cmdbuf );
|
||||
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "ifconfig wlan0 %s netmask %s up\n",
|
||||
ip.toLatin1().data(),
|
||||
mask.toLatin1().data());
|
||||
script.write(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "ifconfig wlan0 %s netmask %s up\n",
|
||||
ip.toLatin1().data(),
|
||||
mask.toLatin1().data() );
|
||||
script.write ( cmdbuf );
|
||||
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "route add default gw %s netmask 0.0.0.0 dev eth0\n",
|
||||
gw.toLatin1().data());
|
||||
script.write(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "route add default gw %s netmask 0.0.0.0 dev eth0\n",
|
||||
gw.toLatin1().data() );
|
||||
script.write ( cmdbuf );
|
||||
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "route add default gw %s netmask 0.0.0.0 dev wlan0\n",
|
||||
gw.toLatin1().data());
|
||||
script.write(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "route add default gw %s netmask 0.0.0.0 dev wlan0\n",
|
||||
gw.toLatin1().data() );
|
||||
script.write ( cmdbuf );
|
||||
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "echo nameserver %s > /etc/resolv.conf\n", dns.toLatin1().data());
|
||||
script.write(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "echo nameserver %s > /etc/resolv.conf\n", dns.toLatin1().data() );
|
||||
script.write ( cmdbuf );
|
||||
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa_supplicant.conf\n");
|
||||
script.write(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa_supplicant.conf\n" );
|
||||
script.write ( cmdbuf );
|
||||
script.close();
|
||||
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "chmod +x ./net.sh");
|
||||
system(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "chmod +x ./init_net.sh" );
|
||||
system ( cmdbuf );
|
||||
}
|
||||
|
||||
void QQtEthenetManager::config()
|
||||
{
|
||||
char cmdbuf[MAX_PATH];
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "ip route | awk '{print $1}' | while read line; do ip route del $line; done");
|
||||
system(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "ip route | awk '{print $1}' | while read line; do ip route del $line; done" );
|
||||
system ( cmdbuf );
|
||||
//system("route");
|
||||
|
||||
if (m_bUseDHCP)
|
||||
if ( m_bUseDHCP )
|
||||
{
|
||||
m_thread->setnet(m_netName);
|
||||
m_thread->setnet ( m_netName );
|
||||
m_thread->start();
|
||||
return;
|
||||
}
|
||||
|
||||
QString ip, mask, gw, dns;
|
||||
getAddr(ip, mask, gw, dns);
|
||||
getAddr ( ip, mask, gw, dns );
|
||||
|
||||
pline() << m_netName << ip << mask << gw << dns;
|
||||
|
||||
// add .0 route
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "ifconfig %s 0.0.0.0 up", m_netName.toLatin1().data());
|
||||
system(cmdbuf);
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "ifconfig %s %s netmask %s",
|
||||
m_netName.toLatin1().data(),
|
||||
ip.toLatin1().data(),
|
||||
mask.toLatin1().data());
|
||||
system(cmdbuf);
|
||||
QStringList sl = gw.split(".");
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "ifconfig %s 0.0.0.0 up", m_netName.toLatin1().data() );
|
||||
system ( cmdbuf );
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "ifconfig %s %s netmask %s",
|
||||
m_netName.toLatin1().data(),
|
||||
ip.toLatin1().data(),
|
||||
mask.toLatin1().data() );
|
||||
system ( cmdbuf );
|
||||
QStringList sl = gw.split ( "." );
|
||||
|
||||
if (sl.size() < 3)
|
||||
if ( sl.size() < 3 )
|
||||
{
|
||||
sl.clear();
|
||||
sl << "0" << "0" << "0" << "0";
|
||||
}
|
||||
|
||||
QString net = QString("%1.%2.%3.0").arg(sl[0]).arg(sl[1]).arg(sl[2]);
|
||||
QString net = QString ( "%1.%2.%3.0" ).arg ( sl[0] ).arg ( sl[1] ).arg ( sl[2] );
|
||||
#if 0
|
||||
/*
|
||||
* dhcp后 ifconfig up 引发了添加这条route
|
||||
* ifconfig 0.0.0.0 也能引发添加这条route
|
||||
*/
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "route add -net %s netmask %s dev %s",
|
||||
net.toLatin1().data(),
|
||||
mask.toLatin1().data(),
|
||||
m_netName.toLatin1().data());
|
||||
system(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "route add -net %s netmask %s dev %s",
|
||||
net.toLatin1().data(),
|
||||
mask.toLatin1().data(),
|
||||
m_netName.toLatin1().data() );
|
||||
system ( cmdbuf );
|
||||
#endif
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "route add default gw %s netmask 0.0.0.0 dev %s",
|
||||
gw.toLatin1().data(),
|
||||
m_netName.toLatin1().data());
|
||||
system(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "route add default gw %s netmask 0.0.0.0 dev %s",
|
||||
gw.toLatin1().data(),
|
||||
m_netName.toLatin1().data() );
|
||||
system ( cmdbuf );
|
||||
//system("route");
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "echo nameserver %s > /etc/resolv.conf", dns.toLatin1().data());
|
||||
system(cmdbuf);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "echo nameserver %s > /etc/resolv.conf", dns.toLatin1().data() );
|
||||
system ( cmdbuf );
|
||||
}
|
||||
|
||||
void QQtEthenetManager::setAddr(QString ip, QString mask, QString gw, QString dns)
|
||||
void QQtEthenetManager::setAddr ( QString ip, QString mask, QString gw, QString dns )
|
||||
{
|
||||
QSettings netSet;
|
||||
netSet.setValue("/Network/IP", ip);
|
||||
netSet.setValue("/Network/Gateway", gw);
|
||||
netSet.setValue("/Network/Mask", mask);
|
||||
netSet.setValue("/Network/DNS", dns);
|
||||
netSet.setValue ( "/Network/IP", ip );
|
||||
netSet.setValue ( "/Network/Gateway", gw );
|
||||
netSet.setValue ( "/Network/Mask", mask );
|
||||
netSet.setValue ( "/Network/DNS", dns );
|
||||
netSet.sync();
|
||||
}
|
||||
|
||||
void QQtEthenetManager::getAddr(QString& ip, QString& mask, QString& gw, QString& dns)
|
||||
void QQtEthenetManager::getAddr ( QString& ip, QString& mask, QString& gw, QString& dns )
|
||||
{
|
||||
QSettings netSet;
|
||||
ip = netSet.value("/Network/IP").toString();
|
||||
mask = netSet.value("/Network/Mask").toString();
|
||||
gw = netSet.value("/Network/Gateway").toString();
|
||||
dns = netSet.value("/Network/DNS").toString();
|
||||
ip = netSet.value ( "/Network/IP" ).toString();
|
||||
mask = netSet.value ( "/Network/Mask" ).toString();
|
||||
gw = netSet.value ( "/Network/Gateway" ).toString();
|
||||
dns = netSet.value ( "/Network/DNS" ).toString();
|
||||
}
|
||||
|
||||
void QQtDHCPThread::run()
|
||||
{
|
||||
char cmdbuf[MAX_PATH];
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
sprintf(cmdbuf, "udhcpc -i %s", net.toLatin1().data());
|
||||
system(cmdbuf);
|
||||
emit passed(net);
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
sprintf ( cmdbuf, "udhcpc -i %s", net.toLatin1().data() );
|
||||
system ( cmdbuf );
|
||||
emit passed ( net );
|
||||
}
|
||||
|
||||
|
||||
@ -542,24 +543,24 @@ void QQtNetWorkClearThread::run()
|
||||
bool bclear = false;
|
||||
char cmdbuf[MAX_PATH];
|
||||
char cmdresult[MAX_PATH]; //设置一个合适的长度,以存储每一行输出
|
||||
bzero(cmdbuf, MAX_PATH);
|
||||
bzero(cmdresult, MAX_PATH);
|
||||
sprintf(cmdbuf, "ping 222.175.114.244 -w 2 -c 1");
|
||||
FILE* pp = popen(cmdbuf, "r"); //建立管道
|
||||
bzero ( cmdbuf, MAX_PATH );
|
||||
bzero ( cmdresult, MAX_PATH );
|
||||
sprintf ( cmdbuf, "ping 222.175.114.244 -w 2 -c 1" );
|
||||
FILE* pp = popen ( cmdbuf, "r" ); //建立管道
|
||||
|
||||
while (fgets(cmdresult, sizeof(cmdresult), pp))
|
||||
while ( fgets ( cmdresult, sizeof ( cmdresult ), pp ) )
|
||||
{
|
||||
if (strstr(cmdresult, "1 packets transmitted, 1 packets received, 0% packet loss"))
|
||||
if ( strstr ( cmdresult, "1 packets transmitted, 1 packets received, 0% packet loss" ) )
|
||||
bclear = true;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
pclose(pp);
|
||||
pclose ( pp );
|
||||
|
||||
if (_bclear != bclear)
|
||||
if ( _bclear != bclear )
|
||||
{
|
||||
if (bclear)
|
||||
if ( bclear )
|
||||
emit cleared();
|
||||
else
|
||||
emit notcleared();
|
||||
|
@ -41,6 +41,24 @@ private:
|
||||
};
|
||||
|
||||
// thread unsafe
|
||||
/**
|
||||
* @brief The QQtEthenetManager class
|
||||
* 原理:
|
||||
* S1:系统启动,调用init_net.sh
|
||||
* S2:系统运行,用户通过页面设置WiFi或者有线的IP等,或者设置为自动获取。
|
||||
* 保存IP到配置文件,启动时显示到用户页面上
|
||||
* 保存IP等到init_net.sh,系统启动时,网络连接状态正常。
|
||||
* 保存WiFi设置等到/etc/wpa_supplicant.conf
|
||||
* S3:用户插拔网线,WiFi自动切换为有线。
|
||||
* S4:用户重启系统,进入S1.
|
||||
*
|
||||
* 使用说明:
|
||||
* 调用QQtEthnetManager::Instance(parent),并且连接相应的WiFi信号和用户的槽
|
||||
* 通过wifiList(),显示给用户看WiFi列表。每5s自动更新一次。在槽当中调用并更新界面
|
||||
* 通过setCurrentWiFi()更换用户连接的WiFi。用户点击更改输入密码了,就调这个保存。会自动配置WiFi和根据用户IP或者DHCP重来连接新WiFi。
|
||||
*
|
||||
*
|
||||
*/
|
||||
class QQTSHARED_EXPORT QQtEthenetManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -57,7 +75,7 @@ public:
|
||||
/**
|
||||
* @brief configIPAddress
|
||||
* wpa_suplicant.conf
|
||||
* net.sh
|
||||
* init_net.sh
|
||||
* ipaddr.conf
|
||||
*/
|
||||
void ipconfig();
|
||||
|
Loading…
x
Reference in New Issue
Block a user