aboutsummaryrefslogtreecommitdiff
path: root/backends/cloud
diff options
context:
space:
mode:
Diffstat (limited to 'backends/cloud')
-rw-r--r--backends/cloud/googledrive/googledriveuploadrequest.cpp46
1 files changed, 15 insertions, 31 deletions
diff --git a/backends/cloud/googledrive/googledriveuploadrequest.cpp b/backends/cloud/googledrive/googledriveuploadrequest.cpp
index f921f5c96d..c4728c5ac1 100644
--- a/backends/cloud/googledrive/googledriveuploadrequest.cpp
+++ b/backends/cloud/googledrive/googledriveuploadrequest.cpp
@@ -152,20 +152,10 @@ void GoogleDriveUploadRequest::startUploadCallback(Networking::JsonResponse resp
const Networking::NetworkReadStream *stream = rq->getNetworkReadStream();
if (stream) {
long code = stream->httpResponseCode();
- Common::String headers = stream->responseHeaders();
if (code == 200) {
- const char *cstr = headers.c_str();
- const char *position = strstr(cstr, "Location: ");
-
- if (position) {
- Common::String result = "";
- char c;
- for (const char *i = position + 10; c = *i, c != 0; ++i) {
- if (c == '\n' || c == '\r')
- break;
- result += c;
- }
- _uploadUrl = result;
+ Common::HashMap<Common::String, Common::String> headers = stream->responseHeadersMap();
+ if (headers.contains("location")) {
+ _uploadUrl = headers["location"];
uploadNextPart();
return;
}
@@ -230,25 +220,19 @@ bool GoogleDriveUploadRequest::handleHttp308(const Networking::NetworkReadStream
if (stream->httpResponseCode() != 308)
return false; //seriously
- Common::String headers = stream->responseHeaders();
- const char *cstr = headers.c_str();
- for (int rangeTry = 0; rangeTry < 2; ++rangeTry) {
- const char *needle = (rangeTry == 0 ? "Range: 0-" : "Range: bytes=0-");
- uint32 needleLength = (rangeTry == 0 ? 9 : 15);
-
- const char *position = strstr(cstr, needle); //if it lost the first part, I refuse to talk with it
-
- if (position) {
- Common::String result = "";
- char c;
- for (const char *i = position + needleLength; c = *i, c != 0; ++i) {
- if (c == '\n' || c == '\r')
- break;
- result += c;
+ Common::HashMap<Common::String, Common::String> headers = stream->responseHeadersMap();
+ if (headers.contains("range")) {
+ Common::String range = headers["range"];
+ for (int rangeTry = 0; rangeTry < 2; ++rangeTry) {
+ const char *needle = (rangeTry == 0 ? "0-" : "bytes=0-"); //if it lost the first part, I refuse to talk with it
+ uint32 needleLength = (rangeTry == 0 ? 2 : 8);
+
+ if (range.hasPrefix(needle)) {
+ range.erase(0, needleLength);
+ _serverReceivedBytes = range.asUint64() + 1;
+ uploadNextPart();
+ return true;
}
- _serverReceivedBytes = result.asUint64() + 1;
- uploadNextPart();
- return true;
}
}