⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 http_svr.c

📁 Analog公司的ADSP_BF532上面实现以太网接口的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
                    // copy the buffer with page size
                    memcpy(TCP_TX_BUF, HTTP_WebSide, HTTP_BytesToSend);

                    // bytes to transmit
                    TCP_Tx_Data_Count = HTTP_BytesToSend;

                    // schedule buffer for transfer
                    TCP_TransmitTxBuffer();

                    // and we can close the connection
                    TCP_Close();

                    // everything sent
                    HTTP_BytesToSend = 0;
                }
            }
            // release buffer after parsing
            TCP_ReleaseRxBuffer();
        }
    }
}

/******************************************************************************
 * HTTP_SVR: HTTP_parse_cgi_buffer()
 *
 * Purpose:
 *  extracts CGI information from TCB Buffer
 *
 * Actions:
 *
 *****************************************************************************/
MC void HTTP_parse_cgi_buffer(BYTE* TCP_buffer, WORD length)
{
    char stime[10];
    int i;

    for(i=0; i < length; i++ )
    {
        if (*TCP_buffer == '=')
        {
            // test for day:
            if (!memcmp(TCP_buffer-3, "day", 3))
            {
                memcpy(stime, TCP_buffer+1, 4);
                sscanf(stime, "%d", &sys_day);
            }
            // test for hour:
            if (!memcmp(TCP_buffer-4, "hour", 3))
            {
                memcpy(stime, TCP_buffer+1, 4);
                sscanf(stime, "%d", &sys_hour);
            }
            // test for min:
            if (!memcmp(TCP_buffer-3, "min", 3))
            {
                memcpy(stime, TCP_buffer+1, 4);
                sscanf(stime, "%d", &sys_min);
            }
            // test for sec:
            if (!memcmp(TCP_buffer-3, "sec", 3))
            {
                memcpy(stime, TCP_buffer+1, 4);
                sscanf(stime, "%d", &sys_sec);
            }
        }
        TCP_buffer++;
    }
}


/******************************************************************************
 * HTTP_SVR: HTTP_insert_dynamic()
 *
 * Purpose:
 *  inserts information into buffer
 *
 * Actions:
 *
 *****************************************************************************/
MC void HTTP_insert_dynamic(BYTE* HTTP_page, WORD length)
{
    DWORD   time;
    char    stime[10];
    int     i;

    // search for "day"
    for(i=0; i < length; i++ )
    {
        if (*HTTP_page == 'd')
        {
            // test for day:
            if (!memcmp(HTTP_page, "day: ", 5))
            {
                // read clock and paste
                time = _inpd(RTC_STAT);
                sys_day = (time>>24);
                sprintf(stime, "%03d", sys_day);
                memcpy(HTTP_page+5, stime, 3);
            }
        }
        if (*HTTP_page == 't')
        {
            // test for time:
            if (!memcmp(HTTP_page, "time: ", 6))
            {
                // read clock and paste
                time = _inpd(RTC_STAT);
                sys_hour = ((time&0x00ff0000)>>16);
                sys_min  = ((time&0x0000ff00)>>8);
                sys_sec  = time&0x00000000ff;

                sprintf(stime, "%02d", sys_hour);
                memcpy(HTTP_page+6, stime, 2);

                sprintf(stime, "%02d", sys_min);
                memcpy(HTTP_page+9, stime, 2);

                sprintf(stime, "%02d", sys_sec);
                memcpy(HTTP_page+12, stime, 2);
            }
        }
        HTTP_page++;
    }
}

/******************************************************************************
 * HTTP_SVR: HTTP_parse_cf()
 *
 * Purpose:
 *  prints a proper directory
 *
 * Actions:
 *
 *****************************************************************************/
