changeset 5432:59e3b6f8c5be

migration to UCLouvain servers
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 21 Nov 2023 18:16:31 +0100
parents 4be5f117aa0d
children 38403e13c1ca
files LinuxCompilation.txt OrthancFramework/Resources/CMake/BoostConfiguration.cmake OrthancFramework/Resources/CMake/OpenSslConfigurationStatic-1.1.1.cmake OrthancFramework/Resources/CMake/OpenSslConfigurationStatic-3.0.cmake OrthancFramework/Resources/Graveyard/FromDcmtkBridge.cpp OrthancFramework/Sources/DicomFormat/DicomImageInformation.cpp OrthancFramework/Sources/DicomNetworking/DicomControlUserConnection.cpp OrthancFramework/Sources/DicomNetworking/Internals/CommandDispatcher.cpp OrthancFramework/Sources/DicomNetworking/Internals/MoveScp.cpp OrthancFramework/Sources/DicomParsing/DicomModification.cpp OrthancFramework/Sources/DicomParsing/DicomWebJsonVisitor.cpp OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.cpp OrthancFramework/Sources/DicomParsing/ParsedDicomFile.cpp OrthancFramework/Sources/Endianness.h OrthancFramework/Sources/HttpServer/HttpOutput.cpp OrthancFramework/Sources/HttpServer/MultipartStreamReader.cpp OrthancFramework/Sources/Images/PamReader.cpp OrthancFramework/Sources/Images/PamWriter.cpp OrthancFramework/Sources/SystemToolbox.cpp OrthancFramework/UnitTestsSources/RestApiTests.cpp OrthancServer/Plugins/Engine/OrthancPlugins.cpp OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h OrthancServer/Plugins/Samples/ModalityWorklists/README OrthancServer/Plugins/Samples/ServeFolders/README OrthancServer/Resources/Configuration.json OrthancServer/Resources/Samples/Python/DicomizeImage.py OrthancServer/Resources/Samples/README.txt OrthancServer/Sources/OrthancFindRequestHandler.cpp OrthancServer/Sources/OrthancInitialization.cpp OrthancServer/Sources/OrthancMoveRequestHandler.cpp OrthancServer/Sources/OrthancRestApi/OrthancRestAnonymizeModify.cpp OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp OrthancServer/Sources/OrthancRestApi/OrthancRestChanges.cpp OrthancServer/Sources/OrthancRestApi/OrthancRestModalities.cpp OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp OrthancServer/Sources/OrthancRestApi/OrthancRestSystem.cpp OrthancServer/Sources/Search/ISqlLookupFormatter.h OrthancServer/Sources/main.cpp README TODO
diffstat 40 files changed, 106 insertions(+), 106 deletions(-) [+]
line wrap: on
line diff
--- a/LinuxCompilation.txt	Tue Nov 21 10:32:42 2023 +0100
+++ b/LinuxCompilation.txt	Tue Nov 21 18:16:31 2023 +0100
@@ -235,7 +235,7 @@
 
 You can find build instructions for Orthanc up to 0.7.0 on the
 following Wiki page:
-https://book.orthanc-server.com/faq/compiling-old.html
+https://orthanc.uclouvain.be/book/faq/compiling-old.html
 
 These instructions will not work as such beyond Orthanc 0.7.0, but
 they might give indications.
--- a/OrthancFramework/Resources/CMake/BoostConfiguration.cmake	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Resources/CMake/BoostConfiguration.cmake	Tue Nov 21 18:16:31 2023 +0100
@@ -54,7 +54,7 @@
   
   # Patch by xnox to fix issue #166 (CMake find_boost version is now
   # broken with newer boost/cmake)
-  # https://bugs.orthanc-server.com/show_bug.cgi?id=166
+  # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=166
   if (POLICY CMP0093)
     set(BOOST144 1.44)
   else()
--- a/OrthancFramework/Resources/CMake/OpenSslConfigurationStatic-1.1.1.cmake	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Resources/CMake/OpenSslConfigurationStatic-1.1.1.cmake	Tue Nov 21 18:16:31 2023 +0100
@@ -288,7 +288,7 @@
     # crashes with segmentation fault in function
     # "build_SYS_str_reasons()", that is called from
     # "OPENSSL_init_ssl()"
-    # https://bugs.orthanc-server.com/show_bug.cgi?id=193
+    # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=193
     -DOPENSSL_NO_ERR
     )
 
--- a/OrthancFramework/Resources/CMake/OpenSslConfigurationStatic-3.0.cmake	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Resources/CMake/OpenSslConfigurationStatic-3.0.cmake	Tue Nov 21 18:16:31 2023 +0100
@@ -393,7 +393,7 @@
     # crashes with segmentation fault in function
     # "build_SYS_str_reasons()", that is called from
     # "OPENSSL_init_ssl()"
-    # https://bugs.orthanc-server.com/show_bug.cgi?id=193
+    # https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=193
     -DOPENSSL_NO_ERR
     )
 
