int ResumableUploader::validateRecord()

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;
}