diff --git a/src/network/qqtethenetmanager.cpp b/src/network/qqtethenetmanager.cpp index e98d77da..6e6fa51c 100644 --- a/src/network/qqtethenetmanager.cpp +++ b/src/network/qqtethenetmanager.cpp @@ -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::Iterator it = m_wifiList.begin(); - it != m_wifiList.end(); it++) + for ( QList::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 namelist = nameserver.split(' '); + QList 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(); diff --git a/src/network/qqtethenetmanager.h b/src/network/qqtethenetmanager.h index 7ec20e3d..623267db 100644 --- a/src/network/qqtethenetmanager.h +++ b/src/network/qqtethenetmanager.h @@ -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();