使用下面的代码时,处理程序将无法识别非文件请求(例如,请求必须包含www文件夹中的文件)。 所有其他请求main甚至都没有调用,我不知道为什么会这样。
int init(int argc, char *argv[])
{
printf("init\n");
*(u32 *)get_env(argv, US_HANDLER_STATES) = (1L << HDL_AFTER_ACCEPT) | (1L << HDL_AFTER_READ) | (1L << HDL_BEFORE_WRITE);
return 0;
}
void clean(int argc, char *argv[])
{
printf("clean\n");
}
int main(int argc, char *argv[])
{
printf("%s\n", (char *)get_env(argv, REQUEST));
return 255;
}
请求:127.0.0.1/index.html
打印:GET /index.html
请求:127.0.0.1/favicon.ico
打印:GET /favicon.ico
请求:127.0.0.1/index
打印:N/A
感谢您的帮助。
答案 0 :(得分:0)
处理程序获取有关文件或其他方面的任何请求,无论是否有效。
您的处理程序不正确。由于您发出 BEFORE HTTP
并且HTML
解析发生了通知:
*(u32*)get_env(argv, US_HANDLER_STATES) =
(1L << HDL_AFTER_ACCEPT)
| (1L << HDL_AFTER_READ)
| (1L << HDL_BEFORE_WRITE);
...在使用REQUEST
进行显示之前,您应该绝对检查printf()
是否可用:
const char *req = (char*)get_env(argv, REQUEST);
printf("%s\n", req ? req : "not parsed yet");
您上面发布的代码每次都会崩溃,因为在REQUEST
连接时,HTTP NULL
值为ACCEPTED
(尚未提供),或者请求为READ
。