Skip to content

Latest commit

 

History

History
75 lines (47 loc) · 2.49 KB

message_buffer.md

File metadata and controls

75 lines (47 loc) · 2.49 KB

HTTP报文处理

数据结构

基本的报文描述,可以描述多种报文数据结构,如请求报文的起始行报文头部报文主体等,length表示该报文被分配的内存空间,used表示已使用的内存空间,data是内存区域。

typedef struct http_message_buffer {
    size_t              length;     /* number of bytes allocated */
    size_t              used;       /* strlen(data) + 1 */
    char                *data;      /* contents: NUL-terminated string */
} http_message_buffer_t;

外部函数

  • 初始化报文并分配指定大小size的内存空间,如果不指定(size为0)则分配默认的内存空间HTTP_MESSAGE_BUFFER_GROWTH,该宏在http_defconfig.h被定义,可由用户修改。
http_message_buffer_t *http_message_buffer_init(size_t size)
  • 报文重新初始化,清除报文的data字段内容
int http_message_buffer_reinit(http_message_buffer_t *buf)
  • 释放报文,此操作会释放报文的data字段的内存空间,还会释放报文本身的内存空间(如果该报文是通过**http_message_buffer_init()**函数得到的)。
void http_message_buffer_release(http_message_buffer_t *buf)
  • 将字符串连接到报文中,可变参数,字符串必须以NULL结束,自动处理内存不足的问题,增长的内存大小是HTTP_MESSAGE_BUFFER_GROWTH的倍数。
void http_message_buffer_concat(http_message_buffer_t *buf, ...)
  • 通过覆盖写入的方式将数据写入到报文中,参数可变,字符串必须以NULL结束,会自动处理内存不足的问题。
void http_message_buffer_cover(http_message_buffer_t *buf, ...)
  • 追加指定的str字符串数据到报文中,len是追加的字符串长度,可自动处理内存不足的问题。
void http_message_buffer_append(http_message_buffer_t *buf, const char *str, size_t len
  • 通过指针引用的方式去引用指定的数据。
int http_message_buffer_pointer(http_message_buffer_t *buf, const char *str, size_t len)
  • 给buf增长内存空间,增长的内存大小是HTTP_MESSAGE_BUFFER_GROWTH的倍数。当buf的剩余空间不足以存放指定newsize大小的数据时,自动分配内存。
void http_message_buffer_grow(http_message_buffer_t *buf, size_t newsize)

依赖

  • platform_memory.c :平台层的内存管理

上一篇url解析器

下一篇HTTP请求