acl  3.5.3.0
HttpCookie.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include <list>
4 #include "../stdlib/dbuf_pool.hpp"
5 #include "http_type.hpp"
6 
7 namespace acl {
8 
9 /**
10  * http 协议头中 cookie 对象类
11  */
13 {
14 public:
15  /**
16  * 构造函数
17  * @param name {const char*} cookie 名,为非空字符串且字符串长度 > 0
18  * @param value {const char*} cookie 值,指针非空,字符串长度可以为 0
19  * 注:如果输入的两个参数不符合条件,内部将会产生断言
20  * @param dbuf {dbuf_guard*} 非空时将做为内存分配池
21  */
22  HttpCookie(const char* name, const char* value, dbuf_guard* dbuf = NULL);
23 
24  /**
25  * 当使用该构造函数时,可以使用 setCookie 来添加 cookie 项
26  * @param dbuf {dbuf_guard*} 非空时将做为内存分配池
27  */
28  HttpCookie(dbuf_guard* dbuf = NULL);
29 
30  /**
31  * 拷贝构造函数
32  * @param cookie {const HttpCookie*} 非 NULL, 内部将复制拷贝其成员变量
33  * @param dbuf {dbuf_guard*} 非空时将做为内存分配池
34  */
35  HttpCookie(const HttpCookie* cookie, dbuf_guard* dbuf = NULL);
36 
37  /**
38  * 析构函数
39  */
40  ~HttpCookie(void);
41 
42  /**
43  * 对于 Set-Cookie: xxx=xxx; domain=xxx; expires=xxx; path=xxx; max-age=xxx; ...
44  * 类的数据进行分析
45  * @param value {const char*} 类似于 xxx=xxx; domain=xxx; ... 内容
46  * @return {bool} 传入的数据是否合法
47  */
48  bool setCookie(const char* value);
49 
50  /**
51  * 动态创建的类对象通过此函数释放
52  */
53  void destroy();
54 
55  /**
56  * 设置 cookie 的作用域
57  * @param domain {const char*} cookie 作用域
58  * @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
59  */
60  HttpCookie& setDomain(const char* domain);
61 
62  /**
63  * 设置 cookie 的 path 字段
64  * @param path {const char*} path 字段值
65  * @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
66  */
67  HttpCookie& setPath(const char* path);
68 
69  /**
70  * 设置 cookie 的过期时间段,即用当前时间加输入的时间即为 cookie
71  * 的过期时间
72  * @param timeout {time_t} 过期时间值(单位为秒),当前时间加该时间
73  * 即 cookie 的过期时间
74  * @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
75  */
76  HttpCookie& setExpires(time_t timeout);
77 
78  /**
79  * 设置 cookie 的过期时间截字符串
80  * @param expires {const char*} 过期时间截
81  * @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
82  */
83  HttpCookie& setExpires(const char* expires);
84 
85  /**
86  * 设置 cookie 的生存周期
87  * @param max_age {int} 生存秒数
88  * @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
89  */
90  HttpCookie& setMaxAge(int max_age);
91 
92  /**
93  * 添加与该 cookie 对象其它属性值
94  * @param name {const char*} 属性名
95  * @param value {const char*} 属性值
96  * @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
97  */
98  HttpCookie& add(const char* name, const char* value);
99 
100  /**
101  * 获得 cookie 名称,取决于构建函数输入值
102  * @return {const char*} 为长度大于 0 的字符串,永远非空指针
103  * 注:用户必须在调用 HttpCookie(const char*, const char*) 构造
104  * 或调用 setCookie(const char*) 成功后才可以调用该函数,
105  * 否则返回的数据是 "\0"
106  */
107  const char* getName(void) const;
108 
109  /**
110  * 获得 cookie 值,取决于构造函数输入值
111  * @return {const char*} 非空指针,有可能是空字符串("\0")
112  */
113  const char* getValue(void) const;
114 
115  /**
116  * 获得字符串格式的过期时间
117  * @return {const char*} 非空指针,返回值为 "\0" 表示不存在
118  */
119  const char* getExpires(void) const;
120 
121  /**
122  * 获得 cookie 作用域
123  * @return {const char*} 非空指针,返回值为 "\0" 表示不存在
124  */
125  const char* getDomain(void) const;
126 
127  /**
128  * 获得 cookie 的存储路径
129  * @return {const char*} 非空指针,返回值为 "\0" 表示不存在
130  */
131  const char* getPath(void) const;
132 
133  /**
134  * 获得 cookie 的生存周期
135  * @return {int} 返回 -1 时表示没有该 Max-Age 字段
136  */
137  int getMaxAge(void) const;
138 
139  /**
140  * 获得对应参数名的参数值
141  * @param name {const char*} 参数名
142  * @param case_insensitive {bool} 是否区分大小写,true 表示
143  * 不区分大小写
144  * @return {const char*} 非空指针,返回值为 "\0" 表示不存在
145  */
146  const char* getParam(const char* name,
147  bool case_insensitive = true) const;
148 
149  /**
150  * 获得该 cookie 对象的除 cookie 名及 cookie 值之外的
151  * 所有属性及属性值
152  * @return {const std::list<HTTP_PARAM*>&}
153  */
154  const std::list<HTTP_PARAM*>& getParams(void) const;
155 
156 private:
157  dbuf_guard* dbuf_internal_;
158  dbuf_guard* dbuf_;
159  char dummy_[1];
160  char* name_;
161  char* value_;
162  std::list<HTTP_PARAM*> params_;
163 
164  bool splitNameValue(char* data, HTTP_PARAM* param);
165 
166 protected:
167 // HttpCookie(HttpCookie&) {}
168 // HttpCookie(const HttpCookie&) {}
169 };
170 
171 } // namespace acl end
HTTP_API void const char * name
Definition: lib_http.h:620
#define ACL_CPP_API