diff OrthancServer/main.cpp @ 57:4bc019d2f969 orthanc-renaming

renaming
author Sebastien Jodogne <s.jodogne@gmail.com>
date Sun, 16 Sep 2012 09:22:48 +0200
parents PalanthirServer/main.cpp@601ee9b7f2c7
children a70bb32802ae
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancServer/main.cpp	Sun Sep 16 09:22:48 2012 +0200
@@ -0,0 +1,169 @@
+/**
+ * Palanthir - A Lightweight, RESTful DICOM Store
+ * Copyright (C) 2012 Medical Physics Department, CHU of Liege,
+ * Belgium
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+
+#include "PalanthirRestApi.h"
+
+#include <stdio.h>
+
+#include "../Core/HttpServer/EmbeddedResourceHttpHandler.h"
+#include "../Core/HttpServer/FilesystemHttpHandler.h"
+#include "../Core/HttpServer/MongooseServer.h"
+#include "DicomProtocol/DicomServer.h"
+#include "PalanthirInitialization.h"
+
+
+using namespace Palanthir;
+
+
+class MyDicomStore : public IStoreRequestHandler
+{
+private:
+  ServerIndex& index_;
+  FileStorage storage_;
+
+public:
+  MyDicomStore(ServerIndex& index,
+               const std::string& path) :
+    index_(index),
+    storage_(path)
+  {
+  }
+
+  virtual void Handle(const std::vector<uint8_t>& dicomFile,
+                      const DicomMap& dicomSummary,
+                      const Json::Value& dicomJson,
+                      const std::string& remoteAet)
+  {
+    std::string instanceUuid;
+    if (dicomFile.size() > 0)
+    {
+      index_.Store(instanceUuid, storage_, 
+                   reinterpret_cast<const char*>(&dicomFile[0]), dicomFile.size(),
+                   dicomSummary, dicomJson, remoteAet);
+    }
+  }
+};
+
+
+class MyDicomStoreFactory : public IStoreRequestHandlerFactory
+{
+private:
+  ServerIndex& index_;
+  std::string path_;
+
+public:
+  MyDicomStoreFactory(ServerIndex& index,
+                      const std::string& path) :
+    index_(index),
+    path_(path)
+  {
+  }
+
+  virtual IStoreRequestHandler* ConstructStoreRequestHandler()
+  {
+    return new MyDicomStore(index_, path_);
+  }
+
+  void Done()
+  {
+    //index_.db().Execute("DELETE FROM Studies");
+  }
+};
+
+
+
+
+
+
+
+int main(int argc, char* argv[]) 
+{
+  try
+  {
+    if (argc >= 2)
+    {
+      PalanthirInitialize(argv[1]);
+    }
+    else
+    {
+      PalanthirInitialize();
+    }
+
+    std::string storageDirectory = GetGlobalStringParameter("StorageDirectory", "PalanthirStorage");
+    ServerIndex index(storageDirectory);
+    MyDicomStoreFactory storeScp(index, storageDirectory);
+
+    {
+      // DICOM server
+      DicomServer dicomServer;
+      dicomServer.SetCalledApplicationEntityTitleCheck(GetGlobalBoolParameter("DicomCheckCalledAet", false));
+      dicomServer.SetStoreRequestHandlerFactory(storeScp);
+      dicomServer.SetPortNumber(GetGlobalIntegerParameter("DicomPort", 4242));
+      dicomServer.SetApplicationEntityTitle(GetGlobalStringParameter("DicomAet", "PALANTHIR"));
+
+      // HTTP server
+      MongooseServer httpServer;
+      httpServer.SetPort(GetGlobalIntegerParameter("HttpPort", 8000));
+      httpServer.SetRemoteAccessAllowed(GetGlobalBoolParameter("RemoteAccessAllowed", false));
+
+      httpServer.SetAuthenticationEnabled(GetGlobalBoolParameter("AuthenticationEnabled", false));
+      SetupRegisteredUsers(httpServer);
+
+      if (GetGlobalBoolParameter("SslEnabled", false))
+      {
+        std::string certificate = GetGlobalStringParameter("SslCertificate", "certificate.pem");
+        httpServer.SetSslEnabled(true);
+        httpServer.SetSslCertificate(certificate.c_str());
+      }
+      else
+      {
+        httpServer.SetSslEnabled(false);
+      }
+
+#if PALANTHIR_STANDALONE == 1
+      httpServer.RegisterHandler(new EmbeddedResourceHttpHandler("/app", EmbeddedResources::PALANTHIR_EXPLORER));
+#else
+      httpServer.RegisterHandler(new FilesystemHttpHandler("/app", PALANTHIR_PATH "/PalanthirExplorer"));
+#endif
+
+      httpServer.RegisterHandler(new PalanthirRestApi(index, storageDirectory));
+
+      // GO !!!
+      httpServer.Start();
+      dicomServer.Start();
+
+      printf("The server has started\n");
+      Toolbox::ServerBarrier();
+
+      // Stop
+      printf("Finishing\n");
+    }
+
+    storeScp.Done();
+  }
+  catch (PalanthirException& e)
+  {
+    std::cout << "EXCEPT [" << e.What() << "]" << std::endl;
+  }
+
+  PalanthirFinalize();
+
+  return 0;
+}