Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
## Release Note

### 2025.6.23 Version 2.6.16
- 支持 请求指定请求头域

### 2025.4.19 Version 2.6.15
- 支持 请求时携带客户端证书
- 修复 默认流控实现中返回时间单位错误问题
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.1)

project(ve-tos-cpp-sdk
VERSION 2.6.15
VERSION 2.6.16
LANGUAGES CXX)

# project settings
Expand Down
2 changes: 1 addition & 1 deletion example/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.1)
project(ve-tos-cpp-sdk-example
VERSION 2.6.15
VERSION 2.6.16
LANGUAGES CXX)

add_executable(${PROJECT_NAME} example.cc)
Expand Down
2 changes: 1 addition & 1 deletion sdk/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.1)
project(ve-tos-cpp-sdk-lib
VERSION 2.6.15
VERSION 2.6.16
LANGUAGES CXX)
set(SDK_HEADER
include/auth/Credential.h
Expand Down
8 changes: 8 additions & 0 deletions sdk/include/RequestBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,13 @@ class RequestBuilder {
requestDate_ = requestDate;
}

const std::map<std::string, std::string>& getRequestHeader() const {
return requestHeader_;
}
void setRequestHeader(const std::map<std::string, std::string>& requestHeader) {
requestHeader_ = requestHeader;
}

std::shared_ptr<TosRequest> Build(const std::string& method);
std::shared_ptr<TosRequest> BuildControlRequest(const std::string& method);
std::shared_ptr<TosRequest> Build(const std::string& method, std::shared_ptr<std::iostream> content);
Expand Down Expand Up @@ -142,5 +149,6 @@ class RequestBuilder {
bool isCustomDomain_ = false;

std::time_t requestDate_ = 0;
std::map<std::string, std::string> requestHeader_ = {};
};
} // namespace VolcengineTos
2 changes: 1 addition & 1 deletion sdk/include/TosClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
#include "model/object/ModifyObjectInput.h"
#include "model/object/ModifyObjectOutput.h"
namespace VolcengineTos {
static const char* TOS_SDK_VERSION = "v2.6.15";
static const char* TOS_SDK_VERSION = "v2.6.16";
#ifdef WIN32
static const char* PLATFORM_NAME = "windows";
#elif __linux__
Expand Down
12 changes: 11 additions & 1 deletion sdk/include/model/GenericInput.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once
#include <ctime>
#include <map>
namespace VolcengineTos {

class GenericInput {
Expand All @@ -16,7 +17,16 @@ class GenericInput {
std::time_t getRequestDate() const {
return requestDate_;
}

const std::map<std::string, std::string>& getRequestHeader() const {
return requestHeader_;
}
void setRequestHeader(const std::map<std::string, std::string>& requestHeader) {
requestHeader_ = requestHeader;
}

private:
std::time_t requestDate_ = 0;
std::map<std::string, std::string> requestHeader_ = {};
};
} // namespace VolcengineTos
} // namespace VolcengineTos
34 changes: 34 additions & 0 deletions sdk/src/RequestBuilder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,37 @@
#include "auth/SignV4.h"
using namespace VolcengineTos;

// 合并 GenericInput RequestHeader 和请求中的 header
void mergeRequestHeaderAndHeader(const std::map<std::string, std::string> &reqHeader, std::map<std::string, std::string> &header) {
if (reqHeader.empty())
return;

std::map<std::string, std::string> lower_header;
for (const auto& pair : header) {
lower_header[StringUtils::toLower(pair.first)] = pair.second;
}

auto iter = reqHeader.begin();
for (; iter != reqHeader.end(); iter++) {
if (iter->first.empty()) {
continue;
}

std::string key(iter->first);
std::string kk = StringUtils::toLower(key);

if (kk == "content-length" || kk == "host" || kk == "x-tos-date" ||
kk == "range" || kk == "transfer-encoding" || kk == "authorization" ||
kk == "date") {
continue;
}

if (lower_header.find(kk) == lower_header.end()) {
header.insert({iter->first, iter->second}); // 如果不存在,插入键值对
}
}
}

std::shared_ptr<TosRequest> RequestBuilder::build(const std::string& method) {
std::string host, path;
if (isCustomDomain_){
Expand All @@ -20,13 +51,15 @@ std::shared_ptr<TosRequest> RequestBuilder::build(const std::string& method) {
}
}

mergeRequestHeaderAndHeader(requestHeader_, headers_);
auto req = std::make_shared<TosRequest>(scheme_, method, host, path, headers_, query_);
req->setRequestDate(requestDate_);
return req;
}

std::shared_ptr<TosRequest> RequestBuilder::buildControlRequest(const std::string& method) {
std::string host = accountID_ + "." + controlHost_;
mergeRequestHeaderAndHeader(requestHeader_, headers_);
auto req = std::make_shared<TosRequest>(scheme_, method, host, "/qospolicy", headers_, query_);
req->setRequestDate(requestDate_);
return req;
Expand All @@ -46,6 +79,7 @@ std::shared_ptr<TosRequest> RequestBuilder::buildSignedURL(const std::string& me
path += object_;
}

mergeRequestHeaderAndHeader(requestHeader_, headers_);
auto req = std::make_shared<TosRequest>(scheme_, method, host, path, headers_, query_);
req->setRequestDate(requestDate_);
return req;
Expand Down
4 changes: 4 additions & 0 deletions sdk/src/TosClientImpl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7863,6 +7863,7 @@ RequestBuilder TosClientImpl::newBuilder(const std::string& accountID, const Gen
config_.isCustomDomain());
rb.withHeader(http::HEADER_USER_AGENT, userAgent_);
rb.setRequestDate(genericInput.getRequestDate());
rb.setRequestHeader(genericInput.getRequestHeader());
return rb;
}

Expand All @@ -7873,6 +7874,7 @@ RequestBuilder TosClientImpl::newBuilder(const std::string& bucket, const std::s
urlMode_, headers, queries,config_.isCustomDomain());
rb.withHeader(http::HEADER_USER_AGENT, userAgent_);
rb.setRequestDate(genericInput.getRequestDate());
rb.setRequestHeader(genericInput.getRequestHeader());
return rb;
}