--- a/OrthancFramework/Resources/Graveyard/FromDcmtkBridge.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Resources/Graveyard/FromDcmtkBridge.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -29,7 +29,7 @@
     {
       // This raises BitBucket issue 140 (Modifying private tags with
       // REST API changes VR from LO to UN)
-      // https://bugs.orthanc-server.com/show_bug.cgi?id=140
+      // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=140
       LOG(WARNING) << "You are using DCMTK < 3.6.1: All the private tags "
         "are considered as having a binary value representation";
       return new DcmOtherByteOtherWord(key);
--- a/OrthancFramework/Sources/DicomFormat/DicomImageInformation.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomFormat/DicomImageInformation.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -436,7 +436,7 @@
   {
     /**
      * This approach is validated in "Tests/GuessPixelDataVR.py":
-     * https://hg.orthanc-server.com/orthanc-tests/file/tip/Tests/GuessPixelDataVR.py
+     * https://orthanc.uclouvain.be/hg/orthanc-tests/file/default/Tests/GuessPixelDataVR.py
      **/
 
     if (transferSyntax == DicomTransferSyntax_LittleEndianExplicit ||
--- a/OrthancFramework/Sources/DicomNetworking/DicomControlUserConnection.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomNetworking/DicomControlUserConnection.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -189,7 +189,7 @@
     // same fix is required for Agfa Impax. This was generalized for
     // generic manufacturer since it seems to affect PhilipsADW,
     // GEWAServer as well:
-    // https://bugs.orthanc-server.com/show_bug.cgi?id=31
+    // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=31
 
     switch (manufacturer)
     {
--- a/OrthancFramework/Sources/DicomNetworking/Internals/CommandDispatcher.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomNetworking/Internals/CommandDispatcher.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -481,7 +481,7 @@
 #if DCMTK_VERSION_NUMBER >= 362
           // The global variable "numberOfDcmAllStorageSOPClassUIDs" is
           // only published if DCMTK >= 3.6.2:
-          // https://bugs.orthanc-server.com/show_bug.cgi?id=137
+          // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=137
           assert(static_cast<int>(count) == numberOfDcmAllStorageSOPClassUIDs);
 #endif
       
--- a/OrthancFramework/Sources/DicomNetworking/Internals/MoveScp.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomNetworking/Internals/MoveScp.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -86,7 +86,7 @@
 /**
  * Macro specifying whether to apply the patch suggested in issue 66:
  * "Orthanc responses C-MOVE with zero Move Originator Message ID"
- * https://bugs.orthanc-server.com/show_bug.cgi?id=66
+ * https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=66
  **/
 
 #define APPLY_FIX_ISSUE_66   1
--- a/OrthancFramework/Sources/DicomParsing/DicomModification.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomParsing/DicomModification.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -317,7 +317,7 @@
                * data sets including:
                * https://wiki.cancerimagingarchive.net/display/Public/Lung+CT+Segmentation+Challenge+2017)
                * Tested in "test_anonymize_relationships_5". Introduced
-               * in: https://hg.orthanc-server.com/orthanc/rev/3513
+               * in: https://orthanc.uclouvain.be/hg/orthanc/rev/3513
                **/
               newValue = that_.MapDicomIdentifier(value, ResourceType_Study);
             }
@@ -724,7 +724,7 @@
      * Values below come from the hardcoded UID of Orthanc 1.9.3
      * in DicomModification::RelationshipsVisitor::VisitString() and
      * DicomModification::RelationshipsVisitor::RemoveRelationships()
-     * https://hg.orthanc-server.com/orthanc/file/Orthanc-1.9.3/OrthancFramework/Sources/DicomParsing/DicomModification.cpp#l117
+     * https://orthanc.uclouvain.be/hg/orthanc/file/Orthanc-1.9.3/OrthancFramework/Sources/DicomParsing/DicomModification.cpp#l117
      **/
     uids_.clear();
 
@@ -1620,7 +1620,7 @@
        * 1.5.0 and 1.6.1. This compatibility was broken between 1.7.0
        * and 1.9.3: Indeed, an exception was thrown in "ReadBoolean()"
        * if "KEEP_SOP_INSTANCE_UID" was absent, because of changeset:
-       * https://hg.orthanc-server.com/orthanc/rev/3860
+       * https://orthanc.uclouvain.be/hg/orthanc/rev/3860
        **/
       keepSopInstanceUid_ = false;
     }
--- a/OrthancFramework/Sources/DicomParsing/DicomWebJsonVisitor.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomParsing/DicomWebJsonVisitor.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -436,7 +436,7 @@
         /**
          * The test on "size > 0" is new in Orthanc 1.9.3, and fixes
          * issue #195 (No need for BulkDataURI when Data Element is
-         * empty): https://bugs.orthanc-server.com/show_bug.cgi?id=195
+         * empty): https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=195
          **/
         if (size > 0 ||
             tag == DICOM_TAG_PIXEL_DATA ||
--- a/OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -1829,7 +1829,7 @@
     {
       // This solves issue 140 (Modifying private tags with REST API
       // changes VR from LO to UN)
-      // https://bugs.orthanc-server.com/show_bug.cgi?id=140
+      // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=140
       LOG(WARNING) << "Private creator should not be empty while creating a private tag: " << tag.Format();
     }
     
@@ -2591,7 +2591,7 @@
     {
       // So far we assume that it's alway US (as a best guess: https://forum.dcmtk.org/viewtopic.php?t=932)
       // However, e.g. in a LUTDescriptor (3 values), the middle value can be a SS depending on other tag values while first and third value are always US.
-      // This patch, although not perfect fixes  https://bugs.orthanc-server.com/show_bug.cgi?id=214.
+      // This patch, although not perfect fixes  https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=214.
       // It might need some rework once we encounter a LUTDescriptor with a SS value. ref: https://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.11.2.html#sect_C.11.2.1.1
       evr = EVR_US;  
     }
--- a/OrthancFramework/Sources/DicomParsing/ParsedDicomFile.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/DicomParsing/ParsedDicomFile.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -921,7 +921,7 @@
        * equals the empty string, then proceed. In Orthanc <= 1.5.6,
        * an exception "Bad file format" was generated.
        * https://groups.google.com/d/msg/orthanc-users/aphG_h1AHVg/rfOTtTPTAgAJ
-       * https://hg.orthanc-server.com/orthanc/rev/4c45e018bd3de3cfa21d6efc6734673aaaee4435
+       * https://orthanc.uclouvain.be/hg/orthanc/rev/4c45e018bd3de3cfa21d6efc6734673aaaee4435
        **/
       patientId.clear();
     }        
--- a/OrthancFramework/Sources/Endianness.h	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/Endianness.h	Tue Nov 21 18:16:31 2023 +0100
@@ -144,7 +144,7 @@
    * This alternative implementation only hid an underlying problem
    * with pointer alignment on some architectures, and was thus
    * reverted. Check out issue #99:
-   * https://bugs.orthanc-server.com/show_bug.cgi?id=99
+   * https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=99
    **/
   return (a << 8) | (a >> 8);
 }
--- a/OrthancFramework/Sources/HttpServer/HttpOutput.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/HttpServer/HttpOutput.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -555,7 +555,7 @@
      * Full history is available at the following locations:
      * - In changeset 2248:69b0f4e8a49b:
      *   # hg history -v -r 2248
-     * - https://bugs.orthanc-server.com/show_bug.cgi?id=54
+     * - https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=54
      * - https://groups.google.com/d/msg/orthanc-users/65zhIM5xbKI/TU5Q1_LhAwAJ
      **/
     std::string tmp;
@@ -577,7 +577,7 @@
      * within the encapsulations, and must be no longer than 70
      * characters, not counting the two leading hyphens."
      * https://tools.ietf.org/html/rfc1521
-     * https://bugs.orthanc-server.com/show_bug.cgi?id=165
+     * https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=165
      **/
     if (boundary.size() != 36 + 1 + 36)  // one UUID contains 36 characters
     {
--- a/OrthancFramework/Sources/HttpServer/MultipartStreamReader.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/HttpServer/MultipartStreamReader.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -384,7 +384,7 @@
         {
           boundary = Toolbox::StripSpaces(items[1]);
 
-          // https://bugs.orthanc-server.com/show_bug.cgi?id=190
+          // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=190
           RemoveSurroundingQuotes(boundary);
           
           valid = !boundary.empty();
@@ -394,7 +394,7 @@
           subType = Toolbox::StripSpaces(items[1]);
           Toolbox::ToLowerCase(subType);
 
-          // https://bugs.orthanc-server.com/show_bug.cgi?id=54
+          // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=54
           // https://tools.ietf.org/html/rfc7231#section-3.1.1.1
           RemoveSurroundingQuotes(subType);
         }
--- a/OrthancFramework/Sources/Images/PamReader.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/Images/PamReader.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -242,7 +242,7 @@
            * in Orthanc <= 1.8.0 (i.e. make a "memcpy()" to a local
            * uint16_t variable) doesn't seem work for WebAssembly. We
            * thus use a plain old C implementation. Check out issue
-           * #99: https://bugs.orthanc-server.com/show_bug.cgi?id=99
+           * #99: https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=99
            *
            * Here is the crash log on WebAssembly (2019-08-05):
            * 
--- a/OrthancFramework/Sources/Images/PamWriter.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/Images/PamWriter.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -130,7 +130,7 @@
            * in Orthanc <= 1.8.0 (i.e. make a "memcpy()" to a local
            * uint16_t variable) doesn't seem work for WebAssembly. We
            * thus use a plain old C implementation. Check out issue
-           * #99: https://bugs.orthanc-server.com/show_bug.cgi?id=99
+           * #99: https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=99
            **/
           const uint8_t* a = reinterpret_cast<const uint8_t*>(p);
           uint8_t* b = reinterpret_cast<uint8_t*>(q);
--- a/OrthancFramework/Sources/SystemToolbox.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/Sources/SystemToolbox.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -520,7 +520,7 @@
   {
     // This is an adapted version of the patch proposed in issue #64
     // without an explicit call to "malloc()" to prevent memory leak
-    // https://bugs.orthanc-server.com/show_bug.cgi?id=64
+    // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=64
     // https://stackoverflow.com/q/31494901/881731
 
     const int mib[4] = { CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV };
--- a/OrthancFramework/UnitTestsSources/RestApiTests.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancFramework/UnitTestsSources/RestApiTests.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -528,7 +528,7 @@
   }
 
   // Below are the tests from issue 216:
-  // https://bugs.orthanc-server.com/show_bug.cgi?id=216
+  // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=216
 
   {
     HttpContentNegociation d;
@@ -1113,8 +1113,8 @@
 
 TEST(MultipartStreamReader, Issue190)
 {
-  // https://bugs.orthanc-server.com/show_bug.cgi?id=190
-  // https://hg.orthanc-server.com/orthanc-dicomweb/rev/6dc2f79b5579
+  // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=190
+  // https://orthanc.uclouvain.be/hg/orthanc-dicomweb/rev/6dc2f79b5579
 
   std::map<std::string, std::string> headers;
   headers["content-type"] = "multipart/related; type=application/dicom; boundary=0f3cf5c0-70e0-41ef-baef-c6f9f65ec3e1";
@@ -1323,7 +1323,7 @@
 
 TEST(HttpClient, DISABLED_Issue156_Slow)
 {
-  // https://bugs.orthanc-server.com/show_bug.cgi?id=156
+  // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=156
   
   TotoServer handler;
   HttpServer server;
--- a/OrthancServer/Plugins/Engine/OrthancPlugins.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Plugins/Engine/OrthancPlugins.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -4328,7 +4328,7 @@
     {
       // Fix issue 168 (Plugins can't read private tags from the
       // configuration file)
-      // https://bugs.orthanc-server.com/show_bug.cgi?id=168
+      // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=168
       std::string privateCreator;
 
       if (privateCreatorC == NULL)
@@ -4632,7 +4632,7 @@
     {
       // Fix issue 168 (Plugins can't read private tags from the
       // configuration file)
-      // https://bugs.orthanc-server.com/show_bug.cgi?id=168
+      // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=168
       std::string privateCreator;
       {
         OrthancConfiguration::ReaderLock lock;
--- a/OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h	Tue Nov 21 18:16:31 2023 +0100
@@ -175,7 +175,7 @@
 /**
  * For Microsoft Visual Studio, a compatibility "stdint.h" can be
  * downloaded at the following URL:
- * https://hg.orthanc-server.com/orthanc/raw-file/tip/Resources/ThirdParty/VisualStudio/stdint.h
+ * https://orthanc.uclouvain.be/hg/orthanc/raw-file/default/OrthancFramework/Resources/ThirdParty/VisualStudio/stdint.h
  **/
 #include <stdint.h>
 
--- a/OrthancServer/Plugins/Samples/ModalityWorklists/README	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Plugins/Samples/ModalityWorklists/README	Tue Nov 21 18:16:31 2023 +0100
@@ -8,4 +8,4 @@
 build process of Orthanc.
 
 Documentation is available in the Orthanc Book:
-http://book.orthanc-server.com/plugins/worklists-plugin.html
+https://orthanc.uclouvain.be/book/plugins/worklists-plugin.html
--- a/OrthancServer/Plugins/Samples/ServeFolders/README	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Plugins/Samples/ServeFolders/README	Tue Nov 21 18:16:31 2023 +0100
@@ -8,4 +8,4 @@
 build process of Orthanc.
 
 Documentation is available in the Orthanc Book:
-http://book.orthanc-server.com/plugins/serve-folders.html
+https://orthanc.uclouvain.be/book/plugins/serve-folders.html
--- a/OrthancServer/Resources/Configuration.json	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Resources/Configuration.json	Tue Nov 21 18:16:31 2023 +0100
@@ -907,7 +907,7 @@
 
   // Extra Main Dicom tags that are stored in DB together with all default
   // Main Dicom tags that are already stored.
-  // see https://book.orthanc-server.com/faq/main-dicom-tags.html 
+  // see https://orthanc.uclouvain.be/book/faq/main-dicom-tags.html 
   // (new in Orthanc 1.11.0)
   // Sequences tags are not supported.
   /**
@@ -932,7 +932,7 @@
 
   // Enables/disables warnings in the logs.
   // "true" enables a warning.  All warnings are enabled by default
-  // see https://book.orthanc-server.com/faq/main-dicom-tags.html#warnings
+  // see https://orthanc.uclouvain.be/book/faq/main-dicom-tags.html#warnings
   // (new in Orthanc 1.11.0)
   "Warnings" : {
     // A "RequestedTags" has been read from storage which is slower than
--- a/OrthancServer/Resources/Samples/Python/DicomizeImage.py	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Resources/Samples/Python/DicomizeImage.py	Tue Nov 21 18:16:31 2023 +0100
@@ -63,7 +63,7 @@
     # Case 1: Attach the new DICOM image as a new series in an
     # existing study. In this case, "PARENT_STUDY" indicates the
     # Orthanc identifier of the parent study:
-    # https://book.orthanc-server.com/faq/orthanc-ids.html
+    # https://orthanc.uclouvain.be/book/faq/orthanc-ids.html
     PARENT_STUDY = '66c8e41e-ac3a9029-0b85e42a-8195ee0a-92c2e62e'
 
 else:
--- a/OrthancServer/Resources/Samples/README.txt	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Resources/Samples/README.txt	Tue Nov 21 18:16:31 2023 +0100
@@ -4,4 +4,4 @@
 
 The integration tests of Orthanc provide many samples about the
 features of the REST API of Orthanc:
-https://hg.orthanc-server.com/orthanc-tests/file/tip/Tests/Tests.py
+https://orthanc.uclouvain.be/hg/orthanc-tests/file/default/Tests/Tests.py
--- a/OrthancServer/Sources/OrthancFindRequestHandler.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancFindRequestHandler.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -173,7 +173,7 @@
   {
     // Whatever the manufacturer, remove the GenericGroupLength tags
     // http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_7.2.html
-    // https://bugs.orthanc-server.com/show_bug.cgi?id=31
+    // https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=31
     if (tag.GetElement() == 0x0000)
     {
       return false;
--- a/OrthancServer/Sources/OrthancInitialization.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancInitialization.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -378,7 +378,7 @@
 
 #if HAVE_MALLOPT == 1
     // New in Orthanc 1.8.2
-    // https://book.orthanc-server.com/faq/scalability.html#controlling-memory-usage
+    // https://orthanc.uclouvain.be/book/faq/scalability.html#controlling-memory-usage
     unsigned int maxArena = lock.GetConfiguration().GetUnsignedIntegerParameter(MALLOC_ARENA_MAX, 5);
     if (maxArena != 0)
     {
--- a/OrthancServer/Sources/OrthancMoveRequestHandler.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancMoveRequestHandler.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -265,7 +265,7 @@
       /**
        * This tokenization fixes issue 154 ("Matching against list of
        * UID-s by C-MOVE").
-       * https://bugs.orthanc-server.com/show_bug.cgi?id=154
+       * https://orthanc.uclouvain.be/bugs/show_bug.cgi?id=154
        **/
 
       std::vector<std::string> tokens;
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestAnonymizeModify.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestAnonymizeModify.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -85,7 +85,7 @@
     call.GetDocumentation()
       .SetRequestField(TRANSCODE, RestApiCallDocumentation::Type_String,
                        "Transcode the DICOM instances to the provided DICOM transfer syntax: "
-                       "https://book.orthanc-server.com/faq/transcoding.html", false)
+                       "https://orthanc.uclouvain.be/book/faq/transcoding.html", false)
       .SetRequestField(FORCE, RestApiCallDocumentation::Type_Boolean,
                        "Allow the modification of tags related to DICOM identifiers, at the risk of "
                        "breaking the DICOM model of the real world", false)
@@ -113,7 +113,7 @@
     call.GetDocumentation()
       .SetRequestField(TRANSCODE, RestApiCallDocumentation::Type_String,
                        "Transcode the DICOM instances to the provided DICOM transfer syntax: "
-                       "https://book.orthanc-server.com/faq/transcoding.html", false)
+                       "https://orthanc.uclouvain.be/book/faq/transcoding.html", false)
       .SetRequestField(FORCE, RestApiCallDocumentation::Type_Boolean,
                        "Allow the modification of tags related to DICOM identifiers, at the risk of "
                        "breaking the DICOM model of the real world", false)
@@ -265,7 +265,7 @@
         .SetTag("Instances")
         .SetSummary("Modify instance")
         .SetDescription("Download a modified version of the DICOM instance whose Orthanc identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/anonymization.html#modification-of-a-single-instance")
+                        "https://orthanc.uclouvain.be/book/users/anonymization.html#modification-of-a-single-instance")
         .SetUriArgument("id", "Orthanc identifier of the instance of interest")
         .AddAnswerType(MimeType_Dicom, "The modified DICOM instance");
       return;
@@ -310,7 +310,7 @@
         .SetTag("Instances")
         .SetSummary("Anonymize instance")
         .SetDescription("Download an anonymized version of the DICOM instance whose Orthanc identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/anonymization.html#anonymization-of-a-single-instance")
+                        "https://orthanc.uclouvain.be/book/users/anonymization.html#anonymization-of-a-single-instance")
         .SetUriArgument("id", "Orthanc identifier of the instance of interest")
         .AddAnswerType(MimeType_Dicom, "The anonymized DICOM instance");
       return;
@@ -441,7 +441,7 @@
         .SetDescription("Start a job that will modify all the DICOM instances within the " + r +
                         " whose identifier is provided in the URL. The modified DICOM instances will be "
                         "stored into a brand new " + r + ", whose Orthanc identifiers will be returned by the job. "
-                        "https://book.orthanc-server.com/users/anonymization.html#modification-of-studies-or-series")
+                        "https://orthanc.uclouvain.be/book/users/anonymization.html#modification-of-studies-or-series")
         .SetUriArgument("id", "Orthanc identifier of the " + r + " of interest");
       return;
     }
@@ -514,7 +514,7 @@
         .SetDescription("Start a job that will anonymize all the DICOM instances within the " + r +
                         " whose identifier is provided in the URL. The modified DICOM instances will be "
                         "stored into a brand new " + r + ", whose Orthanc identifiers will be returned by the job. "
-                        "https://book.orthanc-server.com/users/anonymization.html#anonymization-of-patients-studies-or-series")
+                        "https://orthanc.uclouvain.be/book/users/anonymization.html#anonymization-of-patients-studies-or-series")
         .SetUriArgument("id", "Orthanc identifier of the " + r + " of interest");
       return;
     }
