acl/lib_acl_cpp/changes.txt
zsxxsz fc3cae0a35 支持VC2008编译器
acl 重新支持VC2008编译器;在高版本VC编译器上,acl库尽量使用编译器建议安全的系统 API
2014-01-12 15:36:49 +08:00

979 lines
34 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

修改历史列表:
------------------------------------------------------------------------
216) 2014.1.11
216.1) compile: 支持 vc2008 编译器
216.2) feature: 在使用高版本 vc_MSC_VER >= 1500,即 VC9 以上版本) 编译器时,
不再使用 _CRT_SECURE_NO_WARNINGS 宏来避免编译器警告,而是使用 VC 建议的安全函数
215) 2014.1.8
215.1) feature: http_request 类添加了方法 set_timeout 可以设置网络超时及读写超时
214) 2014.1.6
214.1) bugfix: 新线程池服务器模板 master_threads2 类在调用 service_pre_jail
时应该通过 acl_threads_server_event 获得事件引擎 (原来写的是 acl_ioctl_server_event,
这个是旧的服务器模板获取事件引擎的方法)
213) 2014.1.5
213) security: ipc 通信机制中增加了随机数安全验证功能,以防止外来干扰
212) 2014.1.4
212.1) bugfix: queue_file.cppqueue_file::create 函数内在尝试创建文件时
可能会因为文件系统出问题而进入循环过程,通过增加标志位避免该问题
211) 2013.12.29
211.1) feature: json 类支持将字符串对象添加至数组对象中
211.2) samples: json 下的测试用例继续完善
210) 2013.12.28
210.1) samples: 将所有的 json 测试用例移至 samples/json 目录下
209) 2013.12.25
209.1) bugfix: json.cpp 中 json_node::set_text 误把文本值赋予标签变量
208) 2013.12.22
208.1) feature: socket_stream 类支持 ssl 传输(与 polarssl 结合); 去掉了
ssl_stream 类
207) 2013.12.13
207.1) feature: master_threads2新增加了服务器线程池模板
------------------------------------------------------------------------
206) 2013.12.7
206.1) samples/master_udp_threads: 该例子中的线程局部变量的静态用法 __thread
无法支持 solaris改为动态方式使用线程局部变量方式
205) 2013.12.6
205.1) comment: 修正 connect_manager::init 原来错误的参数格式描述
205.2) bugfix: connect_pool::put 在归还连接给连接池时,为了让过期连接尽快回收,
需要调用 push_front原来调用了 push_back
204) 2013.12.5
204.1) feature: Makefile 支持 solaris(x86) 编译
203) 2013.12.2
203.1) document: 消除了几个头文件中由 doxygen 检测出的错误注释
202) 2013.12.1
202.1) feature: 新增加 event 模块,将 master_timer 定时器类改名为 event_timer
类放于 event 模块中
202.2) feature: 在基类 master_base 中添加了方法 proc_set_timer 用于添加进程
级别的定时器,(同时移除了 master_threads 子类中的 proc_set_timer 方法),这样
master_base 的所有子类 (master_threads, master_aio, master_proc, master_udp,
master_trigger) 都可以添加进程级别的定时器
201) 2013.11.29
201.1) feature: master 模块增加了定时器类 master_timer
201.2) feature: master_threads 模板支持新的定时器
201.3) workaround: stream 模块的异步流部分,将 aio_timer_callback 等类声明从
aio_handle 类中移除成为独立的类
200) 2013.11.26
200.1) feature: json.cpp,
200.1.1) json 类增加了以下功能函数:
a) 构造函数 json(const json_node&),可以根据一个 json 对象的某一个 json
结点创建一个新的 json 对象
b) duplicate_node 根据一个 json 对象的某个 json 结点复制一个新的 json 结点
c) to_string 新的将 json 对象转换为字符串的函数
200.1.2) json_node 类增加了以下功能函数:
a) to_string 根据 json 结点生成 json 字符串的函数
b) set_tag 用来替换标签名
c) set_text 当 json 结点为叶结点时用来替换标签值
200.2) samples: 新增加了 json 测试用例 json3/json4
199) 2013.11.23
199.1) feature: http_header 类丰富了 set_url 及请求构造函数的参数类型,
允许 URL 参数中含有请求参数,且内部会自动解析 url 中的主机名及参数
199.2) feature: http_header 类添加了请求参数添加方法add_int 及 add_format
199.3) feature: http_header add_param 允许参数值为空指针或空串
199.3) feature: http_header::set_host 仅是将主机字符串添加至成员变量 host_ 中
199.4) feature: http_header::set_url 中允许添加类似于 http://www.test.com 的
url(即末尾可以没有 '/')
198) 2013.11.21
198.1) feature: http_client 类增加了 chunked 传输方式;
198.2) feature: http_request 类增加流式写函数write_head/write_body
198.3) feature: http_response 类增加了流式写数据方式
197) 2013.11.19
197.1) workaround: 调整类 http_client 中的两个函数 get_respond_head 和
get_request_head 的返回值限制,去掉 const 限定词
197.2) bugfix: http_header.cpphttp_header::date_format 在 WIN32 编译出错
196) 2013.11.17
196.1) bugfix: json.cpp, json::getElementsByTags() 内部未对空指针做判断
196.2) samples: samples/json2, 用于测试级联提取数据的例子
195) 2013.11.13
195.1) bugfix: http_header.cpp, http_header::date_format 在 UNIX 平台下
gmtime 是线程不安全的,所以需要使用 gmtime_r
194) 2013.11.9
194.1) feature: HttpServletRequest 类增加了几个获取 HTTP 请求头参数的方法
193) 2013.11.8
193.1) feature: http_utils::get_addr 的 url 参数既可以是 HTTP 也可以是 HTTPS
192) 2013.11.7
192.1) bugfix: http_download.cpp 的构造函数中调用 ACL_SAFE_STRNCPY 时第三个
参数给出错误的尺寸大小(此 bug 由高版本的 gcc4.8.2 检测出)
------------------------------------------------------------------------
191) 2013.11.5
191.1) bugfix: http_header.cpp, http_header::build_common 添加 Content-Length
HTTP 头部字段时没有添加分隔符 ": "
190) 2013.11.1
190.1) feature: 当使用 GCC 进行编译时,针对所有具有变参的函数接口定义添加了
属性限定---__attribute__((format(printf, n, m))),这样便于在编译期就能发现
因参数使用不当而导致的错误
190.2) bugfix: master_udp.cpp当以 alone 方式运行时,没有将 socket_stream
赋给 ACL_VSTREAM::context导致在 service_main 时又重新打开一次
189) 2013.10.31
189.1) bugfix: thread.cpp当线程为分离方式创建时 thread::thread_run 在调用完
虚函数 run 后不得再引用线程对象的 return_arg_否则会造成内存非法访问
188) 2013.10.20
188.1) feature: HttpServletResponse 类支持 Transfer-Encoding: chunked 传输方式
187) 2013.10.19
187.1) samples: 增加了测试用例 thread_client一个多线程网络客户端程序
186) 2013.10.18
186.1) bugfix: db/db_mysql.cpp, 在打开 mysql 连接时设置字符集,判断是否设置
成功的方法有误
185) 2013.10.15
185.1) thread 类分离出一个基类: thread_job从而使逻辑更为清晰
184) 2013.10.13
184.1) bugfix: master_udp.cpp, master_udp::service_main() 中的 socket_stream
是临时堆栈变量,如果被用户外部引用则可能造成内存非法访问
183) 2013.10.12
183.1) samples: 增加了 master_udp_threads该例子将线程池与 master_udp 模板结合
182) 2013.10.11
182.1) feature: connect_manager/connect_pool 允许动态添加、删除连接池对象
182.2) feature: 增加了线程类(stdlib/thread)及线程池类(stdlib/thread_pool)
182.3) samples: 增加了测试用例 thread 用以测试线程类
182.4) samples: 增加了测试用例 thread_pool 用以测试线程池类
181) 2013.10.10
181.1) samples: 添加了 master_aio_proxy 用作纯 TCP 非阻塞代理
------------------------------------------------------------------------
180) 2013.10.3
180.1) feature: aio_stream 增加了 get_peer/get_local 用来获得网络连接流的本地
及远程地址
179) 2013.9.30
179.1) feature: master_udp 服务器模板增加了可在 proc_on_init() 虚函数中获得
本地绑定套接字流对象集合的函数功能: get_sstreams()
179.2) bugfix: memcache.cpp 当调用 open 函数连接 memcached 服务器失败时,用
valgrind 检查出记录错误日志时引用了一个未经初始化的变量
178) 2013.9.27
178.1) lib_acl 库中 ACL_EVENT_NOTIFY_RDWR/ACL_EVENT_NOTIFY_TIME 函数接口定义
的修改,与之相关的模块进行了修改
178.2) feature: master 服务器框架增加了 master_udp 服务模板类
178.3) samples: 增加了针对 UDP 的测试用例 udp_client
177) 2013.9.22
177.1) 因为 lib_acl 基础库中的 ACL_VSTREAM 读写回调函数接口变更,调整了与之相关的
部分内部接口,主要影响到了 ssl_stream/ssl_aio_stream
176) 2013.9.13
176.1) compile: 增加了 Makefile.db 工程文件,使用该文件编译则需要 mysql/sqlite 库;
如果不需要数据库相关的功能,则使用 Makefile 工程文件进行编译
175) 2013.9.12
175.1) feature: connect_manager 类增加了根据键值字符串的哈希值获取连接池对象的
虚函数,从而有利于在分布式环境里使用连接池
175.2) feature: connect_manager/connect_pool 类增加了针对每个连接池有一个其
位于连接池集合中的下标索引
174) 2013.9.10
174.1) feature: http_request::request 中原来只能指定 GET/POST 两种请求方法,现在
可以指定多种请求方法
174.2) feature: http_header 允许设置自定义(即除 GET/POST/PUT/CONNECT/PURGE之个
的请求头命令字
173) 2013.9.9
173.1) feature: memcache 类支持流式读写数据,从而可以支持大 value 的存取方式
172) 2013.9.7
172.1) master_threads 类在单独运行方式的使用场景接近于在 acl_master 框架下的运行场景
171) 2013.9.5
171.1) feature: master_threads/master_aio/master_proc 类支持在单独运行模式下监听多个地址
171.2) feature: acl_cpp_init.cpp 中添加了 WIN32 下关闭 DOS 窗口的函数
171.3) compile: acl_cpp_init.cpp 中 freopen 返回的文件句柄因为未被使用而使编译器报警
170) 2013.8.30
170.1) feature: http/memcache 模块增加了连接池管理类
170.2) connpool/http_request_pool/memcache_pool: 调整了构造函数,去掉了最后一个参数
169) 2013.8.22
169.1) bugfix: memcache 类中当连接异常中断重试时会因请求数据被清掉而出错,原因
是请求与响应共用同一个缓冲区所致,现将请求缓冲区与响应缓冲区分开
168) 2013.8.18
168.1) samples: 增加了测试 http_request_pool 的例子 samples/http_request_pool
168.2) samples: 增加了测试 memcache_pool 的例子 samples/memcache_pool
167) 2013.8.17
167.1) feature: 增加了 HTTP 客户端连接池类 http_request_pool同时将 http_request
类变为 connect_client 的子类
167.2) feature: memcache 增加了连接池类 memcache_pool同时将类 mem_cache 改为
memcache
166) 2013.8.13
166.1) mem_cache: 调整了构造函数接口,使之更容易使用
166.2) feature: 添加了通用的客户端连接池管理对象connect_client, connect_pool,
connect_manager这些类均为纯虚类但子类只需要实现很少的几个虚函数便可获得功能丰富的
连接池管理功能
165) 2013.8.11
165.1) feature: db_pool 支持动态将空闲时间过期的数据库连接释放掉,从而减少
对后端数据库的压力
164) 2013.8.9
164.1) bugfix: db/db_mysql.c 在打开 mysql 时原来的实现中,如果需要设置字符集,
则会导致崩溃,原因是设置字符集必须是在连接打开之后设置,原来的做法是在连接打开
前设置的
163) 2013.7.29
163.1) bugfix: string::split/split2 内部在调用 acl_argv_split 后没有调用
acl_argv_free 释放动态分配的内存
162) 2013.7.1
162.1) 规整了所有的源文件
161) 2013.6.25
161.1) compile: 消除了在 gcc-4.6.3 下的一些编译警告
160) 2013.6.13
160.1) feature: 添加了 server_socket 类
160.2) socket_stream: 对 get_ip 类的函数做了一定调整
160.3) samples/benchmark: 增加了 client/server 两个用于测试 IO 压力的程序
159) 2013.6.6
159.1) feature: HttpServletRequest/http_client 添加调试输出 HTTP 请求头的函数
158) 2013.5.13
158.1) feature: master_thread 类增加了静态添加定时器功能
157) 2013.5.2
157.1) feature: 增加了针对文件进行异步 IO 操作的类aio_fstream
157.2) samples: 增加了针对新增类 aio_fstream 的测试例子: fs_benchmark
156) 2013.4.17
156.1) bugfix: master_thread.cpp 在测试环境下运行时master_threads::thread_run
函数增加了缓冲区是否有可读数据的判断
155) 2013.4.5
155.1) bugfix: ipc_service.cpp 中 thread_pool_main 函数应该调用 last_serror
而不应该调用 last_error
155.2) bugfix: 在 rpc_request::run 函数中发送了一个局部栈变量,而当主线程中
的 rpc_client::on_message 通过 IO 收到此变量时可能它已经在子线程中销毁了,
可能造成内存非法访问问题,所以现在把此变量的生命周期改成与 rpc_request 相同
从而防止 rpc_client::on_message 中引用了一个提前释放的变量
154) 2013.4.1
154.1) HttpServletRequest.cpp: HttpServletRequest::getSession中生成 COOKIE
及 SESSION 的优先级做了调整
153) 2013.3.28
153.1) feature: beanstalk 客户端连接增加了连接池类 beanstalk_pool
152) 2013.3.23
152.1) bugfix: HttpServletRequest::getPathInfo 方法中,在 CGI 模式下应该
先根据 SCRIPT_NAME 环境变量取得,如果取不到再根据 PATH_INFO 环境变量获取
151) 2013.3.14
151.1) feature: HttpServletRequest::getSession 增加了参数 sid
151.2) feature: memcache_session 类增加了一个构造函数
150) 2013.3.11
150.1) bugfix: rpc.cpp, rpc_request::cond_wait 调用过程中,如果函数
acl_pthread_cond_wait 或 acl_pthread_cond_timedwait 返回非 0 值,则应该
解锁,否则会造成 rpc_request::cond_signal 因为无法获得锁而阻塞
149) 2013.2.25
149.1) bugfix: ipc 模块,当 aio_handle 为 WIN32 窗口消息事件引擎时,不应
调用套接口的监听过程
149.2) feature: ipc 模块简化了接口
149.3) samples/gui_rpc: 更新了部分代码
148) 2013.2.24
148.1) 将 db_pool 类变成基类,增加了 mysql_pool 和 sqlite_pool 两个子类
147) 2013.2.8
147.1) feature: 添加了 url_coder 类,用于 url 的编码与解码
147.2) http/: 将 HttpCookie 类从 http_header 类的头文件中剥离形成单独的类
146) 2013.2.5
146.1) feature: beanstalk.cpp当网络重连时watch 及 use 命令会被自动调用
145) 2013.1.31
145.1) feature: beanstalk 类增加了几个方法
145.2) wizard: 模板生成中的模板增加了几个方法
145) 2013.1.27
145.1) feature: 增加了文件队列的操作库 queue/
144) 2013.1.26
144.1) beanstalk: 优化了接口实现方案
143) 2013.1.25
143.1) feature: 添加了针对 beanstalkd 客户端通讯协议的支持
143.2) samples: 添加了测试 beanstalk 客户端通讯库的例子
142) 2013.1.13
142.1) lib_acl_cpp: 将头文件进行了分类,使之更加模块化,也便于将头文件放在系统目录下
141) 2012.12.31
141.1) feature: master_threads.hpp 增加了 thread_on_timeout() 虚函数
140) 2012.12.28
140.1) bugfix: string.cpp 类中的 left()/right() 有误
139) 2012.12.17
139.1) bugfix: session.cpp, vbuf_new() 中的去掉了 assert() 语句
138) 2012.12.14
138.1) feature: socket_stream.cpp: get_peer()/get_local() 增加了一个控制参数,
允许用户获得 IP:PORT 或 IP 格式的地址
138.2) feature: socket_stream.cpp, 增加了两个函数 get_peer_ip/get_local_ip
137) 2012.12.10
137.1) performance: session 类增加了本地对象的缓存机制,提高了查询/添加/删除
的性能
136) 2012.12.7
136.1) feature: session 类增加了延迟方式修改数据,这样当针对某一 SID 号
做多次修改、添加操作时,只当最后 flush 后才真正连接后端的 cache 服务器,
从而大大提高了整体性能
136.2) string: 完善了一下构造函数
136.3) samples: samples/session 增加了对延迟修改 session 的测试示例
135) 2012.12.6
135.1) bugfix: db/db_mysql.cpp, 连接 mysql 时的地址有错
134) 2012.11.27
134.1) feature: 增加了单体模板类 singleton.hpp
134.2) samples: 增加了单例的测试示例 samples/singleton
133) 2012.11.8
133.1) class istream: 修改了 gets_peek/read_peek 的参数接口;增加了 readn_peek 函数
132) 2012.9.7
132.1) 为了避免一些不兼容性及编译问题,去掉了大部分类中的 noncopyable 继承关系
131) 2012.9.6
131.1) feature: 添加了 noncopyable 类,子类只需继承该类便可阻止类对象赋值
131.2) 大部分类均继承了 noncopyable 类,可以在编译期有效地阻止类对象直接赋值
130) 2012.8.21
130.1) feature: stream 类中添加了 set_rw_timeout/get_rw_timeout
130.2) socket_stream: 去掉了 unbind_vstream因为基类 stream 有类似函数
129) 2012.8.18
129.1) samples/http_client: VC 工程文件中动态连接方式的连接库有误
*128*) 2012.8.17 1.1.1.2 release 版本正式发布!~
127) 2012.8.16
127.1) performance: rpc, ipc_service 内部的 ipc 消息连接流允许采用长连接方式,
从而提高了消息传递的效率
126) 2012.8.15
126.1) http_response.cpp: get_body() 当长度 < 0 且 HTTP 请求方法为 GET/CONNECT
时,则也应返回 true
126.2) samples: http_server 用来测试 rpc 通讯模式下半非阻塞方式的功能
125) 2012.8.14
125.1) doxygen 检查出一些头文件中注释不准确的地方
125.2) 准备发布正式版本了:)
124) 2012.8.13
124.1) feature: 因为 md5 算法经常会被使用,所以封装了一个 md5 算法类,见 md5.cpp
124.2) samples: md5 示例测试新增的 md5 功能类
123) 2012.8.2
123.1) aio_handle: 将定时器的接口进行了相应调整,使之更加明晰
122) 2012.7.30
122.1) feature: socket_stream 类增加了 unbind_stream 方法
121) 2012.7.26
121.1) bugfix: xml.cpp 的 xml 类中,多处存在内存泄露及内存非法释放的问题,
这些问题均由 valgrind 查出
120) 2012.7.25
120.1) bugfix: rpc.cpp 中如果 cond_signal 调用时间早于 cond_wait 时,则会
因为线程锁及线程条件变量未被初始化而出错,所以这两个变量应该在构造函数内
进行初始化;同时还增加了 cond_count_ 作为 cond_wait 是否应该等待的条件
119) 2012.7.20
119.1) feature: 增加了 http_utils专门用于一些常用的工具类功能
119.2) feature: 增加了 http_download专门用于支持断点续传方式的文件下载
118) 2012.7.19
118.1) feature: http_request/http_header 增加了对 Range 的支持
117) 2012.7.16
117.1) feature: http_request, 增加了方法set_charset/read_body从而可以
循环读取服务器返回的压缩数据,并进行解压,同时可以转换为本地字符集
117.2) bugfix: http_client, read_response_body(char* buf, size_t size) 中,
当在读响应头且自动启动了解压模块时,而该函数却不能进行解压处理(也不会调用
zlib_stream::unzip_finish 过程),这会造成 zlib 库的内存泄露
117.3) bugfix: rpc.cpp, rpc_request::cond_wait 加锁/解锁顺序不对
117.4) feature: string.cpp, 增加了 split2 函数,用于返回 vector 格式数据
116.1) 2012.7.12
116.1) string 类中的 split 函数的返回值由原来的 std::list 改为 std::vector
这样更便于用户使用
115) 2012.7.10
115.1) compile: 消除了例子中的几个编译问题
114) 2012.7.5
114.1) feature: rcp.hpp 增加了 cond_wait/cond_signal 方法,便于主线程向处于等待
状态的子线程发送消息
113) 2012.7.4
113.1) feature: socket_stream.h 增加了 ACL_SOCKET unbind_sock() 方法,将套接字
与流对象解绑,从而将流对象的释放与套接字的关闭分开
112) 2012.7.2
112.1) bugfix: aio_istream.cpp 中,函数 aio_istream::gets 和 aio_istream::read
当输入的超时时间为 timeout 为 0 时,则会延用之前设置的超时时间,应该是把超时时间
设置为 0
112.2) samples/rpc_download: 进一步优化,同时使用 valgrind 检查出库本身一些问题
112.3) samples/gui_rpc: 该例子采用基于 WIN32 窗口消息方式,实现阻塞式下载过程与
窗口消息结合的功能
111) 2012.7.1
111.1) bugfix: http_request.cpp/http_response.cpp 中的 get_body(char*, size_t)
有一处手误,返回值给的不对
111.2) samples: rpc_download 该例子以一个完整的 HTTP 下载为例,测试了 rpc 功能
模块的可用性
110) 2012.6.30
110.1) feature: rpc_request 类增加了两个有用的方法: rpc_signal/rpc_wakeup,
从而可以在调用子类的 rpc_run 方法时,允许子类在子线程中边处理边向主线程发
消息,主线程收到消息后启用 rpc_request::rpc_wakeup 处理中间结果
110.2) rpc_request 的方法 rpc_callback 改为 rpc_onover同时 rpc_onover 的
权限范围被限定为 protected为了保证在 rpc_service 中可以访问,将 rpc_service
和 rpc_client 加为 rpc_request 的友元类
109) 2012.6.28
109.1) feature: 增加了 ipc/rpc.cpp从而进一步扩展了 IPC 类,使非阻塞线程
与阻塞线程之间的通信更为方便
108) 2012.6.26
108.1) feature: http_header/HttpCookie 两个类中,在关设置的方法增加了本
对象的引用,以便于用户可以连续对该对象的设置操作
108.2) bugfix: HttpServletRequest::readHeader有一处没有判断指针为 NULL
的问题
107) 2012.6.21
107.1) bugfix: samples/cgi_upload 在循环读数据时有内存越界问题
107.2) feature: src/http/http_header 增加了 set_request_mode 方法用于手工
设置是请求头还是响应头
107.3) HttpServletResponse: 在创建 http_header 时调用 set_request_mode
指定了响应头方式
107.4) samples/: cgi, cgi_upload 添加了单独服务运行方式,以方便进行调试
107.5) feature: HttpServletResponse 类增加了方法 setKeepAlive 以及
getHttpHeader()
106) 2012.6.20
106.1) http 模块中的一些接口重新优化了一下涉及的文件有HttpServlet,
HttpServletRequest, HttpServleResponse, HttpSession
106.2) session 类重新设计了一下,该类成为纯虚类,增加了 memcache_session
类,用来实现当缓存为 memcached 时的 session 功能将来还可以再增加对redis
的支持
106.3) samples: cgi/cgi_upload/http_servlet/session 稍微修改一下,以适应上面的修改
105) 2012.6.19
105.1) bugfix: master_conf.c 中在 reset 函数中,在释放字符串类型的变量时,
如果该变量未被赋值,则不应释放
105.2) feature: master_base 增加了接口 daemon_mode 用来判断是否是由 acl_master
控制的后台服务器模式
105.3) bugfix: http_header::build_request 方法内部对 URL 编码方式有误,
不应对整个 URL 参数进行 URL 编码,而应该针对每一个参数分别进行 URL 编码
105.4) bugfix: http_request::get_cookie 第一次被调用时应该先调用一下
http_request::create_cookies
104) 2012.6.15
104.1) samples: 增加了 samples/http_request 测试用例
103) 2012.6.13
103.1) feature: 增加了 http_pipe 类,用于以管道流方式处理 HTTP 协议数据
103.2) feature: http_request/http_response 增加了一些功能函数
103.3) samples: 增加了 samples/http_response 测试用例
102) 2012.6.12
102.1) feature: session/HttpSession 增加了设置 session 过期的方法
102.2) 去掉了有些源程序中在 WIN32 平台下对 snprintf 的定义,因为其包含的
头文件 lib_acl.h 中已经定义过了
101) 2012.6.11
101.1) feature: session/HttpSession 增加了允许存取二进制属性对象的接口
100) 2012.6.8
100.1) feature: session 添加了 del 接口
100.2) feature: HttpServletRequest 类添加了 setCookie 函数
100.2) bugfix: HttpSession 在第一次添加 session 时如果浏览器没有 session
标识,则设置了 session 后立即取该值会因为没有那个 session cookie 而取不到
100.2) samples: 添加了 http_test, session 两个例子
99) 2012.6.7
99.1) feature: 将 session 单独形成一个类,使 HttpSession 继承 session 类
99.2) locker: 修改了相关的接口,使之更合理
99.3) HttpServlet: 增加了当未知请求方法时的处理虚函数 doUnkown
98) 2012.6.5
98.1) feature: http_request/http_response 两个类的功能进一步得到完善
98.2) http_header: 添加了 reset 方法,可以重置内部状态
98.3) featur: http_header->HttpCookie 添加了 setCookie 函数用来分析来自
于服务器响应的 Set-Cookie 中内容
97) 2012.6.3
97.1) feature: 增加了 master_conf 类用于读取配置文件,同时将 master_base 类中
有关配置的部分放置在 master_conf 中处理
97.2) compile: 在 AS6/CS6 上编译通过
96) 2012.6.1
96.1) feature: db_handle 增加了 escape_string 用于将数据库的字段中的特殊字符
进行转义以防止 SQL 注入攻击
96.2) feature: db_handle/db_pool 重新建立了二者实例对象之间的关联关系
95) 2012.5.31
95.1) feature: xml, 增加了 getFirstElementByTag/getFirstElementByTags从而更
方便用户操作 xml 对象
94) 2012.5.28
94.1) bugfix: mime/internal/mime_state_parse.cpp: 因为之前增加了 body_data_end
做为某个 MIME 结点数据体的结尾,当邮件体不是 MULTIPART 格式时body_data_end 也
应该赋值才对。
93) 2012.5.26
93.1) linux 平台下默认将对 polarssl 库的依赖去掉了
92) 2012.5.18: 1.1.1.0 BETA 版本发布
92.1) http 模块功能已经比较丰富了,基本可以替代传统的 CGI 方式,用户在使用
时可以象使用 java servlet 一样方便了GOOD WORK!
91) 2012.5.17
91.1) 修改了 mime/ 相关模块,从而可以使 http_mime 类支持文件上传了
90) 2012.5.16
90.1) http/: 增加了 http_mime 类,支持文件上传功能
89) 2012.5.15
89.1) http/: HttpServlet 类增加了对参数等的支持
89.2) http_client: 在调用第二个构建函数时rw_timeout_ 没有赋初始值(valgrind
检查出该错误)
88) 2012.5.13
88.1) http/: 增加了针对 CGI 的部分支持
88) 2012.5.10
88.1) feature: 增加了 HttpServlet, HttpServletRequest, HttpServletResponse,
HttpSession 等类,可以用作 CGI 开发
88.2) 去掉了 HTTP_COOKIE 结构, 增加了 HttpCookie 类
88.3) 增加了 samples/http_servlet 例子
87) 2012.5.2
87.1) http_client: 增加了 get_ostream/get_istream 接口,去掉了冗余的 write
接口,用户可以直接调用 http_client::get_ostream().write 来达到写的目的
86) 2012.4.26
86.1) feature: xml.hpp 中增加了 xml_attr 类,同时给 xml_node 类增加了用
来遍历结点所有属性的功能
85) 2012.4.24
85.1) feature: json 增加了 get_json() 函数xml 增加了 get_xml 函数
85.2) feature: json/xml 都增加了 first_child/next_child 用于某个结点遍历
子结点的函数,同时增加了 get_parent() 函数
84) 2012.4.22
84.1) feature: json/xml 均增加了一些非常有用的接口函数,从而更容易地创建
json/xml 对象,可以参考相关的例子
83) 2012.4.21
83.1) feature: json/xml 都增加了用于结点遍历的 first_node/next_node 接口
83.2) feature: master/ 框架,在 acl_cpp 库使用 acl 库中的 master 框架时,
用户的程序中不再需要包含 lib_acl.h 头文件,只需要包含 lib_acl.hpp 头文件
即可,这样使用户在使用 acl_cpp 库时可以不用再了解 acl 库的知识,同时在编译
时更为方便(只需要链接 lib_acl.a 库即可)
82) 2012.4.20
82.1) feature: 添加 json 库的封装及相关功能
82.2) samples: samples/json
81) 2012.4.17
81.1) feature: xml 库添加了创建 xml 对象序列号的功能
80) 2012.4.12
80.1) bugfix: master 框架下 master_proc, master_trigger 服务器模板需要
添加 acl_watchdog_pat() 过程通知 acl_master 进程子进程还正常; 在
master_base.hpp 中添加了一个新的成员变量daemon_mode_ 来表明是单独运行
模式还是后台进程模式
79) 2012.4.11
79.1) compile: 调整了在 WIN32 下 VC2010 编译工程
78) 2012.4.3
78.1) feature: http_header 即可以作为 HTTP 请求头,又可作为 HTTP 响应头
77) 2012.4.2
77.1) feature: http_client 丰富了一些函数接口,使该类即可以用作请求端的
HTTP 客户端流,又可以用作响应端的 HTTP 客户端流
76) 2012.4.1
76.1) bugfix: string.cpp, 在CS4/AS4 上的 g++ 无法区分变参类型的接口,如
format(const char* fmt, ...); format(const char* fmt, va_list ap),
所以导致了 string.cpp 的 format, format_append 的错误匹配,所以增加了
vformat(const char* fmt, va_list ap)
75) 2012.3.18
75.1) Makefile: 在 samples/ 下增加了一个统一的 Makefile.in, 所有的示例的
Makefile 文件都大大简化
75.2) bugfix: string.cpp 类中的 parse_xxx() 使用了临时的栈变量,现在统一
改成了线程局部存储变量
75.3) feature: 增加了 db_service_mysql 类,从而增加了对 mysql 数据库服务
的支持
75.4) db_service: 将 db_service 定义为基类,增加了 db_service_sqlite 用于
支持 sqlite 数据库
74) 2012.3.16
74.1) bugfix: mem_cache.cpp 在 set 命令时有个BUG已修复
73) 2012.3.13
73.1) Makefile: 指定了 mysql 头文件的路径为: include/mysql
73.2) feature: db_mysql.cpp 支持本地字符集
72) 2012.3.7
72.1) compile: 在编译动态库时可以指定链接路径,用法如下:
make shared rpath=xxx; 仅编译动态库
或 make rpath=xxx; 同时编译动态库及静态库存
71) 2012.2.18
71.1) 将根目录下的 mime 目录移到 src/mime/internal/ 目录下
70) 2012.2.15
70.1) src/stdlib/mem_cache.cpp: 实现了部分常用的 memcached 协议
69) 2012.2.14
69.1) src/ 目录重新规划了目录结构,从而显得更为清晰
68) 2012.1.19
68.1) feature: http_client/http_header, 允许接收来自于服务器的压缩数据并进行解压
68.2) samples: http_client2, 该例子用来测试 http_client 类
67) 2012.1.18
67.1) feature: log.hpp: 增加了接口 stdout_open 当未打开日志流时,通过此
函数用来将日志信息输出至标准输出
67.2) log.hpp: 将 open 函数的参数设置了缺省的值
67.3) feature: zlib_stream 增加了针对 HTTP 传输过程中解压 gzip 数据的支持
66) 2012.1.10 : 1.1.0.0 版本发布了!!!!!!!
66.1) feature: master_aio.cpp, 该库封装了 acl_master 服务器框架中的
单线程非阻塞模板
66.2) feature: master_proc.cpp, 该库封装了 acl_master 服务器框架中的
进程池模板
66.3) feature: master_trigger.cpp, 该库封装了 acl_master 服务器框架中的
触发器模板
66.3) samples: samples/master_aio, samples/master_proc, samples/master_trigger
65) 2012.1.8
65.1) feature: master_threads 类完善了一些接口调用
64) 2012.1.6
64.1) feature: master_threads.cpp, 该库封装了 acl_master 服务器框架中的多
线程处理模板
64.2) samples: samples/master_threads测试用例
63) 2011.12.21
63.1) feature: db_handle.cpp其中的 db_handle 类增加了三个函数,方便用户在
数据库查询后直接获得结果集get_first_row()/0, get_rows()/2, get_rows()/0
62) 2011.12.7
62.1) feature: 增加了 db_mysql.cpp该类从 db_handle 继续,从而使 db_handle
可以支持 mysql 了,但该类在 WIN32 使用时会有点问题,因为目前还没有找到合适的
libmysql.lib/libmysql.dll所以在 WIN32 使用该类时,建议使用 acl_cpp 的静态库
62.2) feature: 增加了 db_pool.cpp该类实现了数据库连接池的功能
62.3) samples: samples/mysql用来测试新加的 db_mysql 类
61) 2011.10.5
61.1) feature: 从 glib 中摘取了一段代码 win_iconv.cpp 用于支持 win32 环境下
的字符集转换功能,这样在 win32 下 acl_cpp 库既可以使用 iconv.dll 进行字符集
的转换,同时也可以通过在 acl_cpp 的编译开关定义 USE_WIN_ICONV 使用 win32 原
生的字符集转换功能。感谢 glib 中 win_iconv.cpp 的作者使用 win32 的原生 API
模拟了 iconv 库的功能。
60) 2011.10.3
60.1) mime.cpp: save_mail, get_image, get_images 三个函数增加了几个默认参数
59) 2011.9.15
59.1) malloc.cpp, malloc.hpp将针对 new, delete 的重载去掉,而作为条件编译保留
58) 2011.9.12
58.1) feature: 重载了 new, delete这样便于调用 acl 库的内存池切片库
57) 2011.9.5
57.1) string: 将 push_back 调用做为二进制字符添加,这样象 mime_code 等类
中调用 push_back 时就不会出错了
56) 2011.9.4
56.1) 重新设计了 pipe_stream 基础类,将原来的 push 和 pop 合为一个函数
push_pop其它相应的子类做相应修改
56.2) bugfix: 因为 string 类对二进制及纯字符做了存储区分,所以导致了
调用 push_back 等函数的调用会出错,其中 mime_code 类就因此而出错
55) 2011.9.3
55.1) feature: zlib_stream支持 pipe_stream 方式
55.2) samples: samples/zlib 增加了支持 pipe_stream 的测试
55.3) bugfix: charset_conv 当源字符集为 utf-8 时,针对 utf-8 的前缀判断有
问题
54) 2011.9.2
54.1) feature: zlib增加了对 zlib 库的封装,既支持流式压缩与解压缩,同时
又支持一次性压缩与解压缩,并且在 WIN32 平台下是动态加载 zlib.dll 的
54.2) samples: samples/zlib 为测试新的 zlib 库的例子
53) 2011.8.26
53.1) feature: mime 解析完毕后,允许从内存中转储邮件数据解析结果,原来在
转储解析结果时只能是从源文件中抽取数据;影响的类有 mime_node, mime_body
53.2) samples: mime 例子增加了针对 53.1) 新特性的测试用例
52) 2011.8.18
52.1) ipc_service 基类支持基于 WIN32 窗口消息方式的 IPC 通信,其它基于此
类的继承类 dns_service, http_service, db_service 均支持了 WIN32 窗口消息
的 IPC 通信方式; 当然,子类可以自行选择 IPC 通信方式是采用 IO 消息方式还
是 WIN32 窗口消息方式
52.2) samples: wn_dbservice 实例,用来检测 db_service 的功能以及 db_service
的 WIN32 消息的 IPC 通信功能
52.3) feature: 对于 iconv.dll, sqlite3.dll 调用的方式改为动态加载模式
51) 2011.8.14
51.1) 增加了 db_handle/db_sqlite 类,从而可以方便数据库的操作过程
51.2) 增加了 db_service 类,从而可以将数据库操作过程在子线程中处理,保证
了主线程仍然为非阻塞过程
50) 2011.7.22
50.1) final_tpl.hpp: 增加了类似于 java 中 final 功能的禁止继承的模板类
49) 2011.7.19
49.1) 修改了 acl::xml 中有关 XML 解析的方法,同时增加了一些注释,方便用户使用
49.2) feature: ssl_aio_stream/ssl_stream 允许来回切换流为 SSL 流或非 SSL 流
48) 2011.7.18
48.1) 增加了 WIN32 平台下的版本号资源
47) 2011.7.16
47.1) 消除了异步IO的回调类中的多重继承问题
46) 2011.7.3-7.6
46.1) feature: 增加了新类对象 ssl_aio_stream该类支持基于 polarssl 的加密
传输不过目前该类对象仅支持客户端连接流该类是支持非阻塞IO的SSL加密流对象
46.2) bugfix: ssl_stream(基于 polarssl 的阻塞流) 类对象修改了几处可能的问题
45) 2011.6.29
45.1) aio_stream/aio_istream/aio_ostream: 在添加回调类对象时,内部会动态
分配内存块用来存储这些对象,这样在类对象的回调中如果用户即调用删除回调类
对象的函数,这些动态分配的内存区并不会被误删除,从而可以保证之后对这些存
储对象的访问不至于出现非法访问的问题
44) 2011.6.28
44.1) feature:
aio_stream 类: 增加了 del_close_callback/del_timeout_callback
/disable_close_callback/disable_timeout_callback
aio_ostream 类: 增加了 del_write_callback/disable_write_callback
aio_istream 类: 增加了 del_read_callback/disable_read_callback
43) 2011.6.24
43.1) http_header: 去掉了类构造函数的两个无用的参数(domain 和 port)
43.2) http_request: 在类构造函数中添加了 domain, port 两个参数
42) 2011.6.23
42.1) 将 http_stream.c/http_stream.h 改名为 http_client.c/http_client.h
41) 2011.6.22
41.1) 修改了 Doxygen 报错的一些头文件中的注释
40) 2011.6.21
40.1) 为了与 VC 编辑器兼容,将所有的源文件和头文件都转成 DOS 方式,即回车
换行采用 \r\n主要是 VIM 比较智能它能根据文件的换行格式自动选取而VC
就比较弱虽然VC识别\n但添加换行时只会添加\r\n
39) 2011.6.16
39.1) 修改了一下 VC 的工程文件
39.2) http_request, dns_result_callback 两个 类增加了 destroy 虚接口,
以便于在子类中进行销毁类对象
39.3) bugfix: aio_handle.cpp, aio_timer_callback::del_task 不应该在调用
tasks_.erase(it); 之后的循环外再次判断 it == tasks_.end(),因为 iterator
被删除后 it 也就没有任何意义了
38) 2011.6.15
38.1) 为了便于使用 VC 自带的比较弱知的 NEW 宏来检查内存泄漏,不得不把内部
所有的 new 都改成 NEW在 acl_stafx.hpp 中添加了 WIN23 下的 NEW 宏定义
38.2) feature: 增加了类接口 aio_delay_free这样子类只要继承该类就可以
在异步引擎中被延迟释放;同时,将 aio_timer_callback 做为 aio_delay_free 的
子类;将 aio_handle 中的 delay_free_timer 改为 delay_free从而使该功能成
为一个更为通用的功能
37) 2011.6.13
37.1) HttpClient 创建了 vc2010 下的工程
36) 2011.6.10
36.1) 调整了一下在 VC 开始环境的工程
35) 2011.6.9
35.1) feature: 增加了 http_service 类可以方便进行HTTP请求处理过程
35.2) ipc_service: 优化了一些处理过程
34) 2011.6.1
34.1) feature: 异步定时器支持子类定时器可以设置多个定时消息事件
33) 2011.5.23
33.1) feature: win32 下支持 iconv 了
32) 2011.5.16
32.1) 将所有与定时器相关的精度由秒级提高到微秒级
31) 2011.5.13
31.1) bugfix: aio_ostream.cpp 中的类 aio_timer_writer::timer_callback()
中使用了一个无效的 iterator 进行判断
31.2) compile: 将 acl_stdafx.hpp 放在 src/ 目录下,以保持私有性
31.3) compile: 将VC链接时的警告去(/EDITANDCONTINUE, /OPT:ICF),只需要
打开增量链接就可以了
30) 2011.5.12
30.1) feature: 增加了类 rfc822用于解析对符合 rfc822 规范的邮件内容(如
邮件地址, 日期) 进行解析
30.2) samples: 增加了测试程序 samples/rfc822
29) 2011.5.6
29.1) feature: aio_stream 类增加了 get_astream() 接口可以获得 ACL_ASTREAM 对象
28) 2011.5.2
28.1) feature: xml.hpp, 增加了 get_xml_node() 函数
28.2) feature: stream.hpp, 增加了 get_vstream() 函数
28.3) feature: socket_stream.hpp, 增加了 open(ACL_VSTREAM*) 函数
27) 2011.4.21
27.1) mime/header_opts.cpp: 去掉了 header_opts_begin, header_opts_cleanup
两个函数,在内部增加了 acl_pthread_once, atexit 两个系统调用,可以保证内部
的全局静态对象仅被初始化一次,且当程序退出时会自动释放该对象
27.2) mime.cpp: mime::init(), mime::cleanup() 已经没有用处了,将来将会被去掉
26) 2011.4.15
26.1) xml: 增加了几个功能函数,方便取得 XML 对象中的相关属性值
26.2) acl_stdafx.hpp: 去掉了 *.hpp 包含
25) 2011.4.14
25.1) handlersocket: 增加了单独的 hsproto 类,专门用于协议处理
24) 2011.4.9
24.1) handlersocket, hsclient: 增加了因网络IO问题出错的重试功能
24.2) 修复了在高版本 gcc 上的编译错误
23) 2011.4.7-4.8
23.1) handlersocket: 优化了代码,并修复了一些问题,现在 handlersocket 主要由
hspool, hsclient, hstable, hsrow 四个类组成
22) 2011.3.31
22.1) bugfix: log.hpp 中的函数名可能会造成 VC2003 在函数重载解析后出错而导致
在运行时程序出现不可预知问题,所以将 log.hpp 中的函数名区分开而不采用C++中
函数名的重载方式
21) 2011.3.28
21.1) aio_xxx: 增加了异步流的功能,并修改了延迟读的 BUG
20) 2011.3.25
20.1) aio_handle.cpp: 当异步句柄为 WIN GUI 消息时,允许用户绑定自定义的消息号
19) 2011.3.16-3.20
19.1) feature: 在异步流的基础上增加了 ipc_xxx 等相关功能类,这些类可以保证
在不同线程或不同进程之间进行异步通信
19.2) feature: 在 ipc_xxx 基础上增加了 ipc_manager 类,该类可以保证主线程为
非阻塞过程,而子线程是阻塞过程,子线程通过 ipc 方式与主线程进行通信
19.3) feature: 在 ipc_manager 的基础上增加了 DNS 异步查询的功能类,该类的特
点是主线程是非阻塞的,而查询子线程是阻塞的,查询子线程通过 ipc_xxx 方式将结
果通知主线程
18) 2011.3.14
18.1) feature: aio_ostream/aio_istream 增加了延迟写/读的功能,方便网络限速
17) 2011.3.13
17.1) aio_handle: 增加了针对 WIN32 界面消息的支持
17.2) aio_handle: 增加了定时器功能
16) 2011.3.10
16.1) aio_xxx: 基本上成熟,可以使用了:)
16.2) string.cpp: 增加了二进制流及文件流的区分功能
15) 2011.3.8
15.1) aio: 继续完善
14) 2011.3.1
14.1) 完善了非阻塞IO的函数库
13) 2011.2.26-27
13.1) feature: 添加了异步非阻塞流的支持,增加了如下几个文件:
aio_stream.cpp, aio_socket_stream.cpp, aio_ostream.cpp,
aio_istream.cpp, aio_listen_stream.cpp
12) 2011.2.25
12.1) 修改了所有头文件,减少了使用 #include 的包含数量
11) 2011.2.23
11.1) feature: rfc2047, 增加了编码函数
11.2) feature: mime_base64, mime_xxcode, mime_uucode, mime_quoted_printable
增加了静态编码及静态解码的函数
11.3) bugfix: mem_cache, 采用 rfc2047 编码来处理协议中键值的特殊字符
10) 2011.2.22
10.1) mem_cache: 对 key 键值进行了简单的编码处理,以免与 memcached 协议的
分隔符有冲突
9) 2011.2.19
9.1) bugfix: header_opts.cpp内部使了一个线程不安全的静态变量
8) 2011.2.17
8.1) feature: mem_cache, 增加了更新存在键时间截的接口
7) 2011.2.14
7.1) feature: mem_cache 类封装了 libmemcached 的一些函数
7.2) samples: mem_cache/
6) 2011.2.12
6.1) feature: hsclient 该类增加了一些方便使用的函数接口
5) 2011.2.10
5.1) feature: 增加了对 handlersocket 的协议支持, hsclient.cpp
4) 2011.1.28
4.1) feature: mime_head.cpp, 增加了 header_values()/2, 用于获得对就相同名称
的多个字段的值集合
3) 2011.1.26
3.1) bugfix: mime.cpp, body_node(), 中查找邮件正文时如果不存在HTML格式的
正文时会有问题
2) 2011.1.14
2.1) bugfix: mime_state_parse.cpp, 当邮件为非 multipart 时,结点的
body_end 不对,应该是当前偏移量值 curr_off - 1 而不是 curr_off因为
curr_off 指的是文件中的下一个要处理的位置。
1) 2011.1.11
1.1) acl_wrap1.0 release