diff OrthancServer/Sources/ServerContext.cpp @ 4640:66109d24d26e

"ETag" headers for metadata and attachments now allow strong comparison (MD5 is included)
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 26 Apr 2021 15:22:44 +0200
parents 88e892e25a51
children 3294385a245a
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerContext.cpp	Thu Apr 22 13:27:57 2021 +0200
+++ b/OrthancServer/Sources/ServerContext.cpp	Mon Apr 26 15:22:44 2021 +0200
@@ -799,7 +799,8 @@
     try
     {
       int64_t newRevision;  // ignored
-      StoreStatus status = index_.AddAttachment(newRevision, modified, resourceId, true, revision);
+      StoreStatus status = index_.AddAttachment(newRevision, modified, resourceId,
+                                                true, revision, modified.GetUncompressedMD5());
       if (status != StoreStatus_Success)
       {
         accessor.Remove(modified);
@@ -986,7 +987,7 @@
               int64_t newRevision;
               AddAttachment(newRevision, instancePublicId, FileContentType_DicomUntilPixelData,
                             dicom.empty() ? NULL: dicom.c_str(), pixelDataOffset,
-                            false /* no old revision */, -1 /* dummy revision */);
+                            false /* no old revision */, -1 /* dummy revision */, "" /* dummy MD5 */);
             }
           }
         }
@@ -1162,7 +1163,8 @@
                                     const void* data,
                                     size_t size,
                                     bool hasOldRevision,
-                                    int64_t oldRevision)
+                                    int64_t oldRevision,
+                                    const std::string& oldMD5)
   {
     LOG(INFO) << "Adding attachment " << EnumerationToString(attachmentType) << " to resource " << resourceId;
     
@@ -1172,7 +1174,8 @@
     StorageAccessor accessor(area_, GetMetricsRegistry());
     FileInfo attachment = accessor.Write(data, size, attachmentType, compression, storeMD5_);
 
-    StoreStatus status = index_.AddAttachment(newRevision, attachment, resourceId, hasOldRevision, oldRevision);
+    StoreStatus status = index_.AddAttachment(
+      newRevision, attachment, resourceId, hasOldRevision, oldRevision, oldMD5);
     if (status != StoreStatus_Success)
     {
       accessor.Remove(attachment);