@@ -1059,7 +1059,7 @@
         .SetDescription("Start a new job so as to split the DICOM study whose Orthanc identifier is provided in the URL, "
                         "by taking some of its children series or instances out of it and putting them into a brand new study "
                         "(this new study is created by setting the `StudyInstanceUID` tag to a random identifier): "
-                        "https://book.orthanc-server.com/users/anonymization.html#splitting")
+                        "https://orthanc.uclouvain.be/book/users/anonymization.html#splitting")
         .SetUriArgument("id", "Orthanc identifier of the study of interest")
         .SetRequestField(SERIES, RestApiCallDocumentation::Type_JsonListOfStrings,
                          "The list of series to be separated from the parent study. "
@@ -1185,7 +1185,7 @@
         .SetTag("Studies")
         .SetSummary("Merge study")
         .SetDescription("Start a new job so as to move some DICOM resources into the DICOM study whose Orthanc identifier "
-                        "is provided in the URL: https://book.orthanc-server.com/users/anonymization.html#merging")
+                        "is provided in the URL: https://orthanc.uclouvain.be/book/users/anonymization.html#merging")
         .SetUriArgument("id", "Orthanc identifier of the study of interest")
         .SetRequestField(RESOURCES, RestApiCallDocumentation::Type_JsonListOfStrings,
                          "The list of DICOM resources (studies, series, and/or instances) to be merged "
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -492,12 +492,12 @@
                        "the archive in background.", false)
       .SetRequestField(KEY_TRANSCODE, RestApiCallDocumentation::Type_String,
                        "If present, the DICOM files in the archive will be transcoded to the provided "
-                       "transfer syntax: https://book.orthanc-server.com/faq/transcoding.html", false)
+                       "transfer syntax: https://orthanc.uclouvain.be/book/faq/transcoding.html", false)
       .SetRequestField("Priority", RestApiCallDocumentation::Type_Number,
                        "In asynchronous mode, the priority of the job. The lower the value, the higher the priority.", false)
       .AddAnswerType(MimeType_Zip, "In synchronous mode, the ZIP file containing the archive")
       .AddAnswerType(MimeType_Json, "In asynchronous mode, information about the job that has been submitted to "
-                     "generate the archive: https://book.orthanc-server.com/users/advanced-rest.html#jobs")
+                     "generate the archive: https://orthanc.uclouvain.be/book/users/advanced-rest.html#jobs")
       .SetAnswerField("ID", RestApiCallDocumentation::Type_String, "Identifier of the job")
       .SetAnswerField("Path", RestApiCallDocumentation::Type_String, "Path to access the job in the REST API");
 
