c - Gwan 处理程序仅接受文件请求

标签 c g-wan

使用下面的代码时,处理程序将无法识别非文件请求(例如,请求必须包含 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

感谢您的帮助。

最佳答案

处理程序获取有关文件或其他内容的任何请求,无论有效与否。

您的处理程序不正确。由于您在 HTTPHTML 解析之前请求通知:

   *(u32*)get_env(argv, US_HANDLER_STATES) = 
      (1L << HDL_AFTER_ACCEPT) 
    | (1L << HDL_AFTER_READ) 
    | (1L << HDL_BEFORE_WRITE);

...在使用printf()显示REQUEST之前,您绝对应该检查REQUEST是否可用:

   const char *req = (char*)get_env(argv, REQUEST);
   printf("%s\n", req ? req : "not parsed yet");

您在上面发布的代码每次都会崩溃,因为连接时 REQUEST 值为 NULL(尚不可用)ACCEPTED,或者请求是READ

关于c - Gwan 处理程序仅接受文件请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14300367/

相关文章:

c - c中加密和解密文件

c - 添加节点时如何重置指向头节点的指针?

c++ - 为什么++(* p)更改指针值?

php - G-WAN,CGI 脚本的输出 header

linux - Raspberry Pi3 的 G-WAN?

dll - 如何使用 GWAN C# servlet 引用 Mono C# 程序集

c++ - size_t 和 ptrdiff_t 类型的变量

c - 在C中写入结构双向链表中的字符串

android - 将 G-WAN 用于 Web 服务

centos - Gwan,未能映射段