13 12
发新话题
打印

帮找一下BUG

帮找一下BUG

char* pbuf = *ppbuf;
        long bufsize = *pbufsize;
        long nbyte = 0;

        char mimeGif [] = "image/gif";
        char mimePng [] = "iamge/png";
        char mimeJpeg [] = "iamge/jpeg";
        char mimeHtml [] = "text/html";
        char mimeObj [128] = {0};
        const char* mimeAccepts [] = {mimeHtml, mimeJpeg, mimeGif, mimePng, 0};

        DWORD len;
        DWORD statusCode = 0;
        DWORD contentLen = 0;
        char contentLocation [MAX_URL] = {0};
        char remark [1024-18-MAX_URL] = {0};

        //-------------------------------------------------------------------------- connect

        HINTERNET hConnect;
        char hostname [MAX_URL] = {0};
        url_get_hostname(url, hostname);
        DWORD port = url_get_port(url);
        hConnect = g_connectPool->get_conn(hostname, port);
        if (!hConnect) {
                DWORD err = GetLastError();
                sprintf(remark, "connect fail: %d", err);
                if (bPage) { g_qFailedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_A, url, remark); }
                else { g_qFailedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_P, url, remark); }
                return false;
        }

        //-------------------------------------------------------------------------- request

        char urlpath [MAX_URL] = {0};
        char extrainfo [MAX_URL] = {0};
        url_get_urlpath(url, urlpath);
        url_get_extrainfo(url, extrainfo);
        string obj = urlpath;
        obj += extrainfo;
        HINTERNET hRequest = HttpOpenRequest(
                hConnect, "GET", obj.c_str(), "HTTP/1.1", NULL, mimeAccepts,
                INTERNET_FLAG_NO_UI | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
        if (!hRequest) {
                DWORD err = GetLastError();
                sprintf(remark, "request fail: %d", err);
                if (bPage) { g_qFailedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_A, url, remark); }
                else { g_qFailedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_P, url, remark); }
                return false;
        }

        InternetSetOption(hRequest, INTERNET_OPTION_RECEIVE_TIMEOUT, &g_recvTimeout, sizeof(g_recvTimeout));
        InternetSetOption(hRequest, INTERNET_OPTION_SEND_TIMEOUT, &g_sendTimeout, sizeof(g_sendTimeout));
        InternetSetOption(hRequest, INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, &g_recvTimeout, sizeof(g_recvTimeout));
        InternetSetOption(hRequest, INTERNET_OPTION_DATA_SEND_TIMEOUT, &g_sendTimeout, sizeof(g_sendTimeout));
        InternetSetOption(hRequest, INTERNET_OPTION_CONNECT_RETRIES, &g_connectRetries, sizeof(g_connectRetries));

        if (!HttpSendRequest(hRequest, "UA-CPU:x86\r\n", -1, NULL, 0)) {
                DWORD err = GetLastError();
                sprintf(remark, "request fail: %d", err);
                if (bPage) { g_qFailedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_A, url, remark); }
                else { g_qFailedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_P, url, remark); }
                return false;
        }
        len = sizeof(statusCode);
        if (!HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, &statusCode, &len, NULL)) {
                DWORD err = GetLastError();
                sprintf(remark, "request fail: %d", err);
                if (bPage) { g_qFailedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_A, url, remark); }
                else { g_qFailedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_P, url, remark); }
                return false;
        }

        //-------------------------------------------------------------------------- StatusCode

        int statusCodeType = get_downloadStatusType(statusCode);

        if (statusCodeType == STATUSCODE_REDIRECT)
        {
                sprintf(remark, "statuscode=%d", statusCode);
                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }

                ZeroMemory(remark, 1024-MAX_URL-18);
                lstrcpy(remark, "http redirect");

                len = MAX_URL;
                HttpQueryInfo(hRequest, HTTP_QUERY_LOCATION, contentLocation, &len, NULL);
                if (is_validurl(contentLocation)) {
                        if (bPage) { g_qAvailableA[g_iExplorationDepth->get()]->add(contentLocation, remark); }
                        else { g_qAvailableP[g_iExplorationDepth->get()]->add(contentLocation, remark); }
                }

                return false;
        }
        else if (statusCodeType == STATUSCODE_BROKEN)
        {
                sprintf(remark, "statuscode=%d", statusCode);
                if (bPage) { g_qFailedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_A, url, remark); }
                else { g_qFailedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_P, url, remark); }
                return FALSE;
        }
        else if (statusCodeType == STATUSCODE_INVALID)
        {
                sprintf(remark, "statuscode=%d", statusCode);
                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }
                return FALSE;
        }

        //-------------------------------------------------------------------------- MimeType

        len = sizeof(mimeObj);
        if (!HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_TYPE, mimeObj, &len, NULL)) {
                DWORD err = GetLastError();
                sprintf(remark, "request fail: %d", err);
                if (bPage) { g_qFailedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_A, url, remark); }
                else { g_qFailedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_FAILED_P, url, remark); }
                return FALSE;
        }
        if ((!bPage) && strstr(mimeObj, mimeHtml)) {
                sprintf(remark, "invalid mime type: %s", mimeObj);
                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }
                return FALSE;
        }
        if ((!g_fJpg) && strstr(mimeObj, mimeJpeg)) {
                sprintf(remark, "invalid mime type: %s", mimeObj);
                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }
                return FALSE;
        }
        if ((!g_fGif) && strstr(mimeObj, mimeGif)) {
                sprintf(remark, "invalid mime type: %s", mimeObj);
                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }
                return FALSE;
        }
        if ((!g_fPng) && strstr(mimeObj, mimePng)) {
                sprintf(remark, "invalid mime type: %s", mimeObj);
                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }
                return FALSE;
        }
        else if (!(strstr(mimeObj, mimeHtml) || strstr(mimeObj, mimeJpeg) || strstr(mimeObj, mimeGif))) {
                sprintf(remark, "invalid mime type: %s", mimeObj);
                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }
                return FALSE;
        }

        //-------------------------------------------------------------------------- Length

        len = sizeof(contentLen);
        if (HttpQueryInfo(hRequest, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_CONTENT_LENGTH, &contentLen, &len, NULL)) {
                if (!bPage) {
                        contentLen = contentLen / 1024;
                        if (contentLen > g_maxP || contentLen < g_minP) {
                                sprintf(remark, "invalid file size: %dkb", contentLen);
                                g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark);
                                PostLog(ELEM_PROCESSED_P, url, remark);
                                return FALSE;
                        }
                }
                else if (contentLen / 1024 > MAX_FILESIZE) {
                        sprintf(remark, "invalid file size: %dkb", contentLen);
                        g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark);
                        PostLog(ELEM_PROCESSED_A, url, remark);
                        return FALSE;
                }
        }

        //-------------------------------------------------------------------------- Content-Location

        len = MAX_URL;
        HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LOCATION, contentLocation, &len, NULL);
        if (*contentLocation == 0) lstrcpy(contentLocation, url);
        string filename = path_get_filename(contentLocation);

        //-------------------------------------------------------------------------- Download

        DWORD cRead;
        char tmpbuf[TEMP_BUF];
        while (InternetReadFile(hRequest, tmpbuf, sizeof(tmpbuf), &cRead) && cRead)
        {
                if (nbyte+cRead <= bufsize) {
                        memmove(pbuf+nbyte, tmpbuf, cRead);
                        nbyte += cRead;
                }
                else
                {
                        char* p = (char*)malloc(bufsize+TEMP_BUF);
                        if (pbuf) {
                                memcpy(p, pbuf, bufsize);
                                free(pbuf);
                                pbuf = NULL;
                        }
                        memcpy(p+bufsize, tmpbuf, cRead);
                        nbyte += cRead;
                        pbuf = p;
                        bufsize += TEMP_BUF;
                        *pbufsize = bufsize;
                        *ppbuf = pbuf;
                        if (nbyte/1024 >= MAX_FILESIZE)
                        {
                                sprintf(remark, "invalid file size");
                                if (bPage) { g_qProcessedA[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_A, url, remark); }
                                else { g_qProcessedP[g_iExplorationDepth->get()]->add(url, remark); PostLog(ELEM_PROCESSED_P, url, remark); }
                                return false;
                        }
                }
        }

        //-------------------------------------------------------------------------- SaveFiles

