Skip to content

Latest commit

 

History

History
72 lines (51 loc) · 2.11 KB

event.md

File metadata and controls

72 lines (51 loc) · 2.11 KB

HTTP回调事件

抽象了HTTP处理的回调事件,让多个组件都可以使用它进行回调的处理。

事件的类型

主要是针对HTTP处理过程,比如在发起连接的时候、请求的时候、响应的时候、在解析到响应字段头部的时候、解析到响应字段主体的时候、上报数据的时候、释放的时候等,它们的值是独立占用一个bit的,方便在上层做判断。

typedef enum http_event_type {
    http_event_type_on_error = ~0x0,
    http_event_type_on_connect = 0x0001 << 0,
    http_event_type_on_request = 0x0001 << 1,
    http_event_type_on_response = 0x0001 << 2,
    http_event_type_on_headers = 0x0001 << 3,
    http_event_type_on_body = 0x0001 << 4,
    http_event_type_on_submit = 0x0001 << 5,
    http_event_type_on_release = 0x0001 << 6,
    http_event_type_all = 0x0001 << 7
} http_event_type_t;

事件的回调函数类型

typedef int (*http_event_cb_t)(void *e);

数据结构

包含了事件的类型当前上下文的结构体指针context数据内容及长度回调的处理函数

typedef struct http_event {
    http_event_type_t       type;           /* http_event_type_t type */
    void                    *context;
    void                    *data;
    size_t                  len;
    http_event_cb_t         cb;
} http_event_t;

外部函数

  • 事件的初始化,需要动态申请内存。
http_event_t *http_event_init(void);
  • 事件释放,释放申请的内存空间。
void http_event_release(http_event_t *event);
  • 注册事件的回调函数,在事件发生的时候通过这个函数告知上层。
int http_event_register(http_event_t *event, http_event_cb_t cb);
  • 触发事件回调函数,传入的参数有事件结构类型当前上下文的结构体指针context数据内容及长度
int http_event_dispatch(http_event_t *event, http_event_type_t type, void *context, void *data, size_t len);

上一篇通用组件功能

下一篇url解析器