Skip to content

Commit 7ef04b6

Browse files
Merge pull request #114 from chen-honggang/dev/uri-exception
ip访问模式支持按实例级别单独配置
2 parents eaf0941 + d6d7d3e commit 7ef04b6

File tree

6 files changed

+36
-4
lines changed

6 files changed

+36
-4
lines changed

include/cos_config.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class CosConfig {
2525
m_secret_key(""),
2626
m_region(""),
2727
m_tmp_token(""),
28+
m_set_intranet_once(false),
2829
m_is_use_intranet(false),
2930
m_intranet_addr(""),
3031
m_config_parsed(false) {}
@@ -42,6 +43,7 @@ class CosConfig {
4243
m_secret_key(secret_key),
4344
m_region(region),
4445
m_tmp_token(""),
46+
m_set_intranet_once(false),
4547
m_is_use_intranet(false),
4648
m_intranet_addr(""),
4749
m_config_parsed(false) {}
@@ -60,6 +62,7 @@ class CosConfig {
6062
m_secret_key(secret_key),
6163
m_region(region),
6264
m_tmp_token(tmp_token),
65+
m_set_intranet_once(false),
6366
m_is_use_intranet(false),
6467
m_intranet_addr(""),
6568
m_config_parsed(false) {}
@@ -73,6 +76,7 @@ class CosConfig {
7376
m_secret_key = config.m_secret_key;
7477
m_region = config.m_region;
7578
m_tmp_token = config.m_tmp_token;
79+
m_set_intranet_once = config.m_set_intranet_once;
7680
m_is_use_intranet = config.m_is_use_intranet;
7781
m_intranet_addr = config.m_intranet_addr;
7882
m_config_parsed = config.m_config_parsed;
@@ -87,6 +91,7 @@ class CosConfig {
8791
m_secret_key = config.m_secret_key;
8892
m_region = config.m_region;
8993
m_tmp_token = config.m_tmp_token;
94+
m_set_intranet_once = config.m_set_intranet_once;
9095
m_is_use_intranet = config.m_is_use_intranet;
9196
m_intranet_addr = config.m_intranet_addr;
9297
m_config_parsed = config.m_config_parsed;
@@ -159,6 +164,8 @@ class CosConfig {
159164

160165
std::string GetIntranetAddr();
161166

167+
bool GetSetIntranetOnce() const {return m_set_intranet_once;}
168+
162169
/// \brief 设置日志回调
163170
void SetLogCallback(const LogCallback log_callback);
164171

@@ -179,6 +186,7 @@ class CosConfig {
179186
std::string m_region;
180187
std::string m_tmp_token;
181188

189+
bool m_set_intranet_once;
182190
bool m_is_use_intranet;
183191
std::string m_intranet_addr;
184192
bool m_config_parsed;

include/cos_defines.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
namespace qcloud_cos {
1313

14-
#define COS_CPP_SDK_VERSON "v5.5.6"
14+
#define COS_CPP_SDK_VERSON "v5.5.7"
1515

1616
/// 路径分隔符
1717
const std::string kPathDelimiter = "/";

src/cos_config.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ CosConfig::CosConfig(const std::string& config_file)
1515
m_secret_key(""),
1616
m_region(""),
1717
m_tmp_token(""),
18+
m_set_intranet_once(false),
1819
m_is_use_intranet(false),
1920
m_intranet_addr(""),
2021
m_config_parsed(false) {
@@ -191,11 +192,13 @@ bool CosConfig::InitConf(const std::string& config_file) {
191192
if (JsonObjectGetBoolValue(object, "IsUseIntranet", &bool_value)) {
192193
CosSysConfig::SetIsUseIntranet(bool_value);
193194
m_is_use_intranet = bool_value;
195+
m_set_intranet_once = true;
194196
}
195197

196198
if (JsonObjectGetStringValue(object, "IntranetAddr", &str_value)) {
197199
CosSysConfig::SetIntranetAddr(str_value);
198200
m_intranet_addr = str_value;
201+
m_set_intranet_once = true;
199202
}
200203

201204
CosSysConfig::PrintValue();
@@ -236,6 +239,8 @@ void CosConfig::SetConfigCredentail(const std::string& access_key,
236239
void CosConfig::SetIsUseIntranetAddr(bool is_use_intranet) {
237240
CosSysConfig::SetIsUseIntranet(is_use_intranet);
238241
m_is_use_intranet = is_use_intranet;
242+
243+
m_set_intranet_once = true;
239244
}
240245

241246
bool CosConfig::IsUseIntranet() {
@@ -245,6 +250,8 @@ bool CosConfig::IsUseIntranet() {
245250
void CosConfig::SetIntranetAddr(const std::string& intranet_addr) {
246251
CosSysConfig::SetIntranetAddr(intranet_addr);
247252
m_intranet_addr = intranet_addr;
253+
254+
m_set_intranet_once = true;
248255
}
249256

250257
std::string CosConfig::GetIntranetAddr() {

src/cos_sys_config.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ unsigned CosSysConfig::m_dns_cache_expire_seconds = 600;
5757
// dns cache大小
5858
unsigned CosSysConfig::m_dns_cache_size = 1000;
5959

60+
std::mutex m_intranet_addr_lock;
61+
6062
void CosSysConfig::PrintValue() {
6163
std::cout << "upload_part_size:" << m_upload_part_size << std::endl;
6264
std::cout << "upload_copy_part_size:" << m_upload_copy_part_size << std::endl;
@@ -213,6 +215,7 @@ void CosSysConfig::SetIsUseIntranet(bool is_use_intranet) {
213215
bool CosSysConfig::IsUseIntranet() { return m_is_use_intranet; }
214216

215217
void CosSysConfig::SetIntranetAddr(const std::string& intranet_addr) {
218+
std::lock_guard<std::mutex> lock(m_intranet_addr_lock);
216219
m_intranet_addr = intranet_addr;
217220
}
218221

@@ -248,7 +251,10 @@ std::string CosSysConfig::GetCIHost(const std::string& bucket_name,
248251

249252
std::string CosSysConfig::GetDestDomain() { return m_dest_domain; }
250253

251-
std::string CosSysConfig::GetIntranetAddr() { return m_intranet_addr; }
254+
std::string CosSysConfig::GetIntranetAddr() {
255+
std::lock_guard<std::mutex> lock(m_intranet_addr_lock);
256+
return m_intranet_addr;
257+
}
252258

253259
LogCallback CosSysConfig::GetLogCallback() { return m_log_callback; }
254260

src/op/base_op.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,13 @@ std::string BaseOp::GetRealUrl(const std::string& host, const std::string& path,
305305
dest_path = "/" + dest_path;
306306
}
307307

308-
if (m_config->IsUseIntranet() &&
308+
if (m_config->GetSetIntranetOnce() &&
309+
m_config->IsUseIntranet() &&
309310
!m_config->GetIntranetAddr().empty()) {
310311
dest_host = m_config->GetIntranetAddr();
312+
} else if (CosSysConfig::IsUseIntranet() &&
313+
!CosSysConfig::GetIntranetAddr().empty()) {
314+
dest_host = CosSysConfig::GetIntranetAddr();
311315
} else if (!CosSysConfig::GetDestDomain().empty()) {
312316
dest_host = CosSysConfig::GetDestDomain();
313317
} else if (CosSysConfig::GetUseDnsCache()) {

src/op/object_op.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1649,8 +1649,15 @@ void ObjectOp::FillCopyTask(const std::string& upload_id,
16491649

16501650
std::string ObjectOp::GeneratePresignedUrl(const GeneratePresignedUrlReq& req) {
16511651
std::string auth_str = "";
1652-
std::string host = CosSysConfig::GetHost(GetAppId(), m_config->GetRegion(),
1652+
1653+
std::string host;
1654+
if (!CosSysConfig::GetDestDomain().empty()) {
1655+
host = CosSysConfig::GetDestDomain();
1656+
} else {
1657+
host = CosSysConfig::GetHost(GetAppId(), m_config->GetRegion(),
16531658
req.GetBucketName());
1659+
}
1660+
16541661
std::map<std::string, std::string> headers;
16551662
if (req.SignHeaderHost()) {
16561663
headers["Host"] = host;

0 commit comments

Comments
 (0)