@@ -586,7 +586,7 @@
                             "(including file extension)", false)
         .SetHttpGetArgument(TRANSCODE, RestApiCallDocumentation::Type_String,
                             "If present, the DICOM files in the archive will be transcoded to the provided "
-                            "transfer syntax: https://book.orthanc-server.com/faq/transcoding.html", false)
+                            "transfer syntax: https://orthanc.uclouvain.be/book/faq/transcoding.html", false)
         .AddAnswerType(MimeType_Zip, "ZIP file containing the archive");
       if (IS_MEDIA)
       {
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestChanges.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestChanges.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -73,7 +73,7 @@
                         "Whether the last reported change is the last of the full history")
         .SetAnswerField("Last", RestApiCallDocumentation::Type_Number,
                         "The index of the last reported change, can be used for the `since` argument in subsequent calls to this route")
-        .SetHttpGetSample("https://demo.orthanc-server.com/changes?since=0&limit=2", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/changes?since=0&limit=2", true);
       return;
     }
     
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestModalities.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestModalities.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -213,7 +213,7 @@
         .SetTag("Networking")
         .SetSummary("Trigger C-ECHO SCU")
         .SetDescription("Trigger C-ECHO SCU command against the DICOM modality whose identifier is provided in URL: "
-                        "https://book.orthanc-server.com/users/rest.html#performing-c-echo")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#performing-c-echo")
         .SetUriArgument("id", "Identifier of the modality of interest");
       return;
     }