Expand All @@ -7889,6 +7891,7 @@ RequestBuilder TosClientImpl::newBuilder(const std::string& bucket, const std::s
queries, config_.isCustomDomain());
rb.withHeader(http::HEADER_USER_AGENT, userAgent_);
rb.setRequestDate(genericInput.getRequestDate());
rb.setRequestHeader(genericInput.getRequestHeader());
return rb;
}
RequestBuilder TosClientImpl::newBuilder(const std::string& bucket, const std::string& object,
Expand All @@ -7910,6 +7913,7 @@ RequestBuilder TosClientImpl::newBuilder(const std::string& bucket, const std::s
rb.setAutoRecognizeContentType(builder.isAutoRecognizeContentType());
rb.setRange(builder.getRange());
rb.setRequestDate(genericInput.getRequestDate());
rb.setRequestHeader(genericInput.getRequestHeader());
return rb;
}

Expand Down
2 changes: 1 addition & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.1)
project(ve-tos-cpp-sdk-test
VERSION 2.6.15
VERSION 2.6.16
LANGUAGES CXX)

include(FetchContent)
Expand Down
2 changes: 1 addition & 1 deletion test/src/Object/ObjectPutGetTest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ObjectPutGetTest : public ::testing::Test {
conf.maxRetryCount = 0;
conf.userAgentProductName = "tos";
conf.userAgentSoftName="cxxSdk";
conf.userAgentSoftVersion = "2.6.15";
conf.userAgentSoftVersion = "2.6.16";
conf.userAgentCustomizedKeyValues = {{"key1", "value1"}, {"key2", "value2"}};
cliV2 = std::make_shared<TosClientV2>(TestConfig::Region, TestConfig::Ak, TestConfig::Sk, conf);
bkt_name = TestUtils::GetBucketName(TestConfig::TestPrefix);
Expand Down
2 changes: 1 addition & 1 deletion test/src/Object/ObjectRenameTest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ObjectRenameTest : public ::testing::Test {
conf.maxRetryCount = 0;
conf.userAgentProductName = "tos";
conf.userAgentSoftName="cxxSdk";
conf.userAgentSoftVersion = "2.6.15";
conf.userAgentSoftVersion = "2.6.16";
conf.userAgentCustomizedKeyValues = {{"key1", "value1"}, {"key2", "value2"}};
cliV2 = std::make_shared<TosClientV2>(TestConfig::Region, TestConfig::Ak, TestConfig::Sk, conf);
bkt_name = TestUtils::GetBucketName(TestConfig::TestPrefix);
Expand Down