in sdk/src/resumable/ResumableUploader.cc [442:478]
int ResumableUploader::validateRecord()
{
auto record = record_;
if (record.size != fileSize_ || record.mtime != request_.FileMtime()){
return ARG_ERROR_UPLOAD_FILE_MODIFIED;
}
Json::Value root;
root["opType"] = record.opType;
root["driveID"] = record.driveID;
root["fileID"] = record.fileID;
root["uploadID"] = record.uploadID;
root["name"] = record.name;
root["filePath"] = record.filePath;
root["taskID"] = record.taskID;
root["mtime"] = record.mtime;
root["size"] = record.size;
root["partSize"] = record.partSize;
root["parts"].resize(0);
int index = 0;
for (UploadPartRecord& part : record.parts) {
root["parts"][index]["partNumber"] = part.partNumber;
root["parts"][index]["size"] = part.size;
root["parts"][index]["crc64"] = part.crc64;
index++;
}
std::stringstream recordStream;
recordStream << root;
std::string md5Sum = ComputeContentETag(recordStream);
if (md5Sum != record.md5Sum){
return ARG_ERROR_UPLOAD_RECORD_INVALID;
}
return 0;
}