TOP

这么长
你才是国家队的,你全家都是国家队的

TOP

lz坐火车归来,成功由外语沙龙转战技术区

TOP

也不告诉出了什么问题,就要大家帮你找BUG?

TOP

引用:
原帖由 winsoft 于 2008-2-19 18:56 发表
也不告诉出了什么问题,就要大家帮你找BUG?
来单来单来单 :

TOP

建议lz让大家帮忙收单

TOP

char mimeGif [] = "image/gif";
        char mimePng [] = "iamge/png";
        char mimeJpeg [] = "iamge/jpeg";

BUG: 后两个 iamge 应该是 image
楼主是否不爱用拷贝/粘贴? 我已经变态到两个字母都要拷的地步了
本帖最近评分记录
  • 网普科技 活力 +10 我给加点,呵呵 2008-2-20 10:39

TOP

引用:
原帖由 enthappy 于 2008-2-19 20:15 发表
char mimeGif [] = "image/gif";
        char mimePng [] = "iamge/png";
        char mimeJpeg [] = "iamge/jpeg";

BUG: 后两个 iamge 应该是 image
楼主是否不爱用拷贝/粘贴? 我已经变态到两个字母都要拷 ...
我也喜欢拷贝,特别是变量区别大小写什么的。
我到中年了。没有钱!怎么办?

TOP

TOP

楼主,你应该把代码改为下面的,就对了:

int main(int argc, char** argv)
{
    return 0;
}

TOP

 13 12
发新话题