acl/lib_acl_cpp/include/acl_cpp/http/HttpCookie.hpp
2024-07-22 17:07:57 +08:00

171 lines
4.4 KiB
C++
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.

#pragma once
#include "../acl_cpp_define.hpp"
#include <list>
#include "../stdlib/dbuf_pool.hpp"
#include "http_type.hpp"
namespace acl {
/**
* http 协议头中 cookie 对象类
*/
class ACL_CPP_API HttpCookie : public dbuf_obj {
public:
/**
* 构造函数
* @param name {const char*} cookie 名,为非空字符串且字符串长度 > 0
* @param value {const char*} cookie 值,指针非空,字符串长度可以为 0
* 注:如果输入的两个参数不符合条件,内部将会产生断言
* @param dbuf {dbuf_guard*} 非空时将做为内存分配池
*/
HttpCookie(const char* name, const char* value, dbuf_guard* dbuf = NULL);
/**
* 当使用该构造函数时,可以使用 setCookie 来添加 cookie 项
* @param dbuf {dbuf_guard*} 非空时将做为内存分配池
*/
explicit HttpCookie(dbuf_guard* dbuf = NULL);
/**
* 拷贝构造函数
* @param cookie {const HttpCookie*} 非 NULL 内部将复制拷贝其成员变量
* @param dbuf {dbuf_guard*} 非空时将做为内存分配池
*/
explicit HttpCookie(const HttpCookie* cookie, dbuf_guard* dbuf = NULL);
/**
* 析构函数
*/
~HttpCookie();
/**
* 对于 Set-Cookie: xxx=xxx; domain=xxx; expires=xxx; path=xxx; max-age=xxx; ...
* 类的数据进行分析
* @param value {const char*} 类似于 xxx=xxx; domain=xxx; ... 内容
* @return {bool} 传入的数据是否合法
*/
bool setCookie(const char* value);
/**
* 动态创建的类对象通过此函数释放
*/
void destroy();
/**
* 设置 cookie 的作用域
* @param domain {const char*} cookie 作用域
* @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
*/
HttpCookie& setDomain(const char* domain);
/**
* 设置 cookie 的 path 字段
* @param path {const char*} path 字段值
* @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
*/
HttpCookie& setPath(const char* path);
/**
* 设置 cookie 的过期时间段,即用当前时间加输入的时间即为 cookie
* 的过期时间
* @param timeout {time_t} 过期时间值(单位为秒),当前时间加该时间
* 即 cookie 的过期时间
* @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
*/
HttpCookie& setExpires(time_t timeout);
/**
* 设置 cookie 的过期时间截字符串
* @param expires {const char*} 过期时间截
* @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
*/
HttpCookie& setExpires(const char* expires);
/**
* 设置 cookie 的生存周期
* @param max_age {int} 生存秒数
* @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
*/
HttpCookie& setMaxAge(int max_age);
/**
* 添加与该 cookie 对象其它属性值
* @param name {const char*} 属性名
* @param value {const char*} 属性值
* @return {HttpCookie&} 返回本对象的引用,便于用户连续操作
*/
HttpCookie& add(const char* name, const char* value);
/**
* 获得 cookie 名称,取决于构建函数输入值
* @return {const char*} 为长度大于 0 的字符串,永远非空指针
* 注:用户必须在调用 HttpCookie(const char*, const char*) 构造
* 或调用 setCookie(const char*) 成功后才可以调用该函数,
* 否则返回的数据是 "\0"
*/
const char* getName() const;
/**
* 获得 cookie 值,取决于构造函数输入值
* @return {const char*} 非空指针,有可能是空字符串("\0")
*/
const char* getValue() const;
/**
* 获得字符串格式的过期时间
* @return {const char*} 非空指针,返回值为 "\0" 表示不存在
*/
const char* getExpires() const;
/**
* 获得 cookie 作用域
* @return {const char*} 非空指针,返回值为 "\0" 表示不存在
*/
const char* getDomain() const;
/**
* 获得 cookie 的存储路径
* @return {const char*} 非空指针,返回值为 "\0" 表示不存在
*/
const char* getPath() const;
/**
* 获得 cookie 的生存周期
* @return {int} 返回 -1 时表示没有该 Max-Age 字段
*/
int getMaxAge() const;
/**
* 获得对应参数名的参数值
* @param name {const char*} 参数名
* @param case_insensitive {bool} 是否区分大小写true 表示
* 不区分大小写
* @return {const char*} 非空指针,返回值为 "\0" 表示不存在
*/
const char* getParam(const char* name,
bool case_insensitive = true) const;
/**
* 获得该 cookie 对象的除 cookie 名及 cookie 值之外的
* 所有属性及属性值
* @return {const std::list<HTTP_PARAM*>&}
*/
const std::list<HTTP_PARAM*>& getParams() const;
private:
dbuf_guard* dbuf_internal_;
dbuf_guard* dbuf_;
char dummy_[1];
char* name_;
char* value_;
std::list<HTTP_PARAM*> params_;
bool splitNameValue(char* data, HTTP_PARAM* param);
protected:
// HttpCookie(HttpCookie&) {}
// HttpCookie(const HttpCookie&) {}
};
} // namespace acl end