Salome HOME
Driver command in ssl mode.
[modules/yacs.git] / src / yacsloader / driver.cxx
index 2a898e860d152367b62d799f86f4d3f37e163e2f..81919420e534e45f76d3fa0eea952709d3665d95 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2016  CEA/DEN, EDF R&D
+// Copyright (C) 2006-2021  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #include "Exception.hxx"
 #include "Executor.hxx"
 #include "parsers.hxx"
-#include "VisitorSaveState.hxx"
+#include "VisitorSalomeSaveState.hxx"
 #include "VisitorSaveSalomeSchema.hxx"
 #include "LoadState.hxx"
 #include "Dispatcher.hxx"
 #include "LinkInfo.hxx"
+#include "ObserverAsPlugin.hxx"
 
 #ifdef SALOME_KERNEL
+
+#include "KernelBasis.hxx"
+#include "SALOME_Launcher.hxx"
+#include "ServiceUnreachable.hxx"
+#include "SALOME_NamingService_Wrapper.hxx"
 #include "SALOME_NamingService.hxx"
 #include "SALOME_ModuleCatalog.hh"
 #include "Basics_Utils.hxx"
@@ -101,62 +107,6 @@ typedef struct {
   string lockFile;
 } thread_st;
 
-#ifndef WIN32
-#include <dlfcn.h>
-#include <stdlib.h>
-#endif
-
-std::string LoadedDriverPluginLibrary;
-void *HandleOnLoadedPlugin=0;
-void (*DefineCustomObservers)(YACS::ENGINE::Dispatcher *, YACS::ENGINE::ComposedNode *, YACS::ENGINE::Executor *)=0;
-void (*CleanUpObservers) ()=0;
-
-void LoadObserversPluginIfAny(YACS::ENGINE::ComposedNode *rootNode, YACS::ENGINE::Executor *executor)
-{
-  static const char SYMBOLE_NAME_1[]="DefineCustomObservers";
-  static const char SYMBOLE_NAME_2[]="CleanUpObservers";
-#ifndef WIN32
-  Dispatcher *disp(Dispatcher::getDispatcher());
-  if(!disp)
-    throw YACS::Exception("Internal error ! No dispatcher !");
-  char *yacsDriverPluginPath(getenv("YACS_DRIVER_PLUGIN_PATH"));
-  if(!yacsDriverPluginPath)
-    return ;
-  void *handle(dlopen(yacsDriverPluginPath, RTLD_LAZY | RTLD_GLOBAL));
-  if(!handle)
-    {
-      std::string message(dlerror());
-      std::ostringstream oss; oss << "Error during load of \"" << yacsDriverPluginPath << "\" defined by the YACS_DRIVER_PLUGIN_PATH env var : " << message;
-      throw YACS::Exception(oss.str());
-    }
-  DefineCustomObservers=(void (*)(YACS::ENGINE::Dispatcher *, YACS::ENGINE::ComposedNode *, YACS::ENGINE::Executor *))(dlsym(handle,SYMBOLE_NAME_1));
-  if(!DefineCustomObservers)
-    {
-      std::ostringstream oss; oss << "Error during load of \"" << yacsDriverPluginPath << "\" ! Library has been correctly loaded but symbol " << SYMBOLE_NAME_1 << " does not exists !";
-      throw YACS::Exception(oss.str());
-    }
-  CleanUpObservers=(void (*)())(dlsym(handle,SYMBOLE_NAME_2));
-  if(!CleanUpObservers)
-    {
-      std::ostringstream oss; oss << "Error during load of \"" << yacsDriverPluginPath << "\" ! Library has been correctly loaded but symbol " << SYMBOLE_NAME_2 << " does not exists !";
-      throw YACS::Exception(oss.str());
-    }
-  HandleOnLoadedPlugin=handle;
-  DefineCustomObservers(disp,rootNode,executor);
-#endif
-}
-
-void UnLoadObserversPluginIfAny()
-{
-#ifndef WIN32
-  if(HandleOnLoadedPlugin)
-    {
-      CleanUpObservers();
-      dlclose(HandleOnLoadedPlugin);
-    }
-#endif
-}
-
 #if defined WIN32 || defined __APPLE__
 static int
 #else
@@ -272,7 +222,7 @@ void Handler(int theSigId)
       bool isFinalDump = (strlen(myArgs.finalDump) != 0);
       if (isFinalDump)
         {
-          YACS::ENGINE::VisitorSaveState vst(p);
+          YACS::ENGINE::VisitorSalomeSaveState vst(p);
           vst.openFileDump(myArgs.finalDump);
           p->accept(&vst);
           vst.closeFileDump();
@@ -308,7 +258,7 @@ void * dumpState(void *arg)
 #endif
     string cmd = "touch " + st->lockFile;
     system(cmd.c_str());
-    YACS::ENGINE::VisitorSaveState vst(p);
+    YACS::ENGINE::VisitorSalomeSaveState vst(p);
     vst.openFileDump(st->dumpFile);
     p->accept(&vst);
     vst.closeFileDump();
@@ -349,6 +299,12 @@ bool parse_init_port(const std::string& input, std::string& node, std::string& p
   return true;
 }
 
+void InitializeSSL()
+{
+  setSSLMode(true);
+  KERNEL::getLauncherSA();
+}
+
 int main (int argc, char* argv[])
 {
      
@@ -394,6 +350,8 @@ int main (int argc, char* argv[])
   setsig(SIGTERM,&Handler);
 #endif
 
+  InitializeSSL();
+
   timer("Starting ");
   long flags = RuntimeSALOME::UsePython + RuntimeSALOME::UseCorba + RuntimeSALOME::UseXml + \
                RuntimeSALOME::UseCpp + RuntimeSALOME::UseSalome;
@@ -406,7 +364,8 @@ int main (int argc, char* argv[])
       CORBA::ORB_ptr orb = runTime->getOrb();
       if (orb)
         {
-          SALOME_NamingService namingService(orb);
+          SALOME_NamingService_Wrapper namingService(orb);
+          //SALOME_NamingService namingService(orb);
           CORBA::Object_var obj = namingService.Resolve("/Kernel/ModulCatalog");
           SALOME_ModuleCatalog::ModuleCatalog_var aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
           if (! CORBA::is_nil(aModuleCatalog))
@@ -565,7 +524,7 @@ int main (int argc, char* argv[])
           st->lockFile = rootFile + ".lock";
           pthread_create(&th,NULL,&dumpState,(void*)st);
         }
-      LoadObserversPluginIfAny(p,&executor);
+      YACS::ENGINE::LoadObserversPluginIfAny(p,&executor);
       cerr << "+++++++++++++++++++ start calculation +++++++++++++++++++" << endl;
       executor.RunW(p,myArgs.display, fromScratch);
       cerr << "+++++++++++++++++++  end calculation  +++++++++++++++++++" << endl;
@@ -600,7 +559,7 @@ int main (int argc, char* argv[])
       bool isFinalDump = (strlen(myArgs.finalDump) != 0);
       if (isFinalDump)
         {
-          YACS::ENGINE::VisitorSaveState vst(p);
+          YACS::ENGINE::VisitorSalomeSaveState vst(p);
           vst.openFileDump(myArgs.finalDump);
           p->accept(&vst);
           vst.closeFileDump();
@@ -615,7 +574,7 @@ int main (int argc, char* argv[])
       r->fini();
       delete r;
       delete disp;
-      UnLoadObserversPluginIfAny();
+      YACS::ENGINE::UnLoadObserversPluginIfAny();
       return return_value;
     }
   catch (YACS::Exception& e)