@@ -657,7 +657,7 @@
         .SetTag("Networking")
         .SetSummary("Trigger C-FIND SCU")
         .SetDescription("Trigger C-FIND SCU command against the DICOM modality whose identifier is provided in URL: "
-                        "https://book.orthanc-server.com/users/rest.html#performing-query-retrieve-c-find-and-find-with-rest")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#performing-query-retrieve-c-find-and-find-with-rest")
         .SetUriArgument("id", "Identifier of the modality of interest")
         .SetRequestField(KEY_QUERY, RestApiCallDocumentation::Type_JsonObject,
                          "Associative array containing the filter on the values of the DICOM tags", true)
@@ -760,7 +760,7 @@
         .SetDescription("List the identifiers of all the query/retrieve operations on DICOM modalities, "
                         "as initiated by calls to `/modalities/{id}/query`. The length of this list is bounded "
                         "by the `QueryRetrieveSize` configuration option of Orthanc. "
-                        "https://book.orthanc-server.com/users/rest.html#performing-query-retrieve-c-find-and-find-with-rest")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#performing-query-retrieve-c-find-and-find-with-rest")
         .AddAnswerType(MimeType_Json, "JSON array containing the identifiers");
       return;
     }
@@ -997,7 +997,7 @@
         .SetSummary("Retrieve one answer")
         .SetDescription("Start a C-MOVE SCU command as a job, in order to retrieve one answer associated with the "
                         "query/retrieve operation whose identifiers are provided in the URL: "
-                        "https://book.orthanc-server.com/users/rest.html#performing-retrieve-c-move")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#performing-retrieve-c-move")
         .SetUriArgument("index", "Index of the answer");
       return;
     }
@@ -1016,7 +1016,7 @@
         .SetSummary("Retrieve all answers")
         .SetDescription("Start a C-MOVE SCU command as a job, in order to retrieve all the answers associated with the "
                         "query/retrieve operation whose identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/rest.html#performing-retrieve-c-move");
+                        "https://orthanc.uclouvain.be/book/users/rest.html#performing-retrieve-c-move");
       return;
     }
 
@@ -1417,7 +1417,7 @@
         .SetSummary("Trigger C-STORE SCU")
         .SetDescription("Start a C-STORE SCU command as a job, in order to send DICOM resources stored locally "
                         "to some remote DICOM modality whose identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/rest.html#rest-store-scu")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#rest-store-scu")
         .AddRequestType(MimeType_PlainText, "The Orthanc identifier of one resource to be sent")
         .SetRequestField(KEY_RESOURCES, RestApiCallDocumentation::Type_JsonListOfStrings,
                          "List of the Orthanc identifiers of all the DICOM resources to be sent", true)
@@ -1439,7 +1439,7 @@
                          "Move originator ID that is used for this commands, in order to fake a C-MOVE SCU", false)
         .SetRequestField(KEY_STORAGE_COMMITMENT, RestApiCallDocumentation::Type_Boolean,
                          "Whether to chain C-STORE with DICOM storage commitment to validate the success of the transmission: "
-                         "https://book.orthanc-server.com/users/storage-commitment.html#chaining-c-store-with-storage-commitment", false)
+                         "https://orthanc.uclouvain.be/book/users/storage-commitment.html#chaining-c-store-with-storage-commitment", false)
         .SetRequestField(KEY_TIMEOUT, RestApiCallDocumentation::Type_Number,
                          "Timeout for the C-STORE command, in seconds", false)
         .SetUriArgument("id", "Identifier of the modality of interest");
@@ -1544,7 +1544,7 @@
         .SetSummary("Trigger C-MOVE SCU")
         .SetDescription("Start a C-MOVE SCU command as a job, in order to drive the execution of a sequence of "
                         "C-STORE commands by some remote DICOM modality whose identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/rest.html#performing-c-move")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#performing-c-move")
         .SetRequestField(KEY_RESOURCES, RestApiCallDocumentation::Type_JsonListOfObjects,
                          "List of queries identifying all the DICOM resources to be sent", true)
         .SetRequestField(KEY_LEVEL, RestApiCallDocumentation::Type_String,
@@ -1716,7 +1716,7 @@
         .SetTag("Networking")
         .SetSummary("Send to Orthanc peer")
         .SetDescription("Send DICOM resources stored locally to some remote Orthanc peer whose identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/rest.html#sending-one-resource")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#sending-one-resource")
         .AddRequestType(MimeType_PlainText, "The Orthanc identifier of one resource to be sent")
         .SetRequestField(KEY_RESOURCES, RestApiCallDocumentation::Type_JsonListOfStrings,
                          "List of the Orthanc identifiers of all the DICOM resources to be sent", true)
@@ -2234,7 +2234,7 @@
         .SetTag("Networking")
         .SetSummary("Trigger storage commitment request")
         .SetDescription("Trigger a storage commitment request to some remote DICOM modality whose identifier is provided "
-                        "in the URL: https://book.orthanc-server.com/users/storage-commitment.html#storage-commitment-scu")
+                        "in the URL: https://orthanc.uclouvain.be/book/users/storage-commitment.html#storage-commitment-scu")
         .SetRequestField(ORTHANC_RESOURCES, RestApiCallDocumentation::Type_JsonListOfStrings,
                          "List of the Orthanc identifiers of the DICOM resources to be checked by storage commitment", true)
         .SetRequestField(DICOM_INSTANCES, RestApiCallDocumentation::Type_JsonListOfObjects,
@@ -2423,7 +2423,7 @@
         .SetTag("Networking")
         .SetSummary("Get storage commitment report")
         .SetDescription("Get the storage commitment report whose identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/storage-commitment.html#storage-commitment-scu")
+                        "https://orthanc.uclouvain.be/book/users/storage-commitment.html#storage-commitment-scu")
         .SetAnswerField("Status", RestApiCallDocumentation::Type_String,
                         "Can be `Success`, `Failure`, or `Pending` (the latter means that no report has been received yet)")
         .SetAnswerField("RemoteAET", RestApiCallDocumentation::Type_String,
@@ -2471,7 +2471,7 @@
         .SetDescription("Remove out of Orthanc, the DICOM instances that have been reported to have been properly "
                         "received the storage commitment report whose identifier is provided in the URL. This is "
                         "only possible if the `Status` of the storage commitment report is `Success`. "
-                        "https://book.orthanc-server.com/users/storage-commitment.html#removing-the-instances")
+                        "https://orthanc.uclouvain.be/book/users/storage-commitment.html#removing-the-instances")
         .SetUriArgument("id", "Identifier of the storage commitment report");
       return;
     }
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -67,19 +67,19 @@
     switch (type)
     {
       case Orthanc::ResourceType_Instance:
-        return "https://demo.orthanc-server.com/instances/d94d9a03-3003b047-a4affc69-322313b2-680530a2";
+        return "https://orthanc.uclouvain.be/demo/instances/6582b1c0-292ad5ab-ba0f088f-f7a1766f-9a29a54f";
         break;
         
       case Orthanc::ResourceType_Series:
-        return "https://demo.orthanc-server.com/series/37836232-d13a2350-fa1dedc5-962b31aa-010f8e52";
+        return "https://orthanc.uclouvain.be/demo/series/37836232-d13a2350-fa1dedc5-962b31aa-010f8e52";
         break;
         
       case Orthanc::ResourceType_Study:
-        return "https://demo.orthanc-server.com/studies/27f7126f-4f66fb14-03f4081b-f9341db2-53925988";
+        return "https://orthanc.uclouvain.be/demo/studies/27f7126f-4f66fb14-03f4081b-f9341db2-53925988";
         break;
         
       case Orthanc::ResourceType_Patient:
-        return "https://demo.orthanc-server.com/patients/46e6332c-677825b6-202fcf7c-f787bc5f-7b07c382";
+        return "https://orthanc.uclouvain.be/demo/patients/46e6332c-677825b6-202fcf7c-f787bc5f-7b07c382";
         break;
         
       default:
@@ -216,7 +216,7 @@
                             "If present, retrieve detailed information about the individual " + resources, false)
         .AddAnswerType(MimeType_Json, "JSON array containing either the Orthanc identifiers, or detailed information "
                        "about the reported " + resources + " (if `expand` argument is provided)")