MC DWORD HTTP_parse_cf()
{
    int     dirsize = 0;
    BYTE    *dirptr = (BYTE*) HTTP_Buffer;
    char    stemp[10];
    int     i = 0;

    // print title
    memcpy(dirptr, "<html><title> Directory </title><body>\r\n", 40);
    dirptr += 40;
    dirsize += 40;

    // print header
    memcpy(dirptr, "EZ-LAN Server Directory List <p><hr><br><pre>\r\n", 47);
    dirptr += 47;
    dirsize += 47;

    // parse entries
    for(i=0; i<ATA_CurDirEnt; i++)
    {
        if (ATA_DS[i].DIR_Name[0] == '\0')
        {
            break;
        }
        // currently only extract 8.3 names
        if ((ATA_DS[i].DIR_Attr != 0x08) & (ATA_DS[i].DIR_Attr != 0x10) & (ATA_DS[i].DIR_Attr != 0x0f))
        {
            // new line string
            memcpy(dirptr, "<A HREF=\"/cf/", 13);
            dirptr += 13;
            // name for link
            memcpy(dirptr, &ATA_DS[i].DIR_Name, 12);
            dirptr += 12;
            // closing link
            memcpy(dirptr, "\">", 2);
            dirptr += 2;
            // name for display
            memcpy(dirptr, &ATA_DS[i].DIR_Name, 12);
            dirptr += 12;
            // two spaces and closing link
            memcpy(dirptr, "</A>  ", 6);
            dirptr += 6;
            // size of file
            sprintf(stemp, "%08d", ATA_DS[i].DIR_FileSize);
            memcpy(dirptr, stemp, 8);
            dirptr += 8;
            // closing line
            memcpy(dirptr, " bytes\r\n", 8);
            dirptr += 8;
            //total size
            dirsize += 61;
        }
    }

    // close page
    memcpy(dirptr, "</pre></body></html>\r\n", 22);
    dirsize += 22;

    // set the length page and pointer
    return(dirsize-1);
}


/******************************************************************************
 * HTTP_SVR: HTTP_send_cffile()
 *
 * Purpose:
 *  transmits a file
 *
 * Actions:
 *
 *****************************************************************************/
MC void HTTP_send_cffile(BYTE* filename)
{
    int     i, j, x;
    WORD    wtmp;
    BYTE    wbyte[4];

    // search for file in list
    for(i=0; i<ATA_CurDirEnt; i++)
    {
        x = strlen((const char*)ATA_DS[i].DIR_Name)-1;
        if (!memcmp(&ATA_DS[i].DIR_Name, filename, x))
        {
            // get file length
            ATA_CurFileSize = ATA_DS[i].DIR_FileSize;

            // load ptr to first cluster
            ATA_CurFilePtr  = ATA_DS[i].DIR_FstClusLO;

            // get file extension
            for (j=0; j<x; j++)
            {
                if (ATA_DS[i].DIR_Name[j] == 0x2e)
                {
                    memcpy(&wbyte, &ATA_DS[i].DIR_Name[j+1], 3);
                    j=x;
                }
            }

            // send right header
            if (!memcmp(&wbyte, "JPG", 3)) HTTP_FileType = JPEG;
            if (!memcmp(&wbyte, "PDF", 3)) HTTP_FileType = PDF;
            if (!memcmp(&wbyte, "HTM", 3)) HTTP_FileType = HTML;

            break;
        }
    }

    // read cluster
    ATA_read_cluster(ATA_CurFilePtr, HTTP_Buffer);

    // check for next cluster pointer
    // is the FAT sector present?
    if ((ATA_CurFilePtr>>8) != ATA_CurFATPtr)
    {
        ATA_CurFATPtr = ATA_CurFilePtr>>8;
        ATA_read_fat_sector(ATA_CurFATPtr);
    }

    // determine pointer to next cluster
    ATA_CurFilePtr = ATA_CurFATBuffer[(ATA_CurFilePtr & 0xff)];

    // signal we're sending a file
    HTTP_Status |= HTTP_FILE_SEND;
}


// end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -