Files
cos-cpp-sdk-v5/include/cos_defines.h
a158 3cf88acc07 BG
2026-04-05 20:22:11 +08:00

1244 lines
33 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.
#ifndef COS_CPP_SDK_V5_INCLUDE_COS_DEFINES_H_
#define COS_CPP_SDK_V5_INCLUDE_COS_DEFINES_H_
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <functional>
#include "util/log_util.h"
namespace qcloud_cos {
#define COS_CPP_SDK_VERSON "v5.5.20"
/// 路径分隔符
const char kPathDelimiter[] = "/";
/// 路径分隔符
const unsigned char kPathDelimiterChar = '/';
/// 分块上传时,失败的最大重试次数
const int kMaxRetryTimes = 3;
/// 默认线程池大小
const int kDefaultPoolSize = 2;
/// 分块上传的线程池默认大小
const int kDefaultThreadPoolSizeUploadPart = 5;
/// 分块上传的线程池最大数目
const int kMaxThreadPoolSizeUploadPart = 100;
/// 分块上传的线程池最小数目
const int kMinThreadPoolSizeUploadPart = 1;
/// 最大分开数量
const int kMaxPartNumbers = 10000;
/// 分块大小1M
const uint64_t kPartSize1M = 1 * 1024 * 1024;
/// 分块大小5G
const uint64_t kPartSize5G = (uint64_t)5 * 1024 * 1024 * 1024;
using SSLCtxCallback = std::function<int(void *ssl_ctx, void* user_data)>;
const bool COS_CHANGE_BACKUP_DOMAIN = true;
typedef enum log_out_type {
COS_LOG_NULL = 0,
COS_LOG_STDOUT,
COS_LOG_SYSLOG
} LOG_OUT_TYPE;
typedef enum {
HTTP_HEAD,
HTTP_GET,
HTTP_PUT,
HTTP_POST,
HTTP_DELETE,
HTTP_OPTIONS
} HTTP_METHOD;
typedef enum cos_log_level {
COS_LOG_ERR = 1, // LOG_ERR
COS_LOG_WARN = 2, // LOG_WARNING
COS_LOG_INFO = 3, // LOG_INFO
COS_LOG_DBG = 4 // LOG_DEBUG
} LOG_LEVEL;
typedef enum file_type { CSV = 0, JSON } SELECT_FILE_TYPE;
typedef enum compress_type {
COMPRESS_NONE = 0,
COMPRESS_GZIP,
COMPRESS_BZIP2
} SELECT_COMPRESS_TYPE;
#define LOG_LEVEL_STRING(level) \
((level == COS_LOG_DBG) ? "[DBG] " \
: (level == COS_LOG_INFO) ? "[INFO] " \
: (level == COS_LOG_WARN) ? "[WARN] " \
: (level == COS_LOG_ERR) ? "[ERR] " \
: "[CRIT]")
#define COS_LOW_LOGPRN(level, fmt, ...) \
if (level <= CosSysConfig::GetLogLevel()) { \
if (CosSysConfig::GetLogOutType() == COS_LOG_STDOUT) { \
fprintf(stdout, "%s:%s(%d) " fmt "\n", LOG_LEVEL_STRING(level), \
__func__, __LINE__, ##__VA_ARGS__); \
} else if (CosSysConfig::GetLogOutType() == COS_LOG_SYSLOG) { \
LogUtil::Syslog(level, "%s:%s(%d) " fmt "\n", LOG_LEVEL_STRING(level), \
__func__, __LINE__, ##__VA_ARGS__); \
} else { \
} \
} else { \
} \
{ \
auto log_callback = CosSysConfig::GetLogCallback(); \
if (log_callback && level <= CosSysConfig::GetLogLevel()) { \
std::string logstr = \
LogUtil::FormatLog(level, "%s:%s(%d) " fmt "\n", __FILE__, __func__, \
__LINE__, ##__VA_ARGS__); \
log_callback(logstr); \
} \
}
#define SDK_LOG_DBG(fmt, ...) COS_LOW_LOGPRN(COS_LOG_DBG, fmt, ##__VA_ARGS__)
#define SDK_LOG_INFO(fmt, ...) COS_LOW_LOGPRN(COS_LOG_INFO, fmt, ##__VA_ARGS__)
#define SDK_LOG_WARN(fmt, ...) COS_LOW_LOGPRN(COS_LOG_WARN, fmt, ##__VA_ARGS__)
#define SDK_LOG_ERR(fmt, ...) COS_LOW_LOGPRN(COS_LOG_ERR, fmt, ##__VA_ARGS__)
#define SDK_LOG_COS(level, fmt, ...) COS_LOW_LOGPRN(level, fmt, ##__VA_ARGS__)
#define UNUSED_PARAM(x) (void)x;
struct Content {
std::string m_key; // Object 的 Key
std::string m_last_modified; // Object 最后被修改时间
std::string m_etag; // 文件的 MD-5 算法校验值
std::string m_size; // 文件大小,单位是 Byte
std::vector<std::string> m_owner_ids; // Bucket 持有者信息
std::string
m_storage_class; // Object 的存储级别枚举值STANDARDSTANDARD_IA
};
struct ReplicationRule {
bool m_is_enable;
std::string m_id; // 非必须
std::string m_prefix;
std::string m_dest_bucket;
std::string m_dest_storage_class; // 非必须
ReplicationRule() {}
ReplicationRule(const std::string& prefix, const std::string& dest_bucket,
const std::string& storage_class = "",
const std::string& id = "", bool is_enable = true) {
m_is_enable = is_enable;
m_id = id;
m_prefix = prefix;
m_dest_bucket = dest_bucket;
m_dest_storage_class = storage_class;
}
};
struct LifecycleTag {
std::string key;
std::string value;
};
class LifecycleFilter {
public:
LifecycleFilter() : m_mask(0x00000000u), m_prefix("") {}
std::string GetPrefix() const { return m_prefix; }
std::vector<LifecycleTag> GetTags() const { return m_tags; }
void SetPrefix(const std::string& prefix) {
m_mask |= 0x00000001u;
m_prefix = prefix;
}
void SetTags(const std::vector<LifecycleTag>& tags) {
m_mask |= 0x00000002u;
m_tags = tags;
}
void AddTag(const LifecycleTag& tag) {
m_mask |= 0x00000002u;
m_tags.push_back(tag);
}
bool HasPrefix() const { return (m_mask & 0x00000001u) != 0; }
bool HasTags() const { return (m_mask & 0x00000002u) != 0; }
private:
uint64_t m_mask;
std::string m_prefix;
std::vector<LifecycleTag> m_tags;
};
class LifecycleTransition {
public:
LifecycleTransition()
: m_mask(0x00000000u), m_days(0), m_date(""), m_storage_class("") {}
uint64_t GetDays() const { return m_days; }
std::string GetDate() const { return m_date; }
std::string GetStorageClass() const { return m_storage_class; }
void SetDays(uint64_t days) {
m_mask |= 0x00000001u;
m_days = days;
}
void SetDate(const std::string& date) {
m_mask |= 0x00000002u;
m_date = date;
}
void SetStorageClass(const std::string& storage_class) {
m_mask |= 0x00000004u;
m_storage_class = storage_class;
}
bool HasDays() const { return (m_mask & 0x00000001u) != 0; }
bool HasDate() const { return (m_mask & 0x00000002u) != 0; }
bool HasStorageClass() const { return (m_mask & 0x00000004u) != 0; }
private:
uint64_t m_mask;
// 不能在同一规则中同时使用Days和Date
uint64_t m_days; // 有效值是非负整数
std::string m_date;
std::string m_storage_class;
};
class LifecycleExpiration {
public:
LifecycleExpiration()
: m_mask(0x00000000u),
m_days(0),
m_date(""),
m_expired_obj_del_marker(false) {}
uint64_t GetDays() const { return m_days; }
std::string GetDate() const { return m_date; }
bool IsExpiredObjDelMarker() const { return m_expired_obj_del_marker; }
void SetDays(uint64_t days) {
m_mask |= 0x00000001u;
m_days = days;
}
void SetDate(const std::string& date) {
m_mask |= 0x00000002u;
m_date = date;
}
void SetExpiredObjDelMarker(bool marker) {
m_mask |= 0x00000004u;
m_expired_obj_del_marker = marker;
}
bool HasDays() const { return (m_mask & 0x00000001u) != 0; }
bool HasDate() const { return (m_mask & 0x00000002u) != 0; }
bool HasExpiredObjDelMarker() const { return (m_mask & 0x00000004u) != 0; }
private:
uint64_t m_mask;
// 不能在同一规则中同时使用Days和Date
uint64_t m_days; // 有效值为正整数
std::string m_date;
bool m_expired_obj_del_marker;
};
class LifecycleNonCurrTransition {
public:
LifecycleNonCurrTransition()
: m_mask(0x00000000u), m_days(0), m_storage_class("") {}
uint64_t GetDays() const { return m_days; }
std::string GetStorageClass() const { return m_storage_class; }
void SetDays(uint64_t days) {
m_mask |= 0x00000001u;
m_days = days;
}
void SetStorageClass(const std::string& storage_class) {
m_mask |= 0x00000002u;
m_storage_class = storage_class;
}
bool HasDays() const { return (m_mask & 0x00000001u) != 0; }
bool HasStorageClass() const { return (m_mask & 0x00000002u) != 0; }
private:
uint64_t m_mask;
uint64_t m_days;
std::string m_storage_class;
};
class LifecycleNonCurrExpiration {
public:
LifecycleNonCurrExpiration() : m_mask(0x00000000u), m_days(0) {}
uint64_t GetDays() const { return m_days; }
void SetDays(uint64_t days) {
m_mask |= 0x00000001u;
m_days = days;
}
bool HasDays() const { return (m_mask & 0x00000001u) != 0; }
private:
uint64_t m_mask;
uint64_t m_days;
};
struct AbortIncompleteMultipartUpload {
uint64_t m_days_after_init;
};
class LifecycleRule {
public:
LifecycleRule() : m_mask(0x00000000u), m_is_enable(false), m_id("") {}
void SetIsEnable(bool is_enable) {
m_mask |= 0x00000001u;
m_is_enable = is_enable;
}
void SetId(const std::string& id) {
m_mask |= 0x00000002u;
m_id = id;
}
void SetFilter(const LifecycleFilter& filter) {
m_mask |= 0x00000004u;
m_filter = filter;
}
void AddTransition(const LifecycleTransition& rh) {
m_mask |= 0x00000008u;
m_transitions.push_back(rh);
}
void SetExpiration(const LifecycleExpiration& rh) {
m_mask |= 0x00000010u;
m_expiration = rh;
}
void SetNonCurrTransition(const LifecycleNonCurrTransition& rh) {
m_mask |= 0x00000020u;
m_non_curr_transition = rh;
}
void SetNonCurrExpiration(const LifecycleNonCurrExpiration& rh) {
m_mask |= 0x00000040u;
m_non_curr_expiration = rh;
}
void SetAbortIncompleteMultiUpload(const AbortIncompleteMultipartUpload& rh) {
m_mask |= 0x00000080u;
m_abort_multi_upload = rh;
}
bool IsEnable() const { return m_is_enable; }
std::string GetId() const { return m_id; }
LifecycleFilter GetFilter() const { return m_filter; }
std::vector<LifecycleTransition> GetTransitions() const {
return m_transitions;
}
LifecycleExpiration GetExpiration() const { return m_expiration; }
LifecycleNonCurrTransition GetNonCurrTransition() const {
return m_non_curr_transition;
}
LifecycleNonCurrExpiration GetNonCurrExpiration() const {
return m_non_curr_expiration;
}
AbortIncompleteMultipartUpload GetAbortIncompleteMultiUpload() const {
return m_abort_multi_upload;
}
bool HasIsEnable() const { return (m_mask & 0x00000001u) != 0; }
bool HasId() const { return (m_mask & 0x00000002u) != 0; }
bool HasFilter() const { return (m_mask & 0x00000004u) != 0; }
bool HasTransition() const { return (m_mask & 0x00000008u) != 0; }
bool HasExpiration() const { return (m_mask & 0x00000010u) != 0; }
bool HasNonCurrTransition() const { return (m_mask & 0x00000020u) != 0; }
bool HasNonCurrExpiration() const { return (m_mask & 0x00000040u) != 0; }
bool HasAbortIncomMultiUpload() const { return (m_mask & 0x00000080u) != 0; }
private:
uint64_t m_mask;
bool m_is_enable;
std::string m_id;
LifecycleFilter m_filter;
std::vector<LifecycleTransition> m_transitions;
LifecycleExpiration m_expiration;
LifecycleNonCurrTransition m_non_curr_transition;
LifecycleNonCurrExpiration m_non_curr_expiration;
AbortIncompleteMultipartUpload m_abort_multi_upload;
};
struct Grantee {
std::string m_type;
std::string m_id;
std::string m_display_name;
std::string m_uri;
};
struct Grant {
Grantee m_grantee;
std::string m_perm;
};
struct CORSRule {
std::string m_id;
std::string m_max_age_secs;
std::vector<std::string> m_allowed_headers;
std::vector<std::string> m_allowed_methods;
std::vector<std::string> m_allowed_origins;
std::vector<std::string> m_expose_headers;
};
struct Initiator {
std::string m_id;
std::string m_display_name;
};
struct Owner {
std::string m_id;
std::string m_display_name;
};
// The result of the listmultiparts
struct Upload {
std::string m_key;
std::string m_uploadid;
std::string m_storage_class;
std::vector<Owner> m_initator;
std::vector<Owner> m_owner;
std::string m_initiated;
};
struct Part {
uint64_t m_part_num;
uint64_t m_size;
std::string m_etag;
std::string m_last_modified;
};
// 描述单个 Bucket 的信息
struct Bucket {
std::string m_name; // Bucket 名称
std::string m_location; // Bucket 所在地域
std::string m_create_date; // Bucket 创建时间。ISO8601 格式,例如
// 2016-11-09T08:46:32.000Z
};
struct ObjectVersionPair {
std::string m_object_name;
std::string m_version_id;
ObjectVersionPair() {
m_object_name = "";
m_version_id = "";
}
ObjectVersionPair(const std::string& obj_name,
const std::string& version_id) {
m_object_name = obj_name;
m_version_id = version_id;
}
};
struct DeletedInfo {
DeletedInfo()
: m_key(""),
m_version_id(""),
m_delete_marker(false),
m_delete_marker_version_id("") {}
std::string m_key;
std::string m_version_id;
bool m_delete_marker;
std::string m_delete_marker_version_id;
};
struct ErrorInfo {
ErrorInfo() : m_key(""), m_code(""), m_message(""), m_version_id("") {}
std::string m_key;
std::string m_code;
std::string m_message;
std::string m_version_id;
};
struct COSVersionSummary {
bool m_is_delete_marker;
std::string m_etag;
uint64_t m_size;
std::string m_storage_class;
bool m_is_latest;
std::string m_key;
std::string m_last_modified;
Owner m_owner;
std::string m_version_id;
};
class LoggingEnabled {
public:
LoggingEnabled()
: m_mask(0x00000000u), m_targetbucket(""), m_targetprefix("") {}
LoggingEnabled& operator=(const LoggingEnabled& obj) {
if (this == &obj) {
return *this;
} else {
m_mask = obj.GetMask();
m_targetbucket = obj.GetTargetBucket();
m_targetprefix = obj.GetTargetPrefix();
return *this;
}
}
void SetTargetBucket(const std::string& targetbucket) {
m_mask = m_mask | 0x00000001u;
m_targetbucket = targetbucket;
}
void SetTargetPrefix(const std::string& targetprefix) {
m_mask = m_mask | 0x00000002u;
m_targetprefix = targetprefix;
}
uint64_t GetMask() const { return m_mask; }
std::string GetTargetBucket() const { return m_targetbucket; }
std::string GetTargetPrefix() const { return m_targetprefix; }
bool HasTargetBucket() const { return (m_mask & 0x00000001u) != 0; }
bool HasTargetPrefix() const { return (m_mask & 0x00000002u) != 0; }
virtual ~LoggingEnabled() {}
private:
uint64_t m_mask;
std::string m_targetbucket;
std::string m_targetprefix;
};
class DomainRule {
public:
DomainRule()
: m_mask(0x00000000u),
m_status(""),
m_name(""),
m_type(""),
m_forcedreplacement("") {}
DomainRule& operator=(const DomainRule& obj) {
if (this == &obj) {
return *this;
} else {
m_name = obj.GetName();
m_type = obj.GetType();
m_status = obj.GetStatus();
m_mask = obj.GetMask();
m_forcedreplacement = obj.GetForcedReplacement();
return *this;
}
}
virtual ~DomainRule() {}
void SetStatus(const std::string& status) {
m_mask = m_mask | 0x00000001u;
m_status = status;
}
void SetName(const std::string& name) {
m_mask = m_mask | 0x00000002u;
m_name = name;
}
void SetType(const std::string& type) {
m_mask = m_mask | 0x00000004u;
m_type = type;
}
void SetForcedReplacement(const std::string& forcedreplacement) {
m_mask = m_mask | 0x00000008u;
m_forcedreplacement = forcedreplacement;
}
std::string GetStatus() const { return m_status; }
std::string GetName() const { return m_name; }
std::string GetType() const { return m_type; }
std::string GetForcedReplacement() const { return m_forcedreplacement; }
uint64_t GetMask() const { return m_mask; }
bool HasStatus() const { return (m_mask & 0x00000001u) != 0; }
bool HasName() const { return (m_mask & 0x00000002u) != 0; }
bool HasType() const { return (m_mask & 0x00000004u) != 0; }
bool HasForcedrePlacement() const { return (m_mask & 0x00000008u) != 0; }
private:
uint64_t m_mask;
std::string m_status;
std::string m_name;
std::string m_type;
std::string m_forcedreplacement;
};
class DomainErrorMsg {
public:
DomainErrorMsg() : m_code(""), m_message(""), m_resource(""), m_traceid("") {}
virtual ~DomainErrorMsg() {}
void SetCode(const std::string& code) { m_code = code; }
void SetMessage(const std::string& message) { m_message = message; }
void SetResource(const std::string& resource) { m_resource = resource; }
void SetRequestid(const std::string& requestid) { m_requestid = requestid; }
void SetTraceid(const std::string& traceid) { m_traceid = traceid; }
std::string GetCode() const { return m_code; }
std::string GetMessage() const { return m_message; }
std::string GetResource() const { return m_resource; }
std::string GetRequestid() const { return m_requestid; }
std::string GetTraceid() const { return m_traceid; }
private:
std::string m_code;
std::string m_message;
std::string m_resource;
std::string m_requestid;
std::string m_traceid;
};
class Condition {
public:
Condition()
: m_mask(0x00000000u),
m_httperrorcodereturnedequals(404),
m_keyprefixequals("") {}
Condition& operator=(const Condition& obj) {
if (this == &obj) {
return *this;
} else {
m_mask = obj.GetMask();
m_keyprefixequals = obj.GetKeyPrefixEquals();
m_httperrorcodereturnedequals = obj.GetHttpErrorCodeReturnedEquals();
return *this;
}
}
void SetHttpErrorCodeReturnedEquals(const int& httpcode) {
m_mask = m_mask | 0x00000001u;
m_httperrorcodereturnedequals = httpcode;
}
void SetKeyPrefixEquals(const std::string& keyprefixequals) {
m_mask = m_mask | 0x00000002u;
m_keyprefixequals = keyprefixequals;
}
bool HasHttpErrorCodeReturnedEquals() const {
return (m_mask & 0x00000001u) != 0;
}
bool HasKeyPrefixEquals() const { return (m_mask & 0x00000002u) != 0; }
uint64_t GetMask() const { return m_mask; }
int GetHttpErrorCodeReturnedEquals() const {
return m_httperrorcodereturnedequals;
}
std::string GetKeyPrefixEquals() const { return m_keyprefixequals; }
virtual ~Condition() {}
private:
uint64_t m_mask;
int m_httperrorcodereturnedequals;
std::string m_keyprefixequals;
};
class Redirect {
public:
Redirect()
: m_mask(0x00000000u),
m_protocol(""),
m_replacekeywith(""),
m_replacekeyprefixwith("") {}
Redirect& operator=(const Redirect& obj) {
if (this == &obj) {
return *this;
} else {
m_mask = obj.GetMask();
m_protocol = obj.GetProtocol();
m_replacekeywith = obj.GetReplaceKeyWith();
m_replacekeyprefixwith = obj.GetReplaceKeyPrefixWith();
return *this;
}
}
void SetProtocol(const std::string protocol) {
m_mask = m_mask | 0x00000001u;
m_protocol = protocol;
}
void SetReplaceKeyWith(const std::string replacekeywith) {
m_mask = m_mask | 0x00000002u;
m_replacekeywith = replacekeywith;
}
void SetReplaceKeyPrefixWith(const std::string replacekeyprefixwith) {
m_mask = m_mask | 0x00000004u;
m_replacekeyprefixwith = replacekeyprefixwith;
}
uint64_t GetMask() const { return m_mask; }
std::string GetProtocol() const { return m_protocol; }
std::string GetReplaceKeyWith() const { return m_replacekeywith; }
std::string GetReplaceKeyPrefixWith() const { return m_replacekeyprefixwith; }
bool HasProtocol() const { return (m_mask & 0x00000001u) != 0; }
bool HasReplaceKeyWith() const { return (m_mask & 0x00000002u) != 0; }
bool HasReplaceKeyPrefixWith() const { return (m_mask & 0x00000004u) != 0; }
virtual ~Redirect() {}
private:
uint64_t m_mask;
std::string m_protocol;
std::string m_replacekeywith;
std::string m_replacekeyprefixwith;
};
class RoutingRule {
public:
RoutingRule() : m_mask(0x00000000u), m_condition(), m_redirect() {}
RoutingRule(const RoutingRule& obj) {
m_mask = obj.m_mask;
m_condition = obj.GetCondition();
m_redirect = obj.GetRedirect();
}
RoutingRule& operator=(const RoutingRule& obj) {
if (this == &obj) {
return *this;
} else {
m_mask = obj.GetMask();
m_condition = obj.GetCondition();
m_redirect = obj.GetRedirect();
return *this;
}
}
void SetCondition(const Condition& condition) {
m_mask = m_mask | 0x00000001u;
m_condition = condition;
}
void SetRedirect(const Redirect& redirect) {
m_mask = m_mask | 0x00000002u;
m_redirect = redirect;
}
uint64_t GetMask() const { return m_mask; }
const Condition& GetCondition() const { return m_condition; }
const Redirect& GetRedirect() const { return m_redirect; }
bool HasCondition() const { return (m_mask & 0x00000001u) != 0; }
bool HasRedirect() const { return (m_mask & 0x00000002u) != 0; }
virtual ~RoutingRule() {}
private:
uint64_t m_mask;
Condition m_condition;
Redirect m_redirect;
};
class Tag {
public:
Tag() : m_mask(0x00000000u), m_key(""), m_value("") {}
void SetKey(const std::string key) {
m_mask = m_mask | 0x00000001u;
m_key = key;
}
void SetValue(const std::string value) {
m_mask = m_mask | 0x00000002u;
m_value = value;
}
uint64_t GetMask() const { return m_mask; }
std::string GetKey() const { return m_key; }
std::string GetValue() const { return m_value; }
bool HasKey() const { return (m_mask & 0x00000001u) != 0; }
bool HasValue() const { return (m_mask & 0x00000002u) != 0; }
private:
uint64_t m_mask;
std::string m_key;
std::string m_value;
};
class COSBucketDestination {
public:
COSBucketDestination()
: m_mask(0x00000000u),
m_format(""),
m_accountId(""),
m_bucket(""),
m_prefix(""),
m_encryption(false) {}
void SetFormat(const std::string& format) {
m_mask = m_mask | 0x00000001u;
m_format = format;
}
void SetAccountId(const std::string& accountId) {
m_mask = m_mask | 0x00000002u;
m_accountId = accountId;
}
void SetBucket(const std::string& bucket) {
m_mask = m_mask | 0x00000004u;
m_bucket = bucket;
}
void SetPrefix(const std::string& prefix) {
m_mask = m_mask | 0x00000008u;
m_prefix = prefix;
}
void SetEncryption(const bool encryption) {
m_mask = m_mask | 0x000000010u;
m_encryption = encryption;
}
uint64_t GetMask() const { return m_mask; }
std::string GetFormat() const { return m_format; }
std::string GetAccountId() const { return m_accountId; }
std::string GetBucket() const { return m_bucket; }
std::string GetPrefix() const { return m_prefix; }
bool GetEncryption() const { return m_encryption; }
bool HasFormat() const { return (m_mask & 0x00000001u) != 0; }
bool HasAccountId() const { return (m_mask & 0x00000002u) != 0; }
bool HasBucket() const { return (m_mask & 0x00000004u) != 0; }
bool HasPrefix() const { return (m_mask & 0x00000008u) != 0; }
bool HasEncryption() const { return (m_mask & 0x00000010u) != 0; }
private:
uint64_t m_mask;
std::string m_format;
std::string m_accountId;
std::string m_bucket;
std::string m_prefix;
bool m_encryption;
};
class OptionalFields {
public:
OptionalFields()
: m_mask(0x00000000u),
m_is_size(false),
m_is_etag(false),
m_is_last_modified(false),
m_is_storage_class(false),
m_is_replication_status(false),
m_is_multipart_uploaded(false) {}
void SetIsSize(const bool size) {
m_mask = m_mask | 0x00000001u;
m_is_size = size;
}
void SetIsLastModified(const bool last_modified) {
m_mask = m_mask | 0x00000002u;
m_is_last_modified = last_modified;
}
void SetIsStorageClass(const bool storage_class) {
m_mask = m_mask | 0x00000004u;
m_is_storage_class = storage_class;
}
void SetIsMultipartUploaded(const bool ismultipart_uploaded) {
m_mask = m_mask | 0x00000008u;
m_is_multipart_uploaded = ismultipart_uploaded;
}
void SetIsReplicationStatus(const bool replication_status) {
m_mask = m_mask | 0x000000010u;
m_is_replication_status = replication_status;
}
void SetIsEtag(const bool is_etag) {
m_mask = m_mask | 0x000000020u;
m_is_etag = is_etag;
}
uint64_t GetMask() const { return m_mask; }
bool GetIsSize() const { return m_is_size; }
bool GetIsLastModified() const { return m_is_last_modified; }
bool GetIsStorageClass() const { return m_is_storage_class; }
bool GetIsReplicationStatus() const { return m_is_replication_status; }
bool GetIsMultipartUploaded() const { return m_is_multipart_uploaded; }
bool GetIsETag() const { return m_is_etag; }
bool HasIsSize() const { return (m_mask & 0x00000001u) != 0; }
bool HasIsLastModified() const { return (m_mask & 0x00000002u) != 0; }
bool HasIsStorageClass() const { return (m_mask & 0x00000004u) != 0; }
bool HasIsReplicationStatus() const { return (m_mask & 0x00000008u) != 0; }
bool HasIsMultipartUploaded() const { return (m_mask & 0x00000010u) != 0; }
bool HasIsETag() const { return (m_mask & 0x00000020u) != 0; }
private:
uint64_t m_mask;
bool m_is_size;
bool m_is_etag;
bool m_is_last_modified;
bool m_is_storage_class;
bool m_is_replication_status;
bool m_is_multipart_uploaded;
};
class Inventory {
public:
Inventory()
: m_mask(0x00000000u),
m_id(""),
m_included_objectversions(""),
m_filter(""),
m_frequency(""),
m_is_enabled(true) {}
Inventory& operator=(const Inventory& obj) {
if (this == &obj) {
return *this;
} else {
m_mask = obj.GetMask();
m_id = obj.GetId();
m_included_objectversions = obj.GetIncludedObjectVersions();
m_filter = obj.GetFilter();
m_is_enabled = obj.GetIsEnable();
m_destination = obj.GetCOSBucketDestination();
m_fields = obj.GetOptionalFields();
m_frequency = obj.GetFrequency();
return *this;
}
}
void SetId(const std::string& id) {
m_mask = m_mask | 0x00000001u;
m_id = id;
}
void SetIsEnable(bool is_enabled) {
m_mask = m_mask | 0x00000002u;
m_is_enabled = is_enabled;
}
void SetIncludedObjectVersions(const std::string& included_objectversions) {
m_mask = m_mask | 0x00000004u;
m_included_objectversions = included_objectversions;
}
void SetFilter(const std::string& filter) {
m_mask = m_mask | 0x00000008u;
m_filter = filter;
}
void SetCOSBucketDestination(const COSBucketDestination& destination) {
m_mask = m_mask | 0x00000010u;
m_destination = destination;
}
void SetOptionalFields(const OptionalFields& fields) {
m_mask = m_mask | 0x00000020u;
m_fields = fields;
}
void SetFrequency(const std::string& frequency) {
if (frequency == "Daily" || frequency == "Weekly") {
m_mask = m_mask | 0x00000040u;
m_frequency = frequency;
} else {
m_frequency = "";
}
}
uint64_t GetMask() const { return m_mask; }
std::string GetId() const { return m_id; }
bool GetIsEnable() const { return m_is_enabled; }
std::string GetIncludedObjectVersions() const {
return m_included_objectversions;
}
std::string GetFilter() const { return m_filter; }
const COSBucketDestination& GetCOSBucketDestination() const {
return m_destination;
}
const OptionalFields& GetOptionalFields() const { return m_fields; }
std::string GetFrequency() const { return m_frequency; }
bool HasId() const { return (m_mask & 0x00000001u) != 0; }
bool HasIsEnable() const { return (m_mask & 0x00000002u) != 0; }
bool HasIncludedObjectVersions() const { return (m_mask & 0x00000004u) != 0; }
bool HasFilter() const { return (m_mask & 0x00000008u) != 0; }
bool HasCOSBucketDestination() const { return (m_mask & 0x000000010u) != 0; }
bool HasOptionalFields() const { return (m_mask & 0x00000020u) != 0; }
bool HasFrequency() const { return (m_mask & 0x00000040u) != 0; }
private:
uint64_t m_mask;
std::string m_id;
std::string m_included_objectversions;
std::string m_filter;
std::string m_frequency;
bool m_is_enabled;
COSBucketDestination m_destination;
OptionalFields m_fields;
};
struct SelectMessage {
std::string m_event_type;
std::string m_content_type;
// bool m_has_payload;
std::string payload;
// uint32_t m_payload_offset; // offset in body
// uint32_t m_payload_len; // length
};
class LiveChannelConfiguration {
public:
LiveChannelConfiguration() {}
LiveChannelConfiguration(const std::string& desc,
const std::string& switch_info,
const std::string& type, int frag_duartion,
int frag_count, const std::string& playlist_name)
: m_desc(desc),
m_switch(switch_info),
m_type(type),
m_frag_duartion(frag_duartion),
m_frag_count(frag_count),
m_playlist_name(playlist_name) {}
~LiveChannelConfiguration() {}
void SetDescription(const std::string& desc) { m_desc = desc; }
std::string GetDescription() const { return m_desc; }
/// brief: "Enabled" or "Disabled"
void SetSwitch(const std::string& switch_info) { m_switch = switch_info; }
std::string GetSwitch() const { return m_switch; }
/// brief: only support "HLS" for now
void SetType(const std::string& type) { m_type = type; }
std::string GetType() const { return m_type; }
void SetFragDuration(const int frag_duartion) {
m_frag_duartion = frag_duartion;
}
int GetFragDuration() const { return m_frag_duartion; }
void SetFragCount(const int frag_count) { m_frag_count = frag_count; }
int GetFragCount() const { return m_frag_count; }
void SetPlaylistName(const std::string& playlist_name) {
m_playlist_name = playlist_name;
}
std::string GetPlaylistName() const { return m_playlist_name; }
void SetPublishUrl(const std::string& url) { m_publish_url = url; }
std::string GetPublishUrl() const { return m_publish_url; }
void SetPlayUrl(const std::string& url) { m_play_url = url; }
std::string GetPlayUrl() const { return m_play_url; }
private:
std::string m_desc; // 通道描述信息
std::string m_switch; // "Enabled" or "Disabled"
std::string m_type; // 目前仅支持"HLS"
int m_frag_duartion; // [1, 100]
int m_frag_count; // [1, 100]
std::string m_playlist_name;
std::string m_publish_url;
std::string m_play_url;
};
/// @brief 直播通道推流历史记录
struct LiveRecord {
std::string m_start_time; // 推流开始时间
std::string m_end_time; // 推流结束时间
std::string m_remote_addr; // 客户端ip地址和端口
std::string m_request_id; // 请求ID
};
/// @brief 直播通道推流的视频信息
struct LiveChannelVideoInfo {
std::string m_width;
std::string m_heigh;
std::string m_framerate;
std::string m_bandwidth;
std::string m_codec;
};
/// @brief 直播通道推流的音频信息
struct LiveChannelAudioInfo {
std::string m_bandwidth;
std::string m_samplerate;
std::string m_codec;
};
/// @brief 直播通道推流的状态
struct LiveChannelStatus {
LiveChannelStatus() : m_has_video(false), m_has_audio(false) {}
std::string m_status; // 流当前状态
std::string m_connected_time; // 推流开始时间
std::string m_remote_addr; // 客户端ip地址和端口
std::string m_request_id; // 请求ID
bool m_has_video;
LiveChannelVideoInfo m_video;
bool m_has_audio;
LiveChannelAudioInfo m_audio;
};
/// @brief 列举得到的通道信息
struct LiveChannel {
std::string m_name; // 通道名
std::string m_last_modified; // 上次修改时间
};
/// @brief 列举通道结果
struct ListLiveChannelResult {
std::string
m_max_keys; // 单次响应返回结果的最大条目数量,对应请求中的 max-keys 参数
std::string m_marker; // 起始通道标记,从该标记之后(不含)按照 UTF-8
// 字典序返回通道对应请求中的marker参数
std::string m_prefix; // 通道名匹配前缀,限定响应中只包含指定前缀的通道名
std::string m_is_truncated; // 响应条目是否被截断,布尔值,例如 true 或 false
std::string
m_next_marker; // 仅当响应条目有截断IsTruncated 为
// true才会返回该节点
// 该节点的值为当前响应条目中的最后一个通道名,当需要继续请求后续条目时,
// 将该节点的值作为下一次请求的 marker 参数传入
std::vector<LiveChannel> m_channels;
void Clear() {
m_max_keys = "";
m_marker = "";
m_prefix = "";
m_is_truncated = "";
m_next_marker = "";
m_channels.clear();
}
};
} // namespace qcloud_cos
#endif // COS_CPP_SDK_V5_INCLUDE_COS_DEFINES_H_