-        .SetHttpGetSample("https://demo.orthanc-server.com/" + resources + "?since=0&limit=2", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/" + resources + "?since=0&limit=2", true);
       return;
     }
     
@@ -373,7 +373,7 @@
         .SetHttpHeader("Accept", "This HTTP header can be set to retrieve the DICOM instance in DICOMweb format")
         .SetHttpGetArgument(TRANSCODE, RestApiCallDocumentation::Type_String,
                             "If present, the DICOM file will be transcoded to the provided "
-                            "transfer syntax: https://book.orthanc-server.com/faq/transcoding.html", false)
+                            "transfer syntax: https://orthanc.uclouvain.be/book/faq/transcoding.html", false)
         .AddAnswerType(MimeType_Dicom, "The DICOM instance")
         .AddAnswerType(MimeType_DicomWebJson, "The DICOM instance, in DICOMweb JSON format")
         .AddAnswerType(MimeType_DicomWebXml, "The DICOM instance, in DICOMweb XML format");
@@ -524,7 +524,7 @@
         .SetHttpGetArgument(IGNORE_LENGTH, RestApiCallDocumentation::Type_JsonListOfStrings,
                             "Also include the DICOM tags that are provided in this list, even if their associated value is long", false)
         .AddAnswerType(MimeType_Json, "JSON object containing the DICOM tags and their associated value")
-        .SetTruncatedJsonHttpGetSample("https://demo.orthanc-server.com/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/tags", 10);
+        .SetTruncatedJsonHttpGetSample("https://orthanc.uclouvain.be/demo/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/tags", 10);
       return;
     }
 
@@ -560,7 +560,7 @@
         .SetHttpGetArgument(IGNORE_LENGTH, RestApiCallDocumentation::Type_JsonListOfStrings,
                             "Also include the DICOM tags that are provided in this list, even if their associated value is long", false)
         .AddAnswerType(MimeType_Json, "JSON object containing the DICOM tags and their associated value")
-        .SetTruncatedJsonHttpGetSample("https://demo.orthanc-server.com/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/simplified-tags", 10);
+        .SetTruncatedJsonHttpGetSample("https://orthanc.uclouvain.be/demo/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/simplified-tags", 10);
       return;
     }
     else
@@ -580,7 +580,7 @@
         .SetDescription("List the frames that are available in the DICOM instance of interest")
         .SetUriArgument("id", "Orthanc identifier of the DICOM instance of interest")
         .AddAnswerType(MimeType_Json, "The list of the indices of the available frames")
-        .SetHttpGetSample("https://demo.orthanc-server.com/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/frames", true);      
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/frames", true);      
       return;
     }
 
@@ -1481,7 +1481,7 @@
         .SetTag("Instances")
         .SetSummary("Decode frame for Matlab")
         .SetDescription(description + ", and export this frame as a Octave/Matlab matrix to be imported with `eval()`: "
-                        "https://book.orthanc-server.com/faq/matlab.html")
+                        "https://orthanc.uclouvain.be/book/faq/matlab.html")
         .SetUriArgument("id", "Orthanc identifier of the DICOM instance of interest")
         .AddAnswerType(MimeType_PlainText, "Octave/Matlab matrix");
       return;
@@ -2248,7 +2248,7 @@
         .SetSummary("List operations on attachments")
         .SetDescription("Get the list of the operations that are available for attachments associated with the given " + r)
         .AddAnswerType(MimeType_Json, "List of the available operations")
-        .SetHttpGetSample("https://demo.orthanc-server.com/instances/d94d9a03-3003b047-a4affc69-322313b2-680530a2/attachments/dicom", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/instances/6582b1c0-292ad5ab-ba0f088f-f7a1766f-9a29a54f/attachments/dicom", true);
       return;
     }
 
@@ -2384,7 +2384,7 @@
         .SetSummary("Get info about the attachment")
         .SetDescription("Get all the information about the attachment associated with the given " + r)
         .AddAnswerType(MimeType_Json, "JSON object containing the information about the attachment")
-        .SetHttpGetSample("https://demo.orthanc-server.com/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/attachments/dicom/info", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/attachments/dicom/info", true);
       return;
     }
 
@@ -3127,7 +3127,7 @@
         .SetSummary("Look for local resources")
         .SetDescription("This URI can be used to perform a search on the content of the local Orthanc server, "
                         "in a way that is similar to querying remote DICOM modalities using C-FIND SCU: "
-                        "https://book.orthanc-server.com/users/rest.html#performing-finds-within-orthanc")
+                        "https://orthanc.uclouvain.be/book/users/rest.html#performing-finds-within-orthanc")
         .SetRequestField(KEY_CASE_SENSITIVE, RestApiCallDocumentation::Type_Boolean,
                          "Enable case-sensitive search for PN value representations (defaults to configuration option `CaseSensitivePN`)", false)
         .SetRequestField(KEY_EXPAND, RestApiCallDocumentation::Type_Boolean,
@@ -3550,7 +3550,7 @@
                         "Same information as the `Slices` field, but in a compact form")
         .SetAnswerField("Type", RestApiCallDocumentation::Type_String,
                         "Can be `Volume` (for 3D volumes) or `Sequence` (notably for cine images)")
-        .SetTruncatedJsonHttpGetSample("https://demo.orthanc-server.com/series/1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0/ordered-slices", 10);
+        .SetTruncatedJsonHttpGetSample("https://orthanc.uclouvain.be/demo/series/1e2c125c-411b8e86-3f4fe68e-a7584dd3-c6da78f0/ordered-slices", 10);
       return;
     }
 
