Skip to content

Commit b08babd

Browse files
authored
Merge pull request #54 from tencentyun/dev-branch
add content-length sign
2 parents 8e8da05 + ed0bf2a commit b08babd

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

src/curl.cpp

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,31 @@ static bool make_md5_from_string(const char* pstr, string& md5)
9797
return true;
9898
}
9999

100+
struct curl_slist* curl_slist_remove(struct curl_slist* list, const char* key) {
101+
struct curl_slist* current = list;
102+
struct curl_slist* prev = NULL;
103+
104+
// 遍历链表
105+
while (current != NULL) {
106+
if (strncmp(current->data, key, strlen(key)) == 0) {
107+
// 找到匹配节点
108+
if (prev == NULL) {
109+
// 删除头节点
110+
list = current->next;
111+
} else {
112+
// 删除中间或尾部节点
113+
prev->next = current->next;
114+
}
115+
// 释放当前节点内存
116+
free(current->data);
117+
free(current);
118+
break;
119+
}
120+
prev = current;
121+
current = current->next;
122+
}
123+
return list;
124+
}
100125

101126
//-------------------------------------------------------------------
102127
// Class BodyData
@@ -2391,6 +2416,7 @@ int S3fsCurl::PutHeadRequest(const char* tpath, headers_t& meta, bool is_copy)
23912416
requestHeaders = curl_slist_sort_insert(requestHeaders, "Host", host.c_str());
23922417
requestHeaders = curl_slist_sort_insert(requestHeaders, "Date", date.c_str());
23932418
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Type", ContentType.c_str());
2419+
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", "0");
23942420

23952421
if(!S3fsCurl::IsPublicBucket()){
23962422
string Signature = CalcSignature("PUT", "", ContentType, date, resource, "");
@@ -2489,6 +2515,11 @@ int S3fsCurl::PutRequest(const char* tpath, headers_t& meta, int fd)
24892515
requestHeaders = curl_slist_sort_insert(requestHeaders, "Date", date.c_str());
24902516
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Type", ContentType.c_str());
24912517

2518+
if(file) {
2519+
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", str(st.st_size).c_str());
2520+
} else {
2521+
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", "0");
2522+
}
24922523
if(!S3fsCurl::IsPublicBucket()){
24932524
string Signature = CalcSignature("PUT", strMD5, ContentType, date, resource, "");
24942525
requestHeaders = curl_slist_sort_insert(requestHeaders, "Authorization",Signature.c_str());
@@ -2761,7 +2792,7 @@ int S3fsCurl::PreMultipartPostRequest(const char* tpath, headers_t& meta, string
27612792
requestHeaders = curl_slist_sort_insert(requestHeaders, "Host", host.c_str());
27622793
requestHeaders = curl_slist_sort_insert(requestHeaders, "Date", date.c_str());
27632794
requestHeaders = curl_slist_sort_insert(requestHeaders, "Accept", NULL);
2764-
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", NULL);
2795+
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", "0");
27652796
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Type", contype.c_str());
27662797

27672798
if(!S3fsCurl::IsPublicBucket()){
@@ -2852,6 +2883,7 @@ int S3fsCurl::CompleteMultipartPostRequest(const char* tpath, string& upload_id,
28522883
requestHeaders = curl_slist_sort_insert(requestHeaders, "Date", date.c_str());
28532884
requestHeaders = curl_slist_sort_insert(requestHeaders, "Accept", NULL);
28542885
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Type", contype.c_str());
2886+
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", str(postdata_remaining).c_str());
28552887

28562888
if(!S3fsCurl::IsPublicBucket()){
28572889
string Signature = CalcSignature("POST", "", contype, date, resource, query_string);
@@ -3046,6 +3078,7 @@ int S3fsCurl::UploadMultipartPostSetup(const char* tpath, int part_num, string&
30463078
delete[] md5base64p;
30473079
delete[] md5raw;
30483080
}
3081+
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", str(partdata.size).c_str());
30493082

30503083
if(!S3fsCurl::IsPublicBucket()){
30513084
string Signature = CalcSignature("PUT", strMD5, "", date, resource, request_uri);
@@ -3154,6 +3187,7 @@ int S3fsCurl::CopyMultipartPostRequest(const char* from, const char* to, int par
31543187
requestHeaders = curl_slist_sort_insert(requestHeaders, "Host", host.c_str());
31553188
requestHeaders = curl_slist_sort_insert(requestHeaders, "Date", date.c_str());
31563189
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Type", ContentType.c_str());
3190+
requestHeaders = curl_slist_sort_insert(requestHeaders, "Content-Length", "0");
31573191

31583192
if(!S3fsCurl::IsPublicBucket()){
31593193
string Signature = CalcSignature("PUT", "", ContentType, date, resource, urlargs);

0 commit comments

Comments
 (0)