修改历史列表: 266) 2019.8.7 266.1) bugfix: http_chat_async.c 中在 hdr_can_read() 回调用户注册的函数时,如果 回调函数返回-1则应该关闭连接 265) 2019.7.4 265.1) optimize: http_hdr.c 中,keep_alive 字段分三种情况:没有设置,保持长连接, 以及不保持长连接 264) 2019.6.5 264.1) bugfix: http_chat_async.c 在读取数据体时有问题 ------------------------------------------------------------------------ 263) 2018.4.27 263.1) feature: 针对 HTTP 请求 uri 中的 "?" 问号被转义成 "%3F" 的情况,可以做兼容性处理 262) 2017.8.16 262.1) bugfix: icmp 模块存在严重 BUG,当超时的响应包再次到达时会影响结果显示, 应该严格检验响应包与发送包的序列号是否相等 261) 2017.8.15 261.1) bugfix: icmp_stream.c 中函数 icmp_read 应该设置 read_ready = 0,以清除 在异步 IO 模式与 event 事件引擎设置的该标志位,否则会造成 IO 死循环 261.2) feature: icmp_chat.c 中将 ICMP_CHAT::tid 由原来的线程 ID 改为原子加值, 以支持协程模式下使用 261.3) feature: 将 ICMP_HOST::delay 的单位由秒调整为毫秒 261.4) compatibility: icmp_pkt.c 中在创建 ping 数据包时,数据载荷最好置为0, 否则有些移动的路由器会阻挡 260) 2016.5.10 260.1) feature: http_hdr_res.c 中的函数 http_hdr_res_parse 取消了对 http_status 的检查,以便于应用使用自定义状态码 ------------------------------------------------------------------------ 259) 2016.2.28 259.1) bugfix: http_hdr_req.c 中分析 url_part 有误 258) 2016.2.15 258.1) bugfix: http_hdr_req.c 中分析 url_part 有误 257) 2015.11.6 257.1) bugfix: http_hdr_res.c/http_hdr_req.c 中有可能会因为 main_cache_free 的调用在 http_hdr_res_free/http_hdr_req_free 之前调用而造成内存冲突 ------------------------------------------------------------------------ 256) 2015.7.23 256.1) compile: 去掉了 -pedantic 编译选项,因为其与 __FUNCTION__ 冲突 255) 2015.7.2 255.1) bugfix: http_hdr.c 中的函数 http_hdr_print/http_hdr_fprint/http_hdr_sprint 应过滤掉被禁掉的 HTTP 部字段 254) 2015.6.28 254.1) compile: 支持在 VC x64 环境下编译使用 253) 2015.1.30 253.1) feature: 在解析 HTTP 请求头的函数 http_hdr_req_line_parse 中,取消了 HTTP 请求方法的限制,从而允许应用可以扩展自己的 HTTP 请求方法 252) 2015.1.1 252.1) compile: 整个工程可以使用 clang/clang++ 编译通过 ------------------------------------------------------------------------ 251) 2014.11.27 251.1) bugfix: 239.1) 修改 http_hdr_req.c 中的函数 __strip_url_path 仍然存在 问题,因为输入的两个参数有可能指向相同的内存地址,从而导致第二个参数被赋 '\0', 所以应该把 ACL_VSTRING_RESET/ACL_VSTRING_TERMINATE 放在 acl_argv_split 之后。 250) 2014.11.18 250.1) bugfix: proto_snprintf.c 中函数 proto_secure_snprintf/proto_securevsnprintf 在调用 _vsnprintf_s 时第三个参数应该为 _TRUNCATE,否则当缓冲区给的比较小时VC提供的 API 内部会产生断言 249) 2014.8.8 249.1) bugfix: http_hdr_req.c 中当重复使用线程局部变量时调用 __hdr_reset 来重置其中的一些参数,虽然调用了 ACL_VSTRING_RESET,但该宏并不会将缓冲数据 尾部置 0,导致旧的数据会被重复使用 ------------------------------------------------------------------------ 248) 2014.5.13 248.1) bugfix: http_hdr_req.c 中 http_hdr_req_cookies_parse 在创建 cookies_table 哈希表时指定了 ACL_HTABLE_FLAG_KEY_REUSE,但在 __add_cookie_item 中却将 KEY 所 属的内存空间给提前释放了,从而引起了内存非法访问 247) 2014.1.11 247.1) compile: 在高版本VC(>VC2008) 环境下,使用更为安全的函数 246) 2013.12.5 246.1) feature: Makefile 支持 solaris 编译 245) 2013.11.22 245.1) bugfix: http_chat_sync.c,在函数 http_res_body_get_sync 中,当为 chunked 传输方式时,需要设置 ctx->chunk.chunk_oper = CHUNK_OPER_HEAD 244) 2013.11.6 244.1) compile: http_hdr_res.c/http_hdr_req.c,内部的线程局部变量无法在 主线程中释放,会导致 valgrind 报警告 ------------------------------------------------------------------------ 243) 2013.10.3 243.1) bugfix: http_chat_async.c 中 http_res_body_get_async/http_req_body_get_async 两个函数没有对 ctx->read_cnt 置 0 242) 2013.9.27 242.1) lib_acl 库中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函数接口定义 的修改,与之相关的模块(icmp)进行了修改 241) 2013.9.22 241.1) 因为 lib_acl 基础库中的 ACL_VSTREAM 读写回调函数接口变更,调整了与之相关的 部分内部接口,主要影响到了 icmp 模块中 icmp_stream.c 中的内部接口 240) 2013.7.30 240.1) warning: http_hdr_req.c::http_hdr_req_new() 内部使用了线程局部变量, 当用 valgrind 检查时会报内存泄露警告,通过在主线程中将其释放去掉了此警告 239) 2013.7.23 239.1) bugfix: http_hdr_req.c->http_hdr_req_create() 分离 URL 时有误 238) 2013.5.22 238.1) performance: http 协议库提高了 HTTP 头的解析速度,由原来的每秒 5 万 多次提升至每秒 17 万多次 238.2) bugfix: http 协议库中 http_hdr_reset 函数判断 hh 参数是否合法时有误 237) 2013.3.24 237.1) bugfix: http_hdr_req.c->__strip_url_path 解析有误导致第一个 / 丢失 236) 2012.12.30 236.1) feature: smtp_client 模块中添加了 smtp_printf 函数,更方便发送数据 235) 2012.12.17 235.1) feature: smtp 协议模块增加了 smtp_greet 函数,通过它可以直接调用 smtp_helo/smtp_ehlo 234) 2012.11.7 334.1) feature: 增加了 smtp 协议的支持 233) 2012.7.10 233.1) compile: 支持 VC2003 的预编译功能,从而使编译速度更快 233) 2012.4.29 233.1) bugfix: 因为 acl_aio_request_timer 的时间单位由原来的秒改为微秒, 所以需要修改 icmp_chat_aio.c 中的时间单位 232) 2012.4.9 232.1) 通过添加函数声明前缀:__attribute__((format(printf,3,4))) 来帮助 编译器识别变参参数 231) 2011.6.21 231.1) bugfix: http_util.c, 当 http_util_req_new 中的 http_hdr_req_host 返回 NULL 会导致 http_util_req_new 产生 core 231.2) http_hdr_req.c: http_hdr_req_create 改变了提取 Host 字段的方式 230) 2011.6.15 230.1) http_hdr_req.c: http_hdr_req_create() 形成的 HTTP 请求格式为: {METHOD} http://xxx.xxx.xxx/xxx?xxx HTTP/1.x 但该格式 tomcat 不能识别,所以现在改为: {METHOD} /xxx?xxx HTTP/1.x 229) 2011.4.18 229.1) performance: http_hdr_req.c, http_hdr_res.c 增加线程局部内存池的缓存 功能,可以重复使用 HTTP 头对象,只要在程序开始时调用一次 http_hdr_cache 即可 228) 2011.4.11 228.1) performance: http_req_body_get_sync(), http_res_body_get_sync() 内部 的 ctx 临时变量的生存周期原来是以流的生命周期为准,因为一个流的生命周期内会 有多产请求或响应,所以会导致在 HTTP 长连接情况下,性能随着请求或响应次数的 增加而下降,现在将 ctx 的生命周期改为以每一次请求或响应的会话的生命周期为准 227) 2010.11.23 227.1) 修改了一些容易引起误解的函数返回值 227.2) bugfix: http_hdr.c, http_hdr_entry_value 内部对于设置了 off 标志位的 项应视为无效项 226) 2010.11.22 226.1) bugfix: http_hdr_req.c http_hdr_req_cookies_parse() 中的 cookies_table 判断方式错误 225) 2010.2.2 225.1) http_chat_asyn.c: body_can_read() 中当回调返回 -1 时则也直接返回 -1 224) 2010.1.22 224.1) performance: http_chat_async.c, 重新设计了异步读数据体的过程,大大提高 了效率 223) 2010.1.11 223.1) feature: 增加了 http_util.c, 可以非常方便地使用 http 协议库里的函数 223.2) samples: 增加了 http/ 目录下的三个例子 222) 2010.1.8 222.1) http_chat_async.c: 去掉了无用的回调函数 221) 2010.1.1 221.1) 完善了HTTP协议异步读的接口,目前可以提供两种读HTTP头的方式, 将来可以 对外提供控制接口以允许用户自行设置读HTTP头的方式 220) 2009.12.30 - 12.31 220.1) http_chat_async.c: 重新设计了异步读数据体的框架, 使代码更加清晰明了, 同时更加灵活(采用注册勾子方式添加读的回调函数,原来只能注册一个读回调,现在 采用最新的 acl_aio 的可以注册多个回调的方式,这样其它程序也可以注册自己的 回调处理过程) 220.2) http_chat_async.c: 提供另一种异步读的模式 219) 2009.12.16 219.1) lib_http_struct.h: 去掉了 HTTP_HDR_RES 中无用的成员字段 218) 2009.12.14 218.1) http_hdr_req.c: 将 http_hdr_req_redirect 改名为 http_hdr_req_rewrite, 将 http_hdr_req_redirect2 改名为 http_hdr_req_rewrite2 218.2) http_hdr_req.c: http_hdr_req_url() 中去掉了以 __thread 方式使用线程 局部变量的方式,改为 acl_pthread_tls_get() 方式,这样当 lib_protocol 库被 调用者动态加载时可以避免动态库加载时线程局部变量引用的问题 217) 2009.12.4 217.1) feature: http_hdr.c 增加了 http_hdr_entry_replace2()/5 支持 HTTP 头里 部分字符串的多次匹配替换操作 216) 2009.12.3 216.1) http_hdr.c: 在分析 keep-alive 功能时增加了针对 chunked 传输的判断条件, 因为 HTTP1.1 在 chunked 传输模式下, 可以不必有 Connection: keep-alive 内容即 可保持长连接, 所以如果没有 Connection: keep-alive 但属于 chunked 传输则允许 保持长连接. 215) 2009.11.26 215.1) http: 整理了头文件, 从而便于使用 215.2) http_hdr_req.c: 添加了函数 http_hdr_req_url()/1 用来取得完整的请求URL 214) 2009.11.11 214.1) bugfix: http_hdr_req.c: __add_request_item() 当出现重复键时会有内存泄露问题 213) 2009.11.10 213.1) http_hdr_entry_value, http_hdr_entry 返回值去掉了 const 限制 212) 2009.6.22 212.1) Makefile: 可以通过 make all_lib 合并 lib_acl.a 至 lib_protocol.a, 这样用户再使用 lib_protocol.a 时就不必再包含 lib_acl.a 了 211) 2009.4.9 211.1) http 协议库中的通信部分进行了适合调整,使同步通信库与异步通信库中 的有些变量定义的含义更加一致 211.2) imcp 协议库中的 icmp_stat_host()/2 函数及结构 ICMP_HOST 由内部变 为外部直接可用,从而方便应用的使用 211.3) imcp 中的 ping 功能在时间精度上更细,原因是ACL库中win32平台下的 gettimeofday()/2 的精度更细 210) 2009.4.8 210.1) 使HTTP异步通信库更加易用;同时去掉了HTTP同步通信库中旧的通信模式 209) 2009.4.3 209.1) 因为 aio 库的修改,所以对HTTP异步通信部分进行了修改 208) 2009.3.6 208.1) feature: http_tmpl.c, 增加了 1xx, 2xx, 3xx 的信息提示功能 207) 2009.2.26 207.1) 因为 lib_acl 中的 aio 模块增加了一些新的功能特性,故修改了 http_chat_async.c 模块,使之处理异步IO问题更加灵活,而不干扰之前的IO设置 206) 2009.2.17 206.1) feature: http/http_tmpl.c 增加了 http_tmpl_title()/1 函数便于根据 HTTP响应码查找提示标题信息 205) 2009.1.5 205.1) comment: icmp/ 的头文件中增加了 JavaDoc 方式的注释 205.2) icmp: 修改个别接口的定义方式 19) 2009.1.1-2009.1.3 19.1) 整理了工程目录(vc6, vc2003, vc2008):增加了目录 src/http, src/icmp, include/http, include/icmp, 并增加了统一的协议支持头文件 lib_protocol.h 19.2) 添加了 ICMP 协议的实现,目前仅支持 ping 操作 18) 2008.12.4 18.1) feature: http_chat_sync.c, 增加了读操作时的预缓冲功能,可以提高读的效率, 同时提供了控制接口,可以设置读时是否要采用预缓冲策略 17) 2008.11.21 17.1) feature: http_hdr_req.c 增加了 http_hdr_req_redirect2() 接口,可以在 原有的请求头进行重定向重写请求头 16) 2008.10.23 16.1) feature: 添加了 http_hdr_req_range 及 http_hdr_res_range 两个分析偏移 传输的函数分析 15) 2008.10.11 15.1) 重新将HTTP协议的头文件的注释整理了一遍 14) 2008.10.10 14.1) bugfix: 修复了有关sscanf 针对64位整数操作时的BUG,受影响的函数有 http_chat_sync.c: chunked_hdr_get2(), http_chat_async: chunked_hdr_get_ready() 13) 2008.10.9 13.1) workaround: 重新整理了VC6、VC2003编译环境下的工程组织,将动态库以 lib_http.dll, lib_http.lib, lib_http_d.dll, lib_http_d.lib 命名,将静态库以 lib_http_vc6.lib, lib_http_vc6d.lib, lib_http_vc2003.lib, lib_http_vc2003d.lib 命名,其中动态库是用VC2003编译的,可以在VC6下使用 12) 2008.10.7 12.1) bugfix: HTTP_HDR 结构中引入的两个成员(chat_ctx,chat_free_ctx_fn),当调用 http_hdr_clone() 时,应该将这两个值赋空,否则会引起二次释放同一内存对象,造成存非 法访问,当初之所以引入这两个成员变量,是为了避免在HTTP异步通信时通过ACL_VSTREAM 的 acl_vstream_add_close_handle() 来回调释放函数;另外,现在HTTP同步通信中依然采用 acl_vstream_add_close_handle() 模式来回调释放函数,将来需要改成与异步通信的释放模式 11) 2008.10.6 11.1) compile bugfix: 在编译动态库时没有将http_hdr_res_get_sync引出 10) 2008.9.29 10.1) feature: 修改了所有头文件的函数定义,添加了 HTTP_API 定义,允许 以DLL方式引出, 可以方便其它编程语言使用 HTTP 库,当其它应用以DLL方式使用 HTTP 库时,需要增加一个预定义宏:HTTP_DLL 9) 2008.9 9.1) 调整了 http_chat_async.c 中的部分接口 8) 2008.7.23 8.1) 兼容性: 腾讯修改的APACHE存在问题,对于自己不认识的HTTP请求头字段采取超时关闭 的方式,以前在关闭某一HTTP请求项时通常采用将第一个字母替换为 "_" 的方式(cresondo 的做法),看来这种方法对于QQ的服务器存在问题,所以现在采用另外的方法来禁掉某一请求项 7) 2008.7.17 7.1) safety: http_chat_async.c 中增加了 ctx_nested_check() 函数,以避免关闭或超时 回调函数被嵌套调用 6) 2008.3.19 6.1) feature: 支持 content-length 大于 unsigned int 最大值的情况 5) 2008.3.10 5.1) feature: http_hdr_req.c, 增加了http_hdr_req_redirect,以便应用进行重定向操作 4) 2008.3.6 4.1) bugfix: http_hdr_req.c, 在由客户端的请求头中获取 Host 字段时,在请求方法为 CONNECT方法时,如果没有HOST字段,则取不到HOST信息,增加一条功能:此时可以尝试 在 CONNECT ip[domain]:port HTTP/1.1 中由 ip[domain] 来填充HOST信息 url行且 3) 2008.3.2 3.1) features: http_chat_sync.c, 增加了一组同步获取服务器返回数据的函数接口 2) 2008.2.13 2.1) features: add http_hdr_clone() in http_hdr.c, add http_hdr_res_clone() in http_hdr_res.c, add http_hdr_req_clone() in http_hdr_req.c 1) 2008.1.8 1.1) bugfix: http_hdr_req.c->__add_request_item,__add_cookie_item,中对变量对 的存储原来未处理重复变量名的情况,会导致内存泄漏。