@@ -3577,7 +3577,7 @@
                         "combines hexadecimal tags with human-readable description.")
         .SetUriArgument("id", "Orthanc identifier of the DICOM instance of interest")
         .AddAnswerType(MimeType_Json, "JSON object containing the DICOM tags and their associated value")
-        .SetHttpGetSample("https://demo.orthanc-server.com/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/header", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/instances/7c92ce8e-bbf67ed2-ffa3b8c1-a3b35d94-7ff3ae26/header", true);
       return;
     }
 
@@ -3610,7 +3610,7 @@
         .SetDescription("Remove all the attachments of the type \"DICOM-as-JSON\" that are associated will all the "
                         "DICOM instances stored in Orthanc. These summaries will be automatically re-created on the next access. "
                         "This is notably useful after changes to the `Dictionary` configuration option. "
-                        "https://book.orthanc-server.com/faq/orthanc-storage.html#storage-area");
+                        "https://orthanc.uclouvain.be/book/faq/orthanc-storage.html#storage-area");
       return;
     }
 
--- a/OrthancServer/Sources/OrthancRestApi/OrthancRestSystem.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestSystem.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -100,11 +100,11 @@
         .SetAnswerField(API_VERSION, RestApiCallDocumentation::Type_Number, "Version of the REST API")
         .SetAnswerField(VERSION, RestApiCallDocumentation::Type_String, "Version of Orthanc")
         .SetAnswerField(DATABASE_VERSION, RestApiCallDocumentation::Type_Number,
-                        "Version of the database: https://book.orthanc-server.com/developers/db-versioning.html")
+                        "Version of the database: https://orthanc.uclouvain.be/book/developers/db-versioning.html")
         .SetAnswerField(DATABASE_SERVER_IDENTIFIER, RestApiCallDocumentation::Type_String,
                         "ID of the server in the database (when running multiple Orthanc on the same DB)")
         .SetAnswerField(IS_HTTP_SERVER_SECURE, RestApiCallDocumentation::Type_Boolean,
-                        "Whether the REST API is properly secured (assuming no reverse proxy is in use): https://book.orthanc-server.com/faq/security.html#securing-the-http-server")
+                        "Whether the REST API is properly secured (assuming no reverse proxy is in use): https://orthanc.uclouvain.be/book/faq/security.html#securing-the-http-server")
         .SetAnswerField(STORAGE_AREA_PLUGIN, RestApiCallDocumentation::Type_String,
                         "Information about the installed storage area plugin (`null` if no such plugin is installed)")
         .SetAnswerField(DATABASE_BACKEND_PLUGIN, RestApiCallDocumentation::Type_String,
@@ -134,7 +134,7 @@
                         "The configured UserMetadata (new in Orthanc 1.12.0)")
         .SetAnswerField(HAS_LABELS, RestApiCallDocumentation::Type_Boolean,
                         "Whether the database back-end supports labels (new in Orthanc 1.12.0)")
-        .SetHttpGetSample("https://demo.orthanc-server.com/system", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/system", true);
       return;
     }
 
@@ -211,7 +211,7 @@
         .SetAnswerField("TotalDiskSizeMB", RestApiCallDocumentation::Type_Number, "Size of the storage area (in megabytes)")
         .SetAnswerField("TotalUncompressedSize", RestApiCallDocumentation::Type_String, "Total size of all the files once uncompressed (in bytes). This corresponds to `TotalDiskSize` if no compression is enabled, cf. `StorageCompression` configuration option")
         .SetAnswerField("TotalUncompressedSizeMB", RestApiCallDocumentation::Type_Number, "Total size of all the files once uncompressed (in megabytes)")
-        .SetHttpGetSample("https://demo.orthanc-server.com/statistics", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/statistics", true);
       return;
     }
 
@@ -508,7 +508,7 @@
         .SetSummary("List plugins")
         .SetDescription("List all the installed plugins")
         .AddAnswerType(MimeType_Json, "JSON array containing the identifiers of the installed plugins")
-        .SetHttpGetSample("https://demo.orthanc-server.com/plugins", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/plugins", true);
       return;
     }
 
@@ -544,7 +544,7 @@
         .SetDescription("Get system information about the plugin whose identifier is provided in the URL")
         .SetUriArgument("id", "Identifier of the job of interest")
         .AddAnswerType(MimeType_Json, "JSON object containing information about the plugin")
-        .SetHttpGetSample("https://demo.orthanc-server.com/plugins/dicom-web", true);
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/plugins/dicom-web", true);
       return;
     }
 
@@ -653,7 +653,7 @@
                             "If present, retrieve detailed information about the individual jobs", false)
         .AddAnswerType(MimeType_Json, "JSON array containing either the jobs identifiers, or detailed information "
                        "about the reported jobs (if `expand` argument is provided)")
-        .SetTruncatedJsonHttpGetSample("https://demo.orthanc-server.com/jobs", 3);
+        .SetTruncatedJsonHttpGetSample("https://orthanc.uclouvain.be/demo/jobs", 3);
       return;
     }
 
@@ -711,7 +711,7 @@
         .SetTag("Jobs")
         .SetSummary("Get job")
         .SetDescription("Retrieve detailed information about the job whose identifier is provided in the URL: "
-                        "https://book.orthanc-server.com/users/advanced-rest.html#jobs")
+                        "https://orthanc.uclouvain.be/book/users/advanced-rest.html#jobs")
         .SetUriArgument("id", "Identifier of the job of interest")
         .AddAnswerType(MimeType_Json, "JSON object detailing the job")
         .SetSample(sample);
@@ -869,7 +869,7 @@
         .SetSummary(verb + " job")
         .SetDescription(verb + " the job whose identifier is provided in the URL. Check out the "
                         "Orthanc Book for more information about the state machine applicable to jobs: "
-                        "https://book.orthanc-server.com/users/advanced-rest.html#jobs")
+                        "https://orthanc.uclouvain.be/book/users/advanced-rest.html#jobs")
         .SetUriArgument("id", "Identifier of the job of interest")
         .AddAnswerType(MimeType_Json, "Empty JSON object in the case of a success");
       return;
@@ -916,8 +916,8 @@
         .SetTag("System")
         .SetSummary("Get usage metrics")
         .SetDescription("Get usage metrics of Orthanc in the Prometheus file format (OpenMetrics): "
-                        "https://book.orthanc-server.com/users/advanced-rest.html#instrumentation-with-prometheus")
-        .SetHttpGetSample("https://demo.orthanc-server.com/tools/metrics-prometheus", false);
+                        "https://orthanc.uclouvain.be/book/users/advanced-rest.html#instrumentation-with-prometheus")
+        .SetHttpGetSample("https://orthanc.uclouvain.be/demo/tools/metrics-prometheus", false);
       return;
     }
 
--- a/OrthancServer/Sources/Search/ISqlLookupFormatter.h	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/Search/ISqlLookupFormatter.h	Tue Nov 21 18:16:31 2023 +0100
@@ -59,7 +59,7 @@
     /**
      * Whether to escape '[' and ']', which is only needed for
      * MSSQL. New in Orthanc 1.10.0, from the following changeset:
-     * https://hg.orthanc-server.com/orthanc-databases/rev/389c037387ea
+     * https://orthanc.uclouvain.be/hg/orthanc-databases/rev/389c037387ea
      **/
     virtual bool IsEscapeBrackets() const = 0;
 
