📄 http_file.c
字号:
int iSize;
LPSTR pszHtml;
iSize = http_read (hf, &pszHtml);
http_close (hf);
if (iSize != -1)
{
pEnvir->ulSizeOut = (ULONG) iSize;
pEnvir->pszOutData = pszHtml;
}
else
iRet = CGI_Unavailable;
}
}
else
iRet = CGI_InternalError;
}
}
else
if (iRet == CGI_GenericError)
{
if (pEnvir->pszOutData != NULL)
{
LPSTR psz;
pEnvir->ulSizeOut = strlen (szGenericError_head) +
strlen (szGenericError_tail) +
strlen (pEnvir->pszOutData);
psz = (LPSTR)httpd_malloc (pEnvir->ulSizeOut + 100);
if (psz == NULL)
{
iRet = CGI_Unavailable;
httpd_free (pEnvir->pszOutData);
iRet = CGI_InternalError;
}
else
{
// sprintf (psz, szGenericError, pEnvir->pszOutData);
// httpd_free (pEnvir->pszOutData);
strcpy(psz, szGenericError_head);
strcat(psz,pEnvir->pszOutData);
strcat(psz, szGenericError_tail);
pEnvir->pszOutData = psz;
pEnvir->ulSizeOut = strlen (psz);
iRet = 0;
}
}
else
iRet = CGI_InternalError;
}
return iRet;
}
int BinarySearch (LPSTR pszTarget, PFNCOMPARE pfnCompare, int iTotal)
{
if (iTotal)
{
int iMin = 0, iMax = iTotal - 1, iMid, iResult;
while (iMax >= iMin)
{
iMid = (iMin + iMax) / 2;
iResult = (*pfnCompare)(pszTarget, iMid);
if (iResult == 0)
return iMid;
else
if (iResult < 0)
iMin = iMid + 1;
else
iMax = iMid - 1;
}
}
return -1;
}
LPSTR http_envir_get_string (LPSTR pszEnvir, LPSTR pszStr)
{
int i = strlen (pszStr);
while (*pszEnvir != 0)
{
if (strncmp (pszEnvir, pszStr, i) == 0)
return (pszEnvir + i + 1);
pszEnvir += strlen (pszEnvir) + 1;
}
return NULL;
}
RESULT http_envir_get_ulong (LPSTR pszEnvir, LPSTR pszStr, ULONG* pulValue)
{
if (pszEnvir = http_envir_get_string (pszEnvir, pszStr))
{
for (*pulValue = 0; *pszEnvir != 0; pszEnvir++)
{
if (*pszEnvir >= '0' && *pszEnvir <= '9')
*pulValue = *pulValue * 10 + (*pszEnvir - '0');
else
return 0;
}
return 1;
}
return 0;
}
RESULT http_envir_get_hex (LPSTR pszEnvir, LPSTR pszStr, ULONG* pulValue)
{
if (pszEnvir = http_envir_get_string (pszEnvir, pszStr))
{
char c;
for (*pulValue = 0; *pszEnvir != 0; pszEnvir++)
{
if (*pszEnvir >= '0' && *pszEnvir <= '9')
*pulValue = (*pulValue << 4) + (*pszEnvir - '0');
else
{
c = *pszEnvir | 0x20;
if (c >= 'a' && c < 'z')
*pulValue = (*pulValue << 4) + (c - 'a' + 10);
else
return 0;
}
}
return 1;
}
return 0;
}
void http_update_modified_time (LPSTR pszHtml)
{
int i;
if (pszHtml [0] == '/')
i = 1;
else
i = 0;
i = BinarySearch (&pszHtml [i], http_page_compare, web_page_table_total);
if (i != -1)
web_page_tables [i].pStat->st_mtime = time((time_t*) 0);
}
int http_parsing_content (LPSTR *ppszSource, LPSTR pszDest, INT *piTotal, ULONG ulLoop)
{
LPSTR pszSrce;
int total = 0;
INT mode;
ULONG ul;
char szKeyword [128];
PHTML_VAR_TBL pTbl;
pszSrce = *ppszSource;
if (*pszSrce == '#')
{
pszSrce = http_get_token (pszSrce, szKeyword);
mode = BinarySearch (szKeyword, http_get_compare, web_get_table_total);
if (mode != -1)
{
pTbl = &web_get_tables [mode];
switch (pTbl->ulType)
{
case VarType_Decimal:
if (ulLoop && pTbl->ulParam >= LOOP_BaseCount)
mode = (int) pTbl->pfnVarGet (pTbl->ulParam - ulLoop);
else
mode = (int) pTbl->pfnVarGet (pTbl->ulParam);
total += sprintf (pszDest, "%d", mode);
break;
case VarType_Hex:
if (ulLoop && pTbl->ulParam >= LOOP_BaseCount)
ul = pTbl->pfnVarGet (pTbl->ulParam - ulLoop);
else
ul = pTbl->pfnVarGet (pTbl->ulParam);
total += sprintf (pszDest, "%x", ul);
break;
case VarType_String:
if (ulLoop && pTbl->ulParam >= LOOP_BaseCount)
total += (int) pTbl->pfnVarGet (pTbl->ulParam - ulLoop, pszDest);
else
total += (int) pTbl->pfnVarGet (pTbl->ulParam, pszDest);
break;
case VarType_Radio:
case VarType_CheckBox:
if (ulLoop && pTbl->ulParam >= LOOP_BaseCount)
mode = (int) pTbl->pfnVarGet (pTbl->ulParam - ulLoop);
else
mode = (int) pTbl->pfnVarGet (pTbl->ulParam);
if (mode != 0)
{
strcpy (pszDest, "checked");
total += strlen ("checked");
}
break;
case VarType_Option:
// should implment later
total += pTbl->pfnVarGet (pszDest);
break;
case VarType_IP:
// should implment later
ul = pTbl->pfnVarGet ();
if (ul != 0)
{
switch (pTbl->ulParam)
{
case IP_Param1:
ul = GetIP1 (ul);
break;
case IP_Param2:
ul = GetIP2 (ul);
break;
case IP_Param3:
ul = GetIP3 (ul);
break;
case IP_Param4:
ul = GetIP4 (ul);
}
total += sprintf (pszDest, "%u", ul);
}
break;
case VarType_IPString:
ul = pTbl->pfnVarGet ();
total += sprintf (pszDest, IPStringFormat, GetIP1 (ul), GetIP2 (ul),
GetIP3 (ul), GetIP4 (ul));
break;
case VarType_MacAddress:
/*
if (ulLoop && pTbl->ulParam >= LOOP_BaseCount)
total += sprintf (pszDest, "%02x", pTbl->pfnVarGet (pTbl->ulParam - ulLoop));
else
total += sprintf (pszDest, "%02x", pTbl->pfnVarGet (pTbl->ulParam));
*/
if (ulLoop && pTbl->ulParam >= LOOP_BaseCount)
{
if ((pTbl->ulParam - LOOP_BaseCount) < MAC_Addr7)
total += sprintf (pszDest, "%02x", pTbl->pfnVarGet (pTbl->ulParam - ulLoop));
else
{
LPSTR psz = (LPSTR) pTbl->pfnVarGet (pTbl->ulParam - LOOP_BaseCount);
total += sprintf (pszDest, "%02x-%02x-%02x-%02x-%02x-%02x", psz [0],
psz [1], psz [2], psz [3], psz [4], psz [5]);
}
}
else
if (pTbl->ulParam < MAC_Addr7)
total += sprintf (pszDest, "%02x", pTbl->pfnVarGet (pTbl->ulParam));
else
{
LPSTR psz = (LPSTR) pTbl->pfnVarGet (pTbl->ulParam);
total += sprintf (pszDest, "%02x-%02x-%02x-%02x-%02x-%02x", psz [0],
psz [1], psz [2], psz [3], psz [4], psz [5]);
}
break;
case VarType_Loop:
total += pTbl->pfnVarGet (pTbl->ulItems, pszDest, &pszSrce, pTbl->ulParam);
break;
case VarType_CustomLoop:
// not implemented now
break;
}
*ppszSource = pszSrce;
*piTotal += total;
return TRUE;
}
}
return FALSE;
}
ULONG http_loop_continue (LPSTR *ppszHtml, ULONG ulLoop)
{
ULONG ulRet = 0;
char szKeyword [128];
int mode;
PHTML_VAR_TBL pTbl;
LPSTR pszHtml = *ppszHtml;
for (; *pszHtml != '#' && *pszHtml != '\n'; pszHtml++);
if (*pszHtml == '#')
{
pszHtml = http_get_token (pszHtml, szKeyword);
mode = BinarySearch (szKeyword, http_get_compare, web_get_table_total);
if (mode != -1)
{
pTbl = &web_get_tables [mode];
if (pTbl->ulType == VarType_LoopDone)
{
ulRet = pTbl->pfnVarGet (pTbl->ulParam - ulLoop);
for (; *pszHtml != '\n'; pszHtml++);
*ppszHtml = pszHtml + 1;
}
}
}
return ulRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -