#include "module4g.h"

module4g::module4g(QObject *parent) : QObject(parent)
{
    eth1_ip_kong = false;//网线ip状态判断
    eth1_line_lan_flag = true;
    times = 0;
    QTimer::singleShot(1000, this, SLOT(onTimerTimeOutPing4g()));
}

void module4g::onTimerTimeOutPing4g()
{
    qDebug("ping 4g: timeout 5s ping -I ppp0 202.108.22.5 > /home/data/4g_quailty");

    std::system("timeout 5s ping -I ppp0 www.baidu.com -n > /home/data/4g_quailty");
    QTimer::singleShot(5000, this, SLOT(onTimerTimeOutCheck4g()));
}

void module4g::onTimerTimeOutCheck4g()
{
    QFile file_read_net("/home/data/4g_quailty");
    QString net_check = "";
    bool flag_4g = false;
    if(file_read_net.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream in(&file_read_net);//创建一个对象让它去读文件
        QString ping1=in.readLine();
        QString ping2=in.readLine();
        net_check=ping2.left(2);
    }
    file_read_net.close();

    if (net_check=="64")
    {
        flag_4g = true;
    }
    else
    {
        flag_4g = false;
    }
    emit sig4gstate(flag_4g);
    QString line_4G_ip = "";
    if(flag_4g == false)
    {
        times = times +1;
        if(times > 20)
        {
            times = 0;
            std::system("/home/4G_reset.sh &");

            std::system("ifconfig ppp0 | grep \"inet addr\" | awk '{ print $2}' | awk -F: '{print $2}' > /home/4G_IP");

            QFile file_read_gip("/home/4G_IP");
            if(file_read_gip.open(QIODevice::ReadOnly | QIODevice::Text))
            {
                QTextStream in(&file_read_gip);//创建一个对象让它去读文件
                line_4G_ip=in.readLine();
            }
            file_read_gip.close();

            if(line_4G_ip == "")
            {

            }else{
                QString IP_4G_set="route add default gw "+line_4G_ip;
                QString IP_4G_reset="route del default gw "+line_4G_ip;
                std::system(IP_4G_reset.toLatin1());
                std::system(IP_4G_set.toLatin1());
            }
        }
    }

    QFile file_write_Lan("/home/LAN_IP");
    int count = 0;
    bool flag_lan = false;
    QString line_lan_ip = "";
    QList<QNetworkInterface> netList =  QNetworkInterface::allInterfaces();

    foreach(QNetworkInterface net,netList)//遍历每一个接口信息
    {        
        if(net.name() == "eth1"){
            count++;
            QList<QNetworkAddressEntry> entryList = net.addressEntries();//获取ip地址和子网掩码和广播地址
            if(entryList.isEmpty())
            {
                flag_lan = false;
                if(!file_write_Lan.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate))
                {
                    qDebug()<<"文件清空失败";
                }
                file_write_Lan.close();               
            }else{
                flag_lan = true;
                foreach(QNetworkAddressEntry entry,entryList)//遍历ip条目列表
                {                   
                    if(entry.ip().protocol() == QAbstractSocket::IPv4Protocol){                        
                        if(file_write_Lan.open(QIODevice::WriteOnly))
                        {
                            QTextStream setWIFI_data(&file_write_Lan);
                            setWIFI_data<<entry.ip().toString()<<endl;
                        }
                        file_write_Lan.close();
                        line_lan_ip = entry.ip().toString();
                    }else{

                    }
                }
            }
        }else{

        }
    }
    if(count == 0)
    {
        flag_lan = false;
        if(!file_write_Lan.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate))
        {
            qDebug()<<"文件清空失败";
        }
        file_write_Lan.close();
    }
    emit sigLanState(flag_lan);

    QString wifi_ip = "";

    if(flag_lan == false)
    {
        if(eth1_ip_kong == false)
        {
            eth1_line_lan_flag = false;
            eth1_ip_kong = true;
            QFile file_read_gip("/home/4G_IP");
            if(file_read_gip.open(QIODevice::ReadOnly | QIODevice::Text))
            {
                QTextStream in(&file_read_gip);//创建一个对象让它去读文件
                line_4G_ip=in.readLine();
            }
            file_read_gip.close();

            QFile file_read_wifi_ip("/home/WIFI_IP");

            if(file_read_wifi_ip.open(QIODevice::ReadOnly | QIODevice::Text))
            {
                QTextStream in(&file_read_wifi_ip);//创建一个对象让它去读文件
                wifi_ip=in.readLine();
            }
            file_read_wifi_ip.close();

            if(line_4G_ip == "")
            {
                if(wifi_ip == "")
                {
                    //eth1_ip_kong = false;
                }else{
                    QString wifi_ip_reset="route del default gw "+wifi_ip;
                    std::system(wifi_ip_reset.toLatin1());
                    QString wifi_ip_set="route add default gw "+wifi_ip;
                    std::system(wifi_ip_set.toLatin1());
                }
            }else{
                QString IP_4G_set="route add default gw "+line_4G_ip;
                QString IP_4G_reset="route del default gw "+line_4G_ip;
                std::system(IP_4G_reset.toLatin1());
                std::system(IP_4G_set.toLatin1());
                if(wifi_ip == "")
                {

                }else{
                    QString wifi_ip_reset="route del default gw "+wifi_ip;
                    std::system(wifi_ip_reset.toLatin1());
                    QString wifi_ip_set="route add default dev mlan0 metric 20 gw "+wifi_ip;
                    std::system(wifi_ip_set.toLatin1());
                }
            }
        }else{

        }
    }else{
        eth1_ip_kong = false;
        if(eth1_line_lan_flag == false)
        {
            int local = line_lan_ip.indexOf('.',9,Qt::CaseInsensitive);//意思是从第9位往后找，找到的第一个‘.’所在的位置
            line_lan_ip=line_lan_ip.left(local+1);//从左向右截取n个字符串
            line_lan_ip=line_lan_ip+"1";

            line_lan_ip="route add default gw "+line_lan_ip;
            std::system(line_lan_ip.toLatin1());
            eth1_line_lan_flag = true;
        }else{
            if(flag_4g == false)
            {
                int local = line_lan_ip.indexOf('.',9,Qt::CaseInsensitive);//意思是从第9位往后找，找到的第一个‘.’所在的位置
                line_lan_ip=line_lan_ip.left(local+1);//从左向右截取n个字符串
                line_lan_ip=line_lan_ip+"1";

                line_lan_ip="route add default gw "+line_lan_ip;
                std::system(line_lan_ip.toLatin1());
            }
        }
    }
    QTimer::singleShot(1000, this, SLOT(onTimerTimeOutPing4g()));
}
