Exemple #1
0
/**
 *      test case for getDNS() functions 
 */
void 
TestEthernet::tcGetDNS(void)
{
	cout << "获取DNS服务:" << endl;

	cout << "参数为空时 :" <<endl;
	char *strPreferred = NULL;
	char *strAfternative = NULL;
	if (0 != getDNS(strPreferred, strAfternative))
	{
		cout << "获取DNS服务成功!" << endl;
		cout << "strPreferred :" << endl;  
		cout << "strAfternative :" << endl;
	}
	else
	{
		cout << "获取DNS服务失败!" << endl;
	}


	cout << "参数不为空时 :" <<endl;
	char strPreferred1[] = "Preferred";
	char strAfternative1[] = "strAfternative";

	cout << "before getDNS():" << endl;
	cout << "strPreferred :" << endl;  
	cout << "strAfternative :" << endl;

	cout << "After getDNS():" << endl;
	if (0 != getDNS(strPreferred1,strAfternative1))
	{
		cout << "获取DNS服务成功!" << endl;
		cout << "strPreferred :" << endl;  
		cout << "strAfternative :" << endl;
	}
	else
	{
		cout << "获取DNS服务失败!" << endl;
	}
}
bool SVT_HttpDownload::getHttpFileProcess()
{
    QFile f(mLocalFile);
    QIODevice::OpenMode mode=(mStartPos>0)?(QIODevice::WriteOnly|QIODevice::Append):QIODevice::WriteOnly;
    if(!f.open(mode))
    {
        mErrorStr="Can Not Open Local File";
        return false;
    }
    QByteArray arraybuffer;
    QUrl url(mUrl);
    SVT_IpAddress ip = getDNS(url.host());
    if(!ip.isValid())
    {
        mErrorStr="DNS Error";
        return false;
    }

    SVT_TcpSocket tcp_sock;
    char recv_buff[1024] = {0};
    QString request = "GET %1 HTTP/1.1\r\nConnection: Keep-Alive\r\nHost: %2\r\nRange: bytes=%3-\r\n\r\n";

    request = request.arg(url.path(), url.host()).arg(mStartPos);
    const QByteArray reqarray = request.toAscii();
    _SpeedCalculater speedCalc(200);
    bool headOk=false;
    quint64 total=0;
    quint64 processed=0;

    if(DO_AND_CHECKEXIT(tcp_sock.create())
       &&DO_AND_CHECKEXIT(tcp_sock.connect(ip,url.port(80)))
       &&(DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000))
          ||DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000))
          ||DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000))
          ||DO_AND_CHECKEXIT(tcp_sock.waitForWriteReady(1000))

          )
       &&DO_AND_CHECKEXIT(reqarray.size()==tcp_sock.sendData(reqarray.data(),reqarray.size()) )
       )
    {
        QDateTime ti_last_signal=QDateTime::currentDateTime().addYears(-1);
        while(!CAN_EXIT)
        {
            int readedtemp ;
            if( (readedtemp= tcp_sock.recvData(recv_buff, sizeof(recv_buff)) ) <=0)
            {
                break;
            }
            if(!headOk)
            {
                arraybuffer.append(recv_buff,readedtemp);
                int bound=getHttpHeaderBound(arraybuffer);
                if(bound >=0)
                {
                    total=getRecvFileSize(arraybuffer);
                    arraybuffer.remove(0,bound);
                    f.write(arraybuffer);
                    processed=arraybuffer.count();
//                    if(total <= 0)
//                    {
//                        mErrorStr="Wrong Total Size";
//                        return false;
//                    }
                    speedCalc.init();
                    headOk=true;
                }
            }
            else
            {
                processed+=readedtemp;
                f.write(recv_buff,readedtemp);

                if(ti_last_signal.addMSecs(200) < QDateTime::currentDateTime())
                {
                    speedCalc.addData(processed);
                    ti_last_signal=QDateTime::currentDateTime();
                    emit progress(mStartPos+processed, total, speedCalc.calculateSpeed());
                }
            }
        }
    }
    f.close();
    return (!total ||total==processed);
}