--- a/OrthancServer/Sources/main.cpp	Tue Nov 21 10:32:42 2023 +0100
+++ b/OrthancServer/Sources/main.cpp	Tue Nov 21 18:16:31 2023 +0100
@@ -682,7 +682,7 @@
     << "case of a directory, all the JSON files it contains will be merged. " << std::endl
     << "If no configuration path is given on the command line, a set of default " << std::endl
     << "parameters is used. Please refer to the Orthanc Book for the full " << std::endl
-    << "instructions about how to use Orthanc <http://book.orthanc-server.com/>." << std::endl
+    << "instructions about how to use Orthanc <https://orthanc.uclouvain.be/book/>." << std::endl
     << std::endl
     << "Pay attention to the fact that the order of the options is important." << std::endl
     << "Options are read left to right. In particular, options such as \"--verbose\" can " << std::endl
@@ -1431,7 +1431,7 @@
   catch (OrthancException&)
   {
     LOG(ERROR) << "Unable to run the automated upgrade, please use the replication instructions: "
-               << "http://book.orthanc-server.com/users/replication.html";
+               << "https://orthanc.uclouvain.be/book/users/replication.html";
     throw;
   }
     
@@ -1941,15 +1941,15 @@
         openapi["info"]["version"] = ORTHANC_VERSION;
         openapi["info"]["title"] = "Orthanc API";
         openapi["info"]["description"] =
-          "This is the full documentation of the [REST API](https://book.orthanc-server.com/users/rest.html) "
+          "This is the full documentation of the [REST API](https://orthanc.uclouvain.be/book/users/rest.html) "
           "of Orthanc.<p>This reference is automatically generated from the source code of Orthanc. A "
-          "[shorter cheat sheet](https://book.orthanc-server.com/users/rest-cheatsheet.html) is part of "
+          "[shorter cheat sheet](https://orthanc.uclouvain.be/book/users/rest-cheatsheet.html) is part of "
           "the Orthanc Book.<p>An earlier, manually crafted version from August 2019, is [still available]"
           "(2019-08-orthanc-openapi.html), but is not up-to-date anymore ([source]"
           "(https://groups.google.com/g/orthanc-users/c/NUiJTEICSl8/m/xKeqMrbqAAAJ)).";
 
         Json::Value server = Json::objectValue;
-        server["url"] = "https://demo.orthanc-server.com/";
+        server["url"] = "https://orthanc.uclouvain.be/demo/";
         openapi["servers"].append(server);
         
         std::string s;
--- a/README	Tue Nov 21 10:32:42 2023 +0100
+++ b/README	Tue Nov 21 18:16:31 2023 +0100
@@ -8,7 +8,7 @@
 General information about this software can be found on its official
 Website, and in the Orthanc Book:
 http://www.orthanc-server.com/
-http://book.orthanc-server.com/
+https://orthanc.uclouvain.be/book/
 
 The instructions for building Orthanc can be found in the "./INSTALL"
 file.
@@ -43,7 +43,7 @@
 
 Instructions for contributing to the Orthanc project are included in
 the Orthanc Book:
-https://book.orthanc-server.com/developers/repositories.html
+https://orthanc.uclouvain.be/book/developers/repositories.html
 
 
 Licensing
@@ -55,7 +55,7 @@
 
 Full information about the licensing of the Orthanc ecosystem is
 available in the Orthanc Book:
-https://book.orthanc-server.com/faq/licensing.html
+https://orthanc.uclouvain.be/book/faq/licensing.html
 
 We also kindly ask scientific works and clinical studies that make
 use of Orthanc to cite Orthanc in their associated publications.
--- a/TODO	Tue Nov 21 10:32:42 2023 +0100
+++ b/TODO	Tue Nov 21 18:16:31 2023 +0100
@@ -4,7 +4,7 @@
 
 For higher-level ideas in the roadmap, please first read the
 "Contributing to Orthanc" section of the Orthanc Book:
-https://book.orthanc-server.com/contributing.html
+https://orthanc.uclouvain.be/book/contributing.html
 
 
 Some features are being funded by an OpenCollective one-time donations.
@@ -21,7 +21,7 @@
 * Support partial file retrieval in Orthanc::HttpClient
 * Support retry counter in Orthanc::HttpClient
 * Option to enable DNS lookups in DICOM:
-  https://hg.orthanc-server.com/orthanc/file/Orthanc-1.9.3/OrthancFramework/Sources/OrthancFramework.cpp#l88
+  https://orthanc.uclouvain.be/hg/orthanc/file/Orthanc-1.9.3/OrthancFramework/Sources/OrthancFramework.cpp#l88
 * Toolbox::ComputeMD5() fails on files larger than 4GB
 * Add an option to run Orthanc in read-only mode both for DICOM and for Rest API.
 * Logging: add some information like Thread-Id/job-id to contextualize the logs.
@@ -62,7 +62,7 @@
 ============================
 
 * Write a getting started guide (step by step) for each platform to replace
-  https://book.orthanc-server.com/users/cookbook.html :
+  https://orthanc.uclouvain.be/book/users/cookbook.html :
   - Ubuntu/Debian
   - Windows
   - OSX
@@ -80,7 +80,7 @@
 * How to reproduce issues by replacing Orthanc with storescp or wlmscpfs
 * How to capture TCP traffic of DICOM protocol using tcpdump and Wireshark
 * Add more configurations of viewers (Weasis, Slicer...):
-  https://book.orthanc-server.com/integrations.html
+  https://orthanc.uclouvain.be/book/integrations.html
 * Discuss HL7 in a dedicated page:
   https://groups.google.com/d/msg/orthanc-users/4dt4992O0lQ/opTjTFU2BgAJ
   https://groups.google.com/g/orthanc-users/c/Spjtcj9vSPo/m/ktUArWxUDQAJ
@@ -166,7 +166,7 @@
 
 * Support C-GET SCU (note that C-GET SCP was introduced in Orthanc 1.7.0)
 * Support "Retrieve AE Title" (0008,0054) in C-FIND:
-  - On SCP side: done by https://hg.orthanc-server.com/orthanc/rev/1ec3e1e18f50
+  - On SCP side: done by https://orthanc.uclouvain.be/hg/orthanc/rev/1ec3e1e18f50
   - On SCU side:
     https://groups.google.com/d/msg/orthanc-users/wPl0g5mqZco/5X1Z8tEzBgAJ
 * Check Big Endian transfer syntax in ParsedDicomFile::EmbedImage and
@@ -256,7 +256,7 @@
 * Provide access to the Orthanc::DicomUserConnection class in plugins:
   https://groups.google.com/d/msg/orthanc-users/ycDA1xPuTRY/nsT2_GOtEgAJ
 * Provide a C++ callback similar to "ReceivedInstanceFilter()" in Lua
-  https://book.orthanc-server.com/users/lua.html#filtering-incoming-dicom-instances
+  https://orthanc.uclouvain.be/book/users/lua.html#filtering-incoming-dicom-instances
   https://groups.google.com/d/msg/orthanc-users/BtvLTE5Ni8A/vIMhmMgfBAAJ
 * In "OrthancPluginLog[Error|Warning|Info]()", prefix the log line with
   the name of the plugin, as retrieved by "OrthancPluginGetName()"