certi-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[certi-cvs] certi libRTI/ieee1516-2000/RTIambassadorFactory...


From: CERTI CVS commits
Subject: [certi-cvs] certi libRTI/ieee1516-2000/RTIambassadorFactory...
Date: Thu, 06 Mar 2014 16:11:33 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      14/03/06 16:11:33

Modified files:
        libRTI/ieee1516-2000: RTIambassadorFactory.cpp CMakeLists.txt 
        libRTI/ieee1516-2010: RTIvariableLengthData.cpp CMakeLists.txt 
                              HandleImplementation.cpp 
        libRTI         : CMakeLists.txt 
        include/ieee1516-2010/RTI: certiLogicalTimeInterval.h 
                                   certiLogicalTime.h 
                                   certiLogicalTimeFactory.h 
Added files:
        libRTI/ieee1516-2010: RTIambassador.cpp RTIambPrivateRefs.h 
                              RTIambassadorImplementation.cpp 
                              RTIambPrivateRefs.cpp RTIfedAmbassador.cpp 
                              RTIambassadorImplementation.h 
                              RTIambassadorFactory.cpp 

Log message:
        One more step towards IEEE-1516-2010 API not working yet

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2000/RTIambassadorFactory.cpp?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2000/CMakeLists.txt?cvsroot=certi&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIvariableLengthData.cpp?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/CMakeLists.txt?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/HandleImplementation.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassador.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambPrivateRefs.h?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassadorImplementation.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambPrivateRefs.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIfedAmbassador.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassadorImplementation.h?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/ieee1516-2010/RTIambassadorFactory.cpp?cvsroot=certi&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/CMakeLists.txt?cvsroot=certi&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/certi/include/ieee1516-2010/RTI/certiLogicalTimeInterval.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/include/ieee1516-2010/RTI/certiLogicalTime.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/include/ieee1516-2010/RTI/certiLogicalTimeFactory.h?cvsroot=certi&r1=1.1&r2=1.2

Patches:
Index: libRTI/ieee1516-2000/RTIambassadorFactory.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2000/RTIambassadorFactory.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- libRTI/ieee1516-2000/RTIambassadorFactory.cpp       6 Mar 2014 12:14:10 
-0000       1.2
+++ libRTI/ieee1516-2000/RTIambassadorFactory.cpp       6 Mar 2014 16:11:31 
-0000       1.3
@@ -1,4 +1,25 @@
-//#include "RTI/RTI1516.h"
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
 
 #include <RTI/RTIambassadorFactory.h>
 #include <memory>

Index: libRTI/ieee1516-2000/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2000/CMakeLists.txt,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- libRTI/ieee1516-2000/CMakeLists.txt 6 Mar 2014 12:14:10 -0000       1.4
+++ libRTI/ieee1516-2000/CMakeLists.txt 6 Mar 2014 16:11:31 -0000       1.5
@@ -7,7 +7,7 @@
 # This STATIC library is necessary on Windows in order
 # to avoid circular dependencies
 # FIXME
-#   may be we can use CMakeOBJECT library instead
+#   may be we can use CMake OBJECT library instead
 # FIXME
 ##########################################################
 if (WIN32)

Index: libRTI/ieee1516-2010/RTIvariableLengthData.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2010/RTIvariableLengthData.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- libRTI/ieee1516-2010/RTIvariableLengthData.cpp      6 Mar 2014 16:01:36 
-0000       1.2
+++ libRTI/ieee1516-2010/RTIvariableLengthData.cpp      6 Mar 2014 16:11:31 
-0000       1.3
@@ -96,6 +96,9 @@
        // Caller gives up ownership of inData to this object.
        // This object assumes the responsibility of deleting inData
        // when it is no longer needed.
+       // The allocation of inData is assumed to have been through an array
+       // alloctor (e.g., char* data = new char[20]. If the data was allocated
+       // in some other fashion, a deletion function must be supplied.
        void VariableLengthData::takeDataPointer(void* inData, unsigned long 
inSize, VariableLengthDataDeleteFunction func)
        {
                if (_impl == 0)

Index: libRTI/ieee1516-2010/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2010/CMakeLists.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/ieee1516-2010/CMakeLists.txt 3 Mar 2014 15:18:24 -0000       1.1
+++ libRTI/ieee1516-2010/CMakeLists.txt 6 Mar 2014 16:11:32 -0000       1.2
@@ -3,6 +3,152 @@
 include_directories(${CMAKE_BINARY_DIR}/include/ieee1516-2010)
 
 # TO BE CONTINUED
+##########################################################
+# VariableLengthData
+# This STATIC library is necessary on Windows in order
+# to avoid circular dependencies
+# FIXME
+#   may be we can use CMake OBJECT library instead
+# FIXME
+##########################################################
+if (WIN32)
+  set(VARDATA1516E_SRCS
+      RTIvariableLengthData.cpp
+      RTIvariableLengthDataImplementation.h
+      ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/VariableLengthData.h
+     )
+
+
+  add_library(VarData1516e STATIC ${VARDATA1516_SRCS})
+  target_link_libraries(VarData1516e)
+  set_target_properties(VarData1516e PROPERTIES PROJECT_LABEL LibVarData1516e)
+  set_target_properties(VarData1516e PROPERTIES COMPILE_FLAGS 
"-DRTI_DISABLE_WARNINGS -DSTATIC_RTI")
+  # There shouldn't be any def file for STATIC library since this is not a DLL
+  # Commenting out next line.
+  #if (MINGW)
+  #    set_target_properties(VarData1516 PROPERTIES LINK_FLAGS 
"-Wl,--output-def,${LIBRARY_OUTPUT_PATH}/libVarData1516.def")
+  #    install(FILES ${LIBRARY_OUTPUT_PATH}/libVarData1516.def
+  #            DESTINATION lib)
+  #endif (MINGW)
+  # There shouldn't be any SOVERSION as well
+  #set_target_properties(VarData1516 PROPERTIES VERSION 1.0.0 SOVERSION 1)
+  set(VarData1516eTarget "VarData1516e")
+else()
+  set(VarData1516eTarget "")
+endif (WIN32)
+
+##########################
+# RTI1516e
+##########################
+
+set(RTI1516e_LIB_SRCS
+    RTIambassadorFactory.cpp
+    Exception.cpp
+    RTIvariableLengthData.cpp
+    RTIvariableLengthDataImplementation.h
+    RTIambassador.cpp
+    RTIambassadorImplementation.cpp
+    RTIambassadorImplementation.h
+    RTIambPrivateRefs.cpp
+    RTIambPrivateRefs.h
+    Handle.cpp
+    HandleImplementation.cpp
+    HandleImplementation.h
+    RTIfedAmbassador.cpp
+    RTIHandleFactory.cpp
+    RTIHandleFactory.h
+   )
+
+set(RTI1516e_LIB_INCLUDE
+    ${CMAKE_BINARY_DIR}/include/hla-1_3/RTItypes.hh
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Enums.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Exception.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/FederateAmbassador.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Handle.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/LogicalTime.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/LogicalTimeFactory.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/LogicalTimeInterval.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/NullFederateAmbassador.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RangeBounds.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RTI1516.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RTIambassador.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/RTIambassadorFactory.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/SpecificConfig.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/Typedefs.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/VariableLengthData.h
+)
+
+add_library(RTI1516e ${RTI1516e_LIB_SRCS} ${RTI1516e_LIB_INCLUDE})
+# Incorrect line
+#target_link_libraries(RTI1516 CERTI)
+# Correct line
+target_link_libraries(RTI1516e CERTI FedTime1516)
+install(FILES RTI1516fedTime.h DESTINATION include/ieee1516-2010/RTI)
+message(STATUS "libRTI variant: HLA 1516")
+set_target_properties(RTI1516e PROPERTIES OUTPUT_NAME "RTI1516e")
+set_target_properties(RTI1516e PROPERTIES COMPILE_FLAGS "-DHLA13NG_LIBRTI 
-DRTI_DISABLE_WARNINGS -DBUILDING_RTI")
+set_target_properties(RTI1516e PROPERTIES VERSION 1.0.0 SOVERSION 1)
+if (MINGW)
+    set_target_properties(RTI1516e PROPERTIES LINK_FLAGS 
"-Wl,--output-def,${LIBRARY_OUTPUT_PATH}/libRTI1516e.def")
+    install(FILES ${LIBRARY_OUTPUT_PATH}/libRTI1516e.def DESTINATION lib)
+endif (MINGW)
+
+
+##########################################################
+set(FEDTIME1516_SRCS
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/certiLogicalTime.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/certiLogicalTimeInterval.h
+    ${CMAKE_SOURCE_DIR}/include/ieee1516-2010/RTI/certiLogicalTimeFactory.h
+    RTI1516fedTime.h
+    RTI1516fedTime.cpp
+   )
+
+if (BUILD_WITH_EXTRA_LOGICAL_TIME)
+   list(APPEND FEDTIME1516e_SRC
+        LogicalTimeDouble.h
+        LogicalTimeDouble.cpp
+        )
+endif(BUILD_WITH_EXTRA_LOGICAL_TIME)
+
+add_library(FedTime1516e ${FEDTIME1516_SRCS})
+# Correct line
+target_link_libraries(FedTime1516e ${VarData1516eTarget})
+# Incorrect line
+# (at least the dependency exists but we cannot specify that
+#  because we would generate a circular deps 
RTI1516e-->FedTime1516e-->RTI1516e)
+#target_link_libraries(FedTime1516e RTI1516e)
+
+set_target_properties(FedTime1516e PROPERTIES PROJECT_LABEL LibFedTime1516e)
+set_target_properties(FedTime1516e PROPERTIES COMPILE_FLAGS 
"-DBUILDING_FEDTIME -DRTI_DISABLE_WARNINGS -DSTATIC_RTI")
+
+if(MINGW)
+    set_target_properties(FedTime1516e PROPERTIES LINK_FLAGS 
"-Wl,--output-def,${LIBRARY_OUTPUT_PATH}/libFedTime1516.def")
+    install(FILES ${LIBRARY_OUTPUT_PATH}/libFedTime1516e.def
+            DESTINATION lib)
+endif(MINGW)
+
+set_target_properties(FedTime1516 PROPERTIES VERSION 1.0.0 SOVERSION 1)
+
+set(TestFedTime1516e_SRCS
+  TestFedTime.cc
+)
+
+#ADD_EXECUTABLE(TestFedTime1516 ${TestFedTime1516_SRCS})
+
+# TODO: Should link with RTI1516 lib, instead of base RTI lib
+#target_link_libraries(TestFedTime1516 FedTime1516 RTI1516)
+
+#ADD_TEST(TestLibFedTime1516 COMMAND $<TARGET_FILE:TestFedTime1516>)
+
+
+# Install rules for both libRTI156 and libFedTime1516
+install(TARGETS RTI1516e FedTime1516e ${VarData1516eTarget}
+        EXPORT CERTIDepends
+        RUNTIME DESTINATION bin
+        LIBRARY DESTINATION lib
+        ARCHIVE DESTINATION lib)
+
+
 
 # mimic install directory structure in the binary tree in order to ease the 
linking 
 # of builtin test (i.e. testFederate)

Index: libRTI/ieee1516-2010/HandleImplementation.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/ieee1516-2010/HandleImplementation.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/ieee1516-2010/HandleImplementation.cpp       3 Mar 2014 16:43:28 
-0000       1.1
+++ libRTI/ieee1516-2010/HandleImplementation.cpp       6 Mar 2014 16:11:32 
-0000       1.2
@@ -22,9 +22,10 @@
 // ----------------------------------------------------------------------------
 
 #include <RTI/Handle.h>
-#include <limits.h>
+#include <climits>
 #include <sstream>
 #include <cstring>
+#include <stdint.h>
 #include "HandleImplementation.h"
 
 namespace rti1516e
@@ -48,7 +49,7 @@
     }
 
     memcpy(&val, encodedValue.data(), size);
-    for(uint32_t i = 0; i < sizeof(val); i++)
+    for(::uint32_t i = 0; i < sizeof(val); i++)
     {
         buf[size-i-1] = (char) val & 0xFF;
         val = val >> 8;

Index: libRTI/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libRTI/CMakeLists.txt,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- libRTI/CMakeLists.txt       3 Mar 2014 15:18:20 -0000       1.32
+++ libRTI/CMakeLists.txt       6 Mar 2014 16:11:32 -0000       1.33
@@ -7,4 +7,4 @@
 # Process standard specific libRTI implementation
 add_subdirectory(hla-1_3)
 add_subdirectory(ieee1516-2000)
-add_subdirectory(ieee1516-2010)
\ No newline at end of file
+#add_subdirectory(ieee1516-2010)
\ No newline at end of file

Index: include/ieee1516-2010/RTI/certiLogicalTimeInterval.h
===================================================================
RCS file: 
/sources/certi/certi/include/ieee1516-2010/RTI/certiLogicalTimeInterval.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- include/ieee1516-2010/RTI/certiLogicalTimeInterval.h        3 Mar 2014 
16:43:28 -0000       1.1
+++ include/ieee1516-2010/RTI/certiLogicalTimeInterval.h        6 Mar 2014 
16:11:32 -0000       1.2
@@ -31,7 +31,7 @@
 // below. The encoded time classes are used to hold the arbitrary bit
 // representation of the logical time and logical time intervals.
 
-namespace rti1516
+namespace rti1516e
 {
   class LogicalTime;
 }
@@ -41,7 +41,7 @@
 #include <string>
 #include <RTI/VariableLengthData.h>
 
-namespace rti1516
+namespace rti1516e
 {
   class FEDTIME_EXPORT LogicalTimeInterval
   {

Index: include/ieee1516-2010/RTI/certiLogicalTime.h
===================================================================
RCS file: /sources/certi/certi/include/ieee1516-2010/RTI/certiLogicalTime.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- include/ieee1516-2010/RTI/certiLogicalTime.h        3 Mar 2014 16:43:29 
-0000       1.1
+++ include/ieee1516-2010/RTI/certiLogicalTime.h        6 Mar 2014 16:11:33 
-0000       1.2
@@ -32,7 +32,7 @@
 // encoded time classes are used to hold the arbitrary bit representation of 
the
 // logical time and logical time intervals.
 
-namespace rti1516
+namespace rti1516e
 {
   class LogicalTimeInterval;
 }
@@ -42,7 +42,7 @@
 #include <string>
 #include <RTI/VariableLengthData.h>
 
-namespace rti1516
+namespace rti1516e
 {
   class FEDTIME_EXPORT LogicalTime
   {

Index: include/ieee1516-2010/RTI/certiLogicalTimeFactory.h
===================================================================
RCS file: 
/sources/certi/certi/include/ieee1516-2010/RTI/certiLogicalTimeFactory.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- include/ieee1516-2010/RTI/certiLogicalTimeFactory.h 3 Mar 2014 16:43:29 
-0000       1.1
+++ include/ieee1516-2010/RTI/certiLogicalTimeFactory.h 6 Mar 2014 16:11:33 
-0000       1.2
@@ -25,7 +25,7 @@
 // ****************************************************************
 
 
-namespace rti1516
+namespace rti1516e
 {
   class LogicalTime;
   class LogicalTimeInterval;
@@ -52,7 +52,7 @@
 // obtain a LogicalTimeFactory for a federation, and then will use that 
factory to create
 // any instances of LogicalTime or LogicalTimeInterval that it needs.
 
-namespace rti1516
+namespace rti1516e
 {
   class FEDTIME_EXPORT LogicalTimeFactory
   {

Index: libRTI/ieee1516-2010/RTIambassador.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassador.cpp
diff -N libRTI/ieee1516-2010/RTIambassador.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassador.cpp      6 Mar 2014 16:11:31 -0000       
1.1
@@ -0,0 +1,35 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+
+#include <RTI/RTIambassador.h>
+
+namespace rti1516e
+{
+RTIambassador::RTIambassador() throw()
+{
+}
+
+RTIambassador::~RTIambassador()
+{
+}
+} // end namespace rti1516

Index: libRTI/ieee1516-2010/RTIambPrivateRefs.h
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambPrivateRefs.h
diff -N libRTI/ieee1516-2010/RTIambPrivateRefs.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambPrivateRefs.h    6 Mar 2014 16:11:31 -0000       
1.1
@@ -0,0 +1,62 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2005  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// $Id: RTIambPrivateRefs.h,v 1.1 2014/03/06 16:11:31 erk Exp $
+// ----------------------------------------------------------------------------
+
+#include <RTI/certiRTI1516.h>
+#include "Message.hh"
+#include "RootObject.hh"
+#include "MessageBuffer.hh"
+
+using namespace certi ;
+
+class RTI1516ambPrivateRefs
+{
+public:
+       RTI1516ambPrivateRefs();
+    ~RTI1516ambPrivateRefs();
+
+    void processException(Message *);
+    void executeService(Message *requete, Message *reponse);
+    void sendTickRequestStop();
+    void callFederateAmbassador(Message *msg) throw 
(rti1516::RTIinternalError);
+    void leave(const char *msg) throw (rti1516::RTIinternalError);
+
+#ifdef _WIN32
+         HANDLE        handle_RTIA;
+#else
+    pid_t pid_RTIA ; //!< pid associated with rtia fork (private).
+#endif
+
+    //! Federate Ambassador reference for module calls.
+    rti1516::FederateAmbassador *fed_amb ;
+
+    //! used to prevent reentrant calls (see tick() and executeService()).
+    bool is_reentrant ;
+
+    RootObject *_theRootObj ;
+
+    SocketUN *socketUn ;
+    MessageBuffer msgBufSend,msgBufReceive ;
+};
+
+// $Id: RTIambPrivateRefs.h,v 1.1 2014/03/06 16:11:31 erk Exp $

Index: libRTI/ieee1516-2010/RTIambassadorImplementation.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassadorImplementation.cpp
diff -N libRTI/ieee1516-2010/RTIambassadorImplementation.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassadorImplementation.cpp        6 Mar 2014 
16:11:31 -0000       1.1
@@ -0,0 +1,2872 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+
+#include "RTIambassadorImplementation.h"
+#include <RTI/RangeBounds.h>
+
+#ifndef _WIN32
+#include <cstdlib>
+#include <cstring>
+#endif
+
+#include "PrettyDebug.hh"
+
+#include "M_Classes.hh"
+#include "RTIHandleFactory.h"
+#include "RTI1516fedTime.h"
+
+#include <algorithm>
+
+namespace {
+
+static PrettyDebug D("LIBRTI", __FILE__);
+static PrettyDebug G("GENDOC",__FILE__) ;
+
+}
+
+namespace certi
+{
+/* Deletor Object */
+template <class T>
+struct Deletor {
+    void operator() (T* e) {delete e;};
+};
+
+/* Helper functions */
+template<typename T>
+void
+RTI1516ambassador::assignPHVMAndExecuteService(const 
rti1516e::ParameterHandleValueMap &PHVM, T &req, T &rep) {
+
+    req.setParametersSize(PHVM.size());
+    req.setValuesSize(PHVM.size());
+    uint32_t i = 0;
+    for ( rti1516e::ParameterHandleValueMap::const_iterator it = PHVM.begin(); 
it != PHVM.end(); it++, ++i)
+    {
+        
req.setParameters(rti1516e::ParameterHandleFriend::toCertiHandle(it->first),i);
+        certi::ParameterValue_t paramValue;
+        paramValue.resize(it->second.size());
+        memcpy(&(paramValue[0]), it->second.data(), it->second.size());
+        req.setValues(paramValue, i);
+    }
+    privateRefs->executeService(&req, &rep);
+}
+
+template<typename T>
+void
+RTI1516ambassador::assignAHVMAndExecuteService(const 
rti1516e::AttributeHandleValueMap &AHVM, T &req, T &rep) {
+
+    req.setAttributesSize(AHVM.size());
+    req.setValuesSize(AHVM.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleValueMap::const_iterator it = AHVM.begin(); 
it != AHVM.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(it->first),i);
+        certi::AttributeValue_t attrValue;
+        attrValue.resize(it->second.size());
+        memcpy(&(attrValue[0]), it->second.data(), it->second.size());
+        req.setValues(attrValue, i);
+    }
+    privateRefs->executeService(&req, &rep);
+}
+
+template<typename T>
+void
+RTI1516ambassador::assignAHSAndExecuteService(const 
rti1516e::AttributeHandleSet &AHS, T &req, T &rep) {
+    req.setAttributesSize(AHS.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = AHS.begin(); it != 
AHS.end(); it++, ++i)
+    {
+        certi::AttributeHandle certiHandle = 
rti1516e::AttributeHandleFriend::toCertiHandle(*it);
+        req.setAttributes(certiHandle,i);
+    }
+    privateRefs->executeService(&req, &rep);
+}
+
+std::string varLengthDataAsString(rti1516e::VariableLengthData varLengthData) {
+    std::string retVal( (char*)varLengthData.data(), varLengthData.size() );
+    return retVal;
+}
+
+certi::TransportType toCertiTransportationType(rti1516e::TransportationType 
theType) {
+    return (theType == rti1516e::RELIABLE) ? certi::RELIABLE : 
certi::BEST_EFFORT;
+}
+rti1516e::TransportationType toRTI1516TransportationType(certi::TransportType 
theType) {
+    return (theType == certi::RELIABLE) ? rti1516e::RELIABLE : 
rti1516e::BEST_EFFORT;
+}
+certi::OrderType toCertiOrderType(rti1516e::OrderType theType) {
+    return (theType == rti1516e::RECEIVE) ? certi::RECEIVE : certi::TIMESTAMP;
+}
+rti1516e::OrderType toRTI1516OrderType(certi::OrderType theType) {
+    return (theType == certi::RECEIVE) ? rti1516e::RECEIVE : 
rti1516e::TIMESTAMP;
+}
+/* end of Helper functions */
+
+
+RTI1516ambassador::RTI1516ambassador() throw()
+                       : privateRefs(0)
+{
+}
+
+RTI1516ambassador::~RTI1516ambassador()
+{
+    certi::M_Close_Connexion req, rep ;
+
+    G.Out(pdGendoc,"        ====>executeService CLOSE_CONNEXION");
+    privateRefs->executeService(&req, &rep);
+    // after the response is received, the privateRefs->socketUn must not be 
used
+
+    delete privateRefs;
+}
+
+// ----------------------------------------------------------------------------
+//! Generic callback evocation (CERTI extension).
+/*! Blocks up to "minimum" seconds until a callback delivery and then evokes a
+ *  single callback.
+ *  @return true if additional callbacks pending, false otherwise
+ */
+bool RTI1516ambassador::__tick_kernel(bool multiple, TickTime minimum, 
TickTime maximum)
+throw (rti1516e::SpecifiedSaveLabelDoesNotExist,
+       rti1516e::RTIinternalError)
+        {
+    M_Tick_Request vers_RTI;
+    std::auto_ptr<Message> vers_Fed(NULL);
+
+    // Request callback(s) from the local RTIA
+    vers_RTI.setMultiple(multiple);
+    vers_RTI.setMinTickTime(minimum);
+    vers_RTI.setMaxTickTime(maximum);
+
+    try {
+        vers_RTI.send(privateRefs->socketUn,privateRefs->msgBufSend);
+    }
+    catch (NetworkError &e) {
+        std::stringstream msg;
+        msg << "NetworkError in tick() while sending TICK_REQUEST: " << 
e._reason;
+        std::wstring message(msg.str().begin(), msg.str().end());
+        throw rti1516e::RTIinternalError(message);
+    }
+
+    // Read response(s) from the local RTIA until Message::TICK_REQUEST is 
received.
+    while (1) {
+        try {
+            vers_Fed.reset(M_Factory::receive(privateRefs->socketUn));
+        }
+        catch (NetworkError &e) {
+            std::stringstream msg;
+            msg << "NetworkError in tick() while receiving response: " << 
e._reason;
+            std::wstring message(msg.str().begin(), msg.str().end());
+            throw rti1516e::RTIinternalError(message);
+        }
+
+        // If the type is TICK_REQUEST, the __tick_kernel() has terminated.
+        if (vers_Fed->getMessageType() == Message::TICK_REQUEST) {
+            if (vers_Fed->getExceptionType() != e_NO_EXCEPTION) {
+                // tick() may only throw exceptions defined in the HLA standard
+                // the RTIA is responsible for sending 'allowed' exceptions 
only
+                privateRefs->processException(vers_Fed.get());
+            }
+            return static_cast<M_Tick_Request*>(vers_Fed.get())->getMultiple();
+        }
+
+        try {
+            // Otherwise, the RTI calls a FederateAmbassador service.
+            privateRefs->callFederateAmbassador(vers_Fed.get());
+        }
+        catch (RTIinternalError&) {
+            // RTIA awaits TICK_REQUEST_NEXT, terminate the tick() processing
+            privateRefs->sendTickRequestStop();
+            // ignore the response and re-throw the original exception
+            throw;
+        }
+
+        try {
+            // Request next callback from the RTIA
+            M_Tick_Request_Next tick_next;
+            tick_next.send(privateRefs->socketUn, privateRefs->msgBufSend);
+        }
+        catch (NetworkError &e) {
+            std::stringstream msg;
+            msg << "NetworkError in tick() while sending TICK_REQUEST_NEXT: " 
<< e._reason;
+
+            std::wstring message(msg.str().begin(), msg.str().end());
+            throw rti1516e::RTIinternalError(message);
+        }
+    } // while(1)
+    // should never be reached, this is there for calming down static code 
analysis
+    return false;
+}
+
+// 4.2
+void RTI1516ambassador::createFederationExecution
+(std::wstring const & federationExecutionName,
+        std::wstring const & fullPathNameToTheFDDfile,
+        std::wstring const & LogicalTimeImplementationName)
+throw (rti1516e::FederationExecutionAlreadyExists,
+        rti1516e::CouldNotOpenFDD,
+        rti1516e::ErrorReadingFDD,
+        rti1516e::CouldNotCreateLogicalTimeFactory,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    certi::M_Create_Federation_Execution req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::createFederationExecution");
+    std::string 
federationExecutionNameAsString(federationExecutionName.begin(), 
federationExecutionName.end());
+    req.setFederationName(federationExecutionNameAsString);
+
+    std::string 
fullPathNameToTheFDDfileAsString(fullPathNameToTheFDDfile.begin(), 
fullPathNameToTheFDDfile.end());
+    req.setFEDid(fullPathNameToTheFDDfileAsString);
+
+    /*#ifdef _WIN32
+               if(!stricmp(FED,executionName)) {
+               #else
+               if(!strcasecmp(FED,exeName)) {
+               #endif
+               }*/
+    G.Out(pdGendoc,"             ====>executeService 
CREATE_FEDERATION_EXECUTION");
+
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit RTI1516ambassador::createFederationExecution");
+
+    // TODO What to do with the 'logicalTimeImplementationName'? Can't find 
it's use in SISO-STD-004.1-2004
+    // Only exists in C++ interface.
+    // Ignored for now.
+        }
+
+// 4.3
+void RTI1516ambassador::destroyFederationExecution
+(std::wstring const & federationExecutionName)
+throw (rti1516e::FederatesCurrentlyJoined,
+        rti1516e::FederationExecutionDoesNotExist,
+        rti1516e::RTIinternalError)
+        {
+    M_Destroy_Federation_Execution req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::destroyFederationExecution");
+
+    std::string 
federationExecutionNameAsString(federationExecutionName.begin(), 
federationExecutionName.end());
+    req.setFederationName(federationExecutionNameAsString);
+
+    G.Out(pdGendoc,"        ====>executeService DESTROY_FEDERATION_EXECUTION");
+
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit RTI1516ambassador::destroyFederationExecution");
+        }
+
+// 4.4
+rti1516e::FederateHandle RTI1516ambassador::joinFederationExecution
+(std::wstring const & federateType,
+        std::wstring const & federationExecutionName,
+        rti1516e::FederateAmbassador & federateAmbassador)
+throw (rti1516e::FederateAlreadyExecutionMember,
+        rti1516e::FederationExecutionDoesNotExist,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::CouldNotCreateLogicalTimeFactory,
+        rti1516e::RTIinternalError)
+        {
+    M_Join_Federation_Execution req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::joinFederationExecution");
+
+    if ( &federateType == NULL || federateType.length() <= 0 ) {
+        throw rti1516e::RTIinternalError(L"Incorrect or empty federate name");
+    }
+    std::string federateTypeAsString(federateType.begin(), federateType.end());
+
+    if ( &federationExecutionName == NULL || federationExecutionName.length() 
<= 0 )
+        throw rti1516e::RTIinternalError(L"Incorrect or empty federation 
name");
+    std::string 
federationExecutionNameAsString(federationExecutionName.begin(), 
federationExecutionName.end());
+
+    privateRefs->fed_amb = &federateAmbassador ;
+
+    req.setFederateName(federateTypeAsString);
+    req.setFederationName(federationExecutionNameAsString);
+    G.Out(pdGendoc,"        ====>executeService JOIN_FEDERATION_EXECUTION");
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::joinFederationExecution");
+    PrettyDebug::setFederateName( 
"LibRTI::"+std::string(federateTypeAsString));
+
+    certi::FederateHandle certiFederateHandle = rep.getFederate();
+    rti1516e::FederateHandle rti1516FederateHandle = 
rti1516e::FederateHandleFriend::createRTI1516Handle(certiFederateHandle);
+
+    return rti1516FederateHandle;
+        }
+
+// 4.5
+void RTI1516ambassador::resignFederationExecution
+(rti1516e::ResignAction resignAction)
+throw (rti1516e::OwnershipAcquisitionPending,
+        rti1516e::FederateOwnsAttributes,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Resign_Federation_Execution req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::resignFederationExecution");
+    //req.setResignAction(static_cast<certi::ResignAction>(resignAction));
+    req.setResignAction(certi::DELETE_OBJECTS_AND_RELEASE_ATTRIBUTES);
+    G.Out(pdGendoc,"        ====>executeService RESIGN_FEDERATION_EXECUTION");
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit RTI1516ambassador::resignFederationExecution");
+        }
+
+// 4.6
+void RTI1516ambassador::registerFederationSynchronizationPoint
+(std::wstring const & label,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Register_Federation_Synchronization_Point req, rep ;
+
+    G.Out(pdGendoc,"enter 
RTI1516ambassador::registerFederationSynchronizationPoint for all federates");
+    std::string labelString(label.begin(), label.end());
+    req.setLabel(labelString);
+    // no federate set
+    req.setFederateSetSize(0);
+    if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+    {
+        throw rti1516e::RTIinternalError (L"Calling 
registerFederationSynchronizationPoint with Tag NULL");
+    }
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+    G.Out(pdGendoc,"        ====>executeService 
REGISTER_FEDERATION_SYNCHRONIZATION_POINT");
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit 
RTI1516ambassador::registerFederationSynchronizationPoint for all federates");
+        }
+
+void RTI1516ambassador::registerFederationSynchronizationPoint
+(std::wstring const & label,
+        rti1516e::VariableLengthData const & theUserSuppliedTag,
+        rti1516e::FederateHandleSet const & syncSet)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Register_Federation_Synchronization_Point req, rep ;
+
+    G.Out(pdGendoc,"enter 
RTI1516ambassador::registerFederationSynchronizationPoint for some federates");
+
+    std::string labelString(label.begin(), label.end());
+    req.setLabel(labelString);
+    if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+    {
+        throw rti1516e::RTIinternalError (L"Calling 
registerFederationSynchronizationPoint with Tag NULL");
+    }
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+    // Federate set exists but if size=0 (set empty)
+    // We have to send the size even if federate set size is 0
+    // (HLA 1.3 compliance to inform ALL federates)
+
+    req.setFederateSetSize(syncSet.size());
+
+    uint32_t i = 0;
+    for ( rti1516e::FederateHandleSet::const_iterator it = syncSet.begin(); it 
!= syncSet.end(); it++, ++i)
+    {
+        
req.setFederateSet(rti1516e::FederateHandleFriend::toCertiHandle(*it),i);
+    }
+
+    G.Out(pdGendoc,"        ====>executeService 
REGISTER_FEDERATION_SYNCHRONIZATION_POINT");
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit 
RTI1516ambassador::registerFederationSynchronizationPoint for some federates");
+        }
+
+// 4.9
+void RTI1516ambassador::synchronizationPointAchieved
+(std::wstring const & label)
+throw (rti1516e::SynchronizationPointLabelNotAnnounced,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Synchronization_Point_Achieved req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::synchronizationPointAchieved");
+
+    std::string labelString(label.begin(), label.end());
+    req.setLabel(labelString);
+
+    G.Out(pdGendoc,"        ====>executeService 
SYNCHRONIZATION_POINT_ACHIEVED");
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit  RTI1516ambassador::synchronizationPointAchieved");
+        }
+
+// 4.11
+void RTI1516ambassador::requestFederationSave
+(std::wstring const & label)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Request_Federation_Save req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::requestFederationSave without 
time");
+
+    std::string labelString(label.begin(), label.end());
+    req.setLabel(labelString);
+    G.Out(pdGendoc,"      ====>executeService REQUEST_FEDERATION_SAVE");
+
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::requestFederationSave without 
time");
+        }
+
+void RTI1516ambassador::requestFederationSave
+(std::wstring const & label,
+        rti1516e::LogicalTime const & theTime)
+throw (rti1516e::LogicalTimeAlreadyPassed,
+        rti1516e::InvalidLogicalTime,
+        rti1516e::FederateUnableToUseTime,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Request_Federation_Save req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::requestFederationSave with time");
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    std::string labelString(label.begin(), label.end());
+    req.setLabel(labelString);
+
+    G.Out(pdGendoc,"        ====>executeService REQUEST_FEDERATION_SAVE");
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit RTI1516ambassador::requestFederationSave with time");
+        }
+
+// 4.13
+void RTI1516ambassador::federateSaveBegun ()
+throw (rti1516e::SaveNotInitiated,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Federate_Save_Begun req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::federateSaveBegun");
+
+    G.Out(pdGendoc,"      ====>executeService FEDERATE_SAVE_BEGUN");
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit  RTI1516ambassador::federateSaveBegun");
+        }
+
+// 4.14
+void RTI1516ambassador::federateSaveComplete ()
+throw (rti1516e::FederateHasNotBegunSave,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Federate_Save_Complete req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::federateSaveComplete");
+    G.Out(pdGendoc,"      ====>executeService FEDERATE_SAVE_COMPLETE");
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::federateSaveComplete");
+        }
+
+void RTI1516ambassador::federateSaveNotComplete()
+throw (rti1516e::FederateHasNotBegunSave,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Federate_Save_Not_Complete req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::federateSaveNotComplete");
+    G.Out(pdGendoc,"      ====>executeService FEDERATE_SAVE_NOT_COMPLETE");
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit  RTI1516ambassador::federateSaveNotComplete");
+        }
+
+// 4.16
+void RTI1516ambassador::queryFederationSaveStatus ()
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 4.18
+void RTI1516ambassador::requestFederationRestore
+(std::wstring const & label)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Request_Federation_Restore req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::requestFederationRestore");
+    std::string labelString(label.begin(), label.end());
+    req.setLabel(labelString);
+    G.Out(pdGendoc,"      ====>executeService REQUEST_FEDERATION_RESTORE");
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::requestFederationRestore");
+        }
+
+// 4.22
+void RTI1516ambassador::federateRestoreComplete ()
+throw (rti1516e::RestoreNotRequested,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Federate_Restore_Complete req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::federateRestoreComplete");
+
+    G.Out(pdGendoc,"      ====>executeService FEDERATE_RESTORE_COMPLETE");
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::federateRestoreComplete");
+        }
+
+void RTI1516ambassador::federateRestoreNotComplete ()
+throw (rti1516e::RestoreNotRequested,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Federate_Restore_Not_Complete req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::federateRestoreNotComplete");
+    G.Out(pdGendoc,"      ====>executeService FEDERATE_RESTORE_NOT_COMPLETE");
+
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::federateRestoreNotComplete");
+        }
+
+// 4.24
+void RTI1516ambassador::queryFederationRestoreStatus ()
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+/////////////////////////////////////
+// Declaration Management Services //
+/////////////////////////////////////
+
+// 5.2
+void RTI1516ambassador::publishObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSet const & attributeList)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Publish_Object_Class req, rep ;
+    G.Out(pdGendoc,"enter RTI1516ambassador::publishObjectClass");
+
+    const certi::ObjectClassHandle objectClassHandle =  
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+    req.setObjectClass(objectClassHandle);
+
+    req.setAttributesSize(attributeList.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
attributeList.begin(); it != attributeList.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+    G.Out(pdGendoc,"      ====>executeService PUBLISH_OBJECT_CLASS");
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::publishObjectClass");
+        }
+
+// 5.3
+void RTI1516ambassador::unpublishObjectClass
+(rti1516e::ObjectClassHandle theClass)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::OwnershipAcquisitionPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Unpublish_Object_Class req, rep ;
+    G.Out(pdGendoc,"enter RTI1516ambassador::unpublishObjectClass");
+
+    const certi::ObjectClassHandle objectClassHandle = 
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+    req.setObjectClass(objectClassHandle);
+    G.Out(pdGendoc,"      ====>executeService UNPUBLISH_OBJECT_CLASS");
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::unpublishObjectClass");
+        }
+
+void RTI1516ambassador::unpublishObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSet const & attributeList)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::OwnershipAcquisitionPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 5.4
+void RTI1516ambassador::publishInteractionClass
+(rti1516e::InteractionClassHandle theInteraction)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Publish_Interaction_Class req, rep ;
+    const certi::InteractionClassHandle classHandle = 
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+    req.setInteractionClass(classHandle);
+    G.Out(pdGendoc,"      ====>executeService PUBLISH_INTERACTION_CLASS");
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 5.5
+void RTI1516ambassador::unpublishInteractionClass
+(rti1516e::InteractionClassHandle theInteraction)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Unpublish_Interaction_Class req, rep ;
+    const certi::InteractionClassHandle classHandle = 
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+    req.setInteractionClass(classHandle);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 5.6
+void RTI1516ambassador::subscribeObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSet const & attributeList,
+        bool active)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Subscribe_Object_Class_Attributes req, rep ;
+    G.Out(pdGendoc,"enter RTI1516ambassador::subscribeObjectClassAttributes");
+
+    const certi::ObjectClassHandle objectClassHandle = 
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+    req.setObjectClass(objectClassHandle);
+
+    req.setAttributesSize(attributeList.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
attributeList.begin(); it != attributeList.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+    req.setActive(active);
+
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  RTI1516ambassador::subscribeObjectClassAttributes");
+        }
+
+// 5.7
+void RTI1516ambassador::unsubscribeObjectClass
+(rti1516e::ObjectClassHandle theClass)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Unsubscribe_Object_Class req, rep ;
+
+    const certi::ObjectClassHandle objectClassHandle = 
rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass);
+    req.setObjectClass(objectClassHandle);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+void RTI1516ambassador::unsubscribeObjectClassAttributes
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSet const & attributeList)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 5.8
+void RTI1516ambassador::subscribeInteractionClass
+(rti1516e::InteractionClassHandle theClass,
+        bool active)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Subscribe_Interaction_Class req, rep ;
+    const certi::InteractionClassHandle classHandle = 
rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass);
+    req.setInteractionClass(classHandle);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 5.9
+void RTI1516ambassador::unsubscribeInteractionClass
+(rti1516e::InteractionClassHandle theClass)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Unsubscribe_Interaction_Class req, rep ;
+
+    const certi::InteractionClassHandle classHandle = 
rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass);
+    req.setInteractionClass(classHandle);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+////////////////////////////////
+// Object Management Services //
+////////////////////////////////
+
+// 6.2
+void RTI1516ambassador::reserveObjectInstanceName
+(std::wstring const & theObjectInstanceName)
+throw (rti1516e::IllegalName,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Reserve_Object_Instance_Name req, rep;
+
+    std::string objInstanceName(theObjectInstanceName.begin(), 
theObjectInstanceName.end());
+    req.setObjectName(objInstanceName);
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 6.4
+rti1516e::ObjectInstanceHandle RTI1516ambassador::registerObjectInstance
+(rti1516e::ObjectClassHandle theClass)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::ObjectClassNotPublished,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Register_Object_Instance req, rep ;
+
+    
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+    privateRefs->executeService(&req, &rep);
+    return 
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(rep.getObject());
+        }
+
+rti1516e::ObjectInstanceHandle RTI1516ambassador::registerObjectInstance
+(rti1516e::ObjectClassHandle theClass,
+        std::wstring const & theObjectInstanceName)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::ObjectClassNotPublished,
+        rti1516e::ObjectInstanceNameNotReserved,
+        rti1516e::ObjectInstanceNameInUse,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Register_Object_Instance req, rep ;
+
+    std::string nameString(theObjectInstanceName.begin(), 
theObjectInstanceName.end());
+    req.setObjectName(nameString);
+    
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+    privateRefs->executeService(&req, &rep);
+
+    return 
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(rep.getObject());
+        }
+
+// 6.6
+void RTI1516ambassador::updateAttributeValues
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleValueMap const & theAttributeValues,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    G.Out(pdGendoc,"enter RTI1516ambassador::updateAttributeValues without 
time");
+    M_Update_Attribute_Values req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+    {
+        throw rti1516e::RTIinternalError(L"Calling updateAttributeValues with 
Tag NULL");
+    }
+
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+    assignAHVMAndExecuteService(theAttributeValues, req, rep);
+
+    G.Out(pdGendoc,"exit  RTI1516ambassador::updateAttributeValues without 
time");
+        }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::updateAttributeValues
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleValueMap const & theAttributeValues,
+        rti1516e::VariableLengthData const & theUserSuppliedTag,
+        rti1516e::LogicalTime const & theTime)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::InvalidLogicalTime,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    G.Out(pdGendoc,"enter RTI1516ambassador::updateAttributeValues with time");
+    M_Update_Attribute_Values req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+    {
+        throw rti1516e::RTIinternalError(L"Calling updateAttributeValues with 
Tag NULL");
+    }
+
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+    assignAHVMAndExecuteService(theAttributeValues, req, rep);
+
+    G.Out(pdGendoc,"return  RTI1516ambassador::updateAttributeValues with 
time");
+    certi::FederateHandle certiHandle = 
rep.getEventRetraction().getSendingFederate();
+    uint64_t serialNum = rep.getEventRetraction().getSN();
+    return 
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, 
serialNum);
+        }
+
+// 6.8
+void RTI1516ambassador::sendInteraction
+(rti1516e::InteractionClassHandle theInteraction,
+        rti1516e::ParameterHandleValueMap const & theParameterValues,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::InteractionClassNotPublished,
+        rti1516e::InteractionClassNotDefined,
+        rti1516e::InteractionParameterNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Send_Interaction req, rep ;
+
+    const certi::InteractionClassHandle classHandle = 
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+    req.setInteractionClass(classHandle);
+
+    if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+    {
+        throw rti1516e::RTIinternalError (L"Calling sendIntercation with Tag 
NULL") ;
+    }
+
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+    req.setRegion(0);
+
+    assignPHVMAndExecuteService(theParameterValues, req, rep);
+        }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::sendInteraction
+(rti1516e::InteractionClassHandle theInteraction,
+        rti1516e::ParameterHandleValueMap const & theParameterValues,
+        rti1516e::VariableLengthData const & theUserSuppliedTag,
+        rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InteractionClassNotPublished,
+        rti1516e::InteractionClassNotDefined,
+        rti1516e::InteractionParameterNotDefined,
+        rti1516e::InvalidLogicalTime,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Send_Interaction req, rep ;
+
+    const certi::InteractionClassHandle classHandle = 
rti1516e::InteractionClassHandleFriend::toCertiHandle(theInteraction);
+    req.setInteractionClass(classHandle);
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL ) {
+        throw rti1516e::RTIinternalError(L"Calling sendInteraction with Tag 
NULL") ;
+    }
+
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+    req.setRegion(0);
+
+    assignPHVMAndExecuteService(theParameterValues, req, rep);
+
+    certi::FederateHandle certiHandle = 
rep.getEventRetraction().getSendingFederate();
+    uint64_t serialNr = rep.getEventRetraction().getSN();
+    rti1516e::MessageRetractionHandle rti1516handle = 
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, 
serialNr);
+
+    return rti1516handle;
+        }
+
+// 6.10
+void RTI1516ambassador::deleteObjectInstance
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::DeletePrivilegeNotHeld,
+        rti1516e::ObjectInstanceNotKnown,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Delete_Object_Instance req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+    {
+        throw rti1516e::RTIinternalError(L"Calling deleteObjectInstance with 
Tag NULL") ;
+    }
+
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::deleteObjectInstance
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::VariableLengthData const & theUserSuppliedTag,
+        rti1516e::LogicalTime  const & theTime)
+throw (rti1516e::DeletePrivilegeNotHeld,
+        rti1516e::ObjectInstanceNotKnown,
+        rti1516e::InvalidLogicalTime,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Delete_Object_Instance req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    if ( &theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL)
+    {
+        throw rti1516e::RTIinternalError(L"Calling deleteObjectInstance with 
Tag NULL") ;
+    }
+
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+    privateRefs->executeService(&req, &rep);
+
+    certi::FederateHandle certiHandle = 
rep.getEventRetraction().getSendingFederate();
+    uint64_t serialNum = rep.getEventRetraction().getSN();
+    return 
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, 
serialNum);
+        }
+
+// 6.12
+void RTI1516ambassador::localDeleteObjectInstance
+(rti1516e::ObjectInstanceHandle theObject)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::FederateOwnsAttributes,
+        rti1516e::OwnershipAcquisitionPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    throw rti1516e::RTIinternalError(L"unimplemented service 
localDeleteObjectInstance");
+    M_Local_Delete_Object_Instance req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 6.13
+void RTI1516ambassador::changeAttributeTransportationType
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes,
+        rti1516e::TransportationType theType)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Change_Attribute_Transportation_Type req, rep ;
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    req.setTransportationType(toCertiTransportationType(theType));
+
+    req.setAttributesSize(theAttributes.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 6.14
+void RTI1516ambassador::changeInteractionTransportationType
+(rti1516e::InteractionClassHandle theClass,
+        rti1516e::TransportationType theType)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::InteractionClassNotPublished,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Change_Interaction_Transportation_Type req, rep ;
+
+    
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass));
+    req.setTransportationType(toCertiTransportationType(theType));
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 6.17
+void RTI1516ambassador::requestAttributeValueUpdate
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Request_Object_Attribute_Value_Update req, rep ;
+
+    G.Out(pdGendoc,"enter 
RTI1516ambassador::requestObjectAttributeValueUpdate");
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    size_t attr_num = theAttributes.size();
+    req.setAttributesSize( attr_num );
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
theAttributes.begin(); i < attr_num; ++it, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+    req.setTag(varLengthDataAsString(theUserSuppliedTag));
+
+    privateRefs->executeService(&req, &rep);
+    G.Out(pdGendoc,"exit  
RTI1516ambassador::requestObjectAttributeValueUpdate");
+        }
+
+void RTI1516ambassador::requestAttributeValueUpdate
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSet const & theAttributes,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Request_Class_Attribute_Value_Update req, rep ;
+    G.Out(pdGendoc,"enter 
RTI1516ambassador::requestClassAttributeValueUpdate");
+    
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+
+    assignAHSAndExecuteService(theAttributes, req, rep);
+
+    G.Out(pdGendoc,"exit RTI1516ambassador::requestClassAttributeValueUpdate");
+        }
+
+///////////////////////////////////
+// Ownership Management Services //
+///////////////////////////////////
+// 7.2
+void RTI1516ambassador::unconditionalAttributeOwnershipDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Unconditional_Attribute_Ownership_Divestiture req, rep ;
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    req.setAttributesSize(theAttributes.size());
+    uint32_t i=0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 7.3
+void RTI1516ambassador::negotiatedAttributeOwnershipDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::AttributeAlreadyBeingDivested,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Negotiated_Attribute_Ownership_Divestiture req, rep ;
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL) {
+        throw rti1516e::RTIinternalError (L"Calling 
negotiatedAttributeOwnershipDivestiture with Tag NULL") ;
+    }
+    req.setTag(certi::varLengthDataAsString(theUserSuppliedTag));
+
+    req.setAttributesSize(theAttributes.size());
+    uint32_t i=0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 7.6
+void RTI1516ambassador::confirmDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & confirmedAttributes,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::AttributeDivestitureWasNotRequested,
+        rti1516e::NoAcquisitionPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 7.8
+void RTI1516ambassador::attributeOwnershipAcquisition
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & desiredAttributes,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::ObjectClassNotPublished,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotPublished,
+        rti1516e::FederateOwnsAttributes,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Attribute_Ownership_Acquisition req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    if (&theUserSuppliedTag == NULL || theUserSuppliedTag.data() == NULL )
+    {
+        throw rti1516e::RTIinternalError (L"Calling 
attributeOwnershipAcquisition with Tag NULL") ;
+    }
+    req.setTag(certi::varLengthDataAsString(theUserSuppliedTag));
+
+    req.setAttributesSize(desiredAttributes.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
desiredAttributes.begin(); it != desiredAttributes.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 7.9
+void RTI1516ambassador::attributeOwnershipAcquisitionIfAvailable
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & desiredAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::ObjectClassNotPublished,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotPublished,
+        rti1516e::FederateOwnsAttributes,
+        rti1516e::AttributeAlreadyBeingAcquired,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Attribute_Ownership_Acquisition_If_Available req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    req.setAttributesSize(desiredAttributes.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
desiredAttributes.begin(); it != desiredAttributes.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 7.12 (in RTI1.3 this function is called: AttributeOwnershipReleaseResponse)
+void RTI1516ambassador::attributeOwnershipDivestitureIfWanted
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes,
+        rti1516e::AttributeHandleSet & theDivestedAttributes) // filled by RTI
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Attribute_Ownership_Release_Response req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    assignAHSAndExecuteService(theAttributes, req, rep);
+
+    if (rep.getExceptionType() == e_NO_EXCEPTION) {
+        theDivestedAttributes.clear();
+        for (uint32_t i=0;i<rep.getAttributesSize();++i) {
+            
theDivestedAttributes.insert(rti1516e::AttributeHandleFriend::createRTI1516Handle(rep.getAttributes()[i]));
+        }
+    }
+
+        }
+
+// 7.13
+void RTI1516ambassador::cancelNegotiatedAttributeOwnershipDivestiture
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::AttributeDivestitureWasNotRequested,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Cancel_Negotiated_Attribute_Ownership_Divestiture req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    req.setAttributesSize(theAttributes.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 7.14
+void RTI1516ambassador::cancelAttributeOwnershipAcquisition
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeAlreadyOwned,
+        rti1516e::AttributeAcquisitionWasNotRequested,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Cancel_Attribute_Ownership_Acquisition req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+
+    req.setAttributesSize(theAttributes.size());
+    uint32_t i = 0;
+    for ( rti1516e::AttributeHandleSet::const_iterator it = 
theAttributes.begin(); it != theAttributes.end(); it++, ++i)
+    {
+        
req.setAttributes(rti1516e::AttributeHandleFriend::toCertiHandle(*it),i);
+    }
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 7.16
+void RTI1516ambassador::queryAttributeOwnership
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandle theAttribute)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Query_Attribute_Ownership req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theAttribute));
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 7.18
+bool RTI1516ambassador::isAttributeOwnedByFederate
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandle theAttribute)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Is_Attribute_Owned_By_Federate req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theAttribute));
+
+    privateRefs->executeService(&req, &rep);
+
+    return (rep.getTag() == "RTI_TRUE") ? true : false;
+        }
+
+//////////////////////////////
+// Time Management Services //
+//////////////////////////////
+
+// 8.2
+void RTI1516ambassador::enableTimeRegulation
+(rti1516e::LogicalTimeInterval const & theLookahead)
+throw (rti1516e::TimeRegulationAlreadyEnabled,
+        rti1516e::InvalidLookahead,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::RequestForTimeRegulationPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Enable_Time_Regulation req, rep ;
+
+    //req.setDate(certi_cast<RTIfedTime>()(theFederateTime).getTime());  
//JRE: DATE IS NOT USED!
+
+    //JRE: is dit wel goed?
+    //JvY: TODO Controleren of dit blijft werken met andere tijdsimplementaties
+    union ud {
+        double   dv;
+        uint64_t uv;
+    } value;
+#ifdef HOST_IS_BIG_ENDIAN
+    memcpy(&(value.uv), theLookahead.encode().data(), sizeof(double));
+#else
+    value.uv = CERTI_DECODE_DOUBLE_FROM_UINT64BE(theLookahead.encode().data());
+#endif
+    double lookAheadTime = value.dv;
+    req.setLookahead(lookAheadTime);
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.4
+void RTI1516ambassador::disableTimeRegulation ()
+throw (rti1516e::TimeRegulationIsNotEnabled,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Disable_Time_Regulation req, rep ;
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.5
+void RTI1516ambassador::enableTimeConstrained ()
+throw (rti1516e::TimeConstrainedAlreadyEnabled,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::RequestForTimeConstrainedPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Enable_Time_Constrained req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.7
+void RTI1516ambassador::disableTimeConstrained ()
+throw (rti1516e::TimeConstrainedIsNotEnabled,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Disable_Time_Constrained req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.8
+void RTI1516ambassador::timeAdvanceRequest
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+        rti1516e::LogicalTimeAlreadyPassed,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::RequestForTimeRegulationPending,
+        rti1516e::RequestForTimeConstrainedPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Time_Advance_Request req, rep ;
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.9
+void RTI1516ambassador::timeAdvanceRequestAvailable
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+        rti1516e::LogicalTimeAlreadyPassed,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::RequestForTimeRegulationPending,
+        rti1516e::RequestForTimeConstrainedPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Time_Advance_Request_Available req, rep ;
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.10
+void RTI1516ambassador::nextMessageRequest
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+        rti1516e::LogicalTimeAlreadyPassed,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::RequestForTimeRegulationPending,
+        rti1516e::RequestForTimeConstrainedPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Next_Event_Request req, rep ;
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.11
+void RTI1516ambassador::nextMessageRequestAvailable
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+        rti1516e::LogicalTimeAlreadyPassed,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::RequestForTimeRegulationPending,
+        rti1516e::RequestForTimeConstrainedPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Next_Event_Request_Available req, rep ;
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.12
+void RTI1516ambassador::flushQueueRequest
+(rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InvalidLogicalTime,
+        rti1516e::LogicalTimeAlreadyPassed,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::RequestForTimeRegulationPending,
+        rti1516e::RequestForTimeConstrainedPending,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    // JvY: Implementation copied from previous CERTI implementation, 
including immediate throw.
+    throw rti1516e::RTIinternalError(L"Unimplemented Service 
flushQueueRequest");
+    M_Flush_Queue_Request req, rep ;
+
+    certi::FederationTime 
certiFedTime(certi_cast<RTI1516fedTime>()(theTime).getFedTime());
+    req.setDate(certiFedTime);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.14
+void RTI1516ambassador::enableAsynchronousDelivery ()
+throw (rti1516e::AsynchronousDeliveryAlreadyEnabled,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    // throw AsynchronousDeliveryAlreadyEnabled("Default value (non HLA)");
+
+    M_Enable_Asynchronous_Delivery req, rep ;
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.15
+void RTI1516ambassador::disableAsynchronousDelivery ()
+throw (rti1516e::AsynchronousDeliveryAlreadyDisabled,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Disable_Asynchronous_Delivery req, rep ;
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.16
+bool RTI1516ambassador::queryGALT (rti1516e::LogicalTime & theTime)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    //TODO JRE: goed testen! Is GALT wel precies het zelfde als LBTS?
+    M_Query_Lbts req, rep ;
+
+    privateRefs->executeService(&req, &rep);
+
+    //TODO JRE: goed testen of deze return value wel klopt!
+    certi::FederationTime fedTime = rep.getDate();
+    if (fedTime.getTime() == 0.0) {
+        return false;
+    }
+
+    // JvY: TODO Controleren of dit blijft werken met andere 
tijdsimplementaties
+    certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
+
+    return true;
+        }
+
+// 8.17
+void RTI1516ambassador::queryLogicalTime (rti1516e::LogicalTime & theTime)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Query_Federate_Time req, rep ;
+
+    privateRefs->executeService(&req, &rep);
+
+    // JvY: TODO Controleren of dit blijft werken met andere 
tijdsimplementaties
+    certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
+        }
+
+// 8.18
+bool RTI1516ambassador::queryLITS (rti1516e::LogicalTime & theTime)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    //TODO JRE: goed testen! Is LITS wel precies het zelfde als 
QueryMinNextEventTime?
+    M_Query_Min_Next_Event_Time req, rep ;
+
+    privateRefs->executeService(&req, &rep);
+
+    //TODO JRE: goed testen of deze return value wel klopt!
+    certi::FederationTime fedTime = rep.getDate();
+    if (fedTime.getTime() == 0.0) {
+        return false;
+    }
+    // JvY: TODO Controleren of dit blijft werken met andere 
tijdsimplementaties
+    certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
+
+    return true;
+        }
+
+// 8.19
+void RTI1516ambassador::modifyLookahead
+(rti1516e::LogicalTimeInterval const & theLookahead)
+throw (rti1516e::TimeRegulationIsNotEnabled,
+        rti1516e::InvalidLookahead,
+        rti1516e::InTimeAdvancingState,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 8.20
+void RTI1516ambassador::queryLookahead (rti1516e::LogicalTimeInterval & 
interval)
+throw (rti1516e::TimeRegulationIsNotEnabled,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 8.21
+void RTI1516ambassador::retract
+(rti1516e::MessageRetractionHandle theHandle)
+throw (rti1516e::InvalidRetractionHandle,
+        rti1516e::TimeRegulationIsNotEnabled,
+        rti1516e::MessageCanNoLongerBeRetracted,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    throw rti1516e::RTIinternalError(L"Unimplemented Service retract");
+    M_Retract req, rep ;
+
+    certi::EventRetraction event = 
rti1516e::MessageRetractionHandleFriend::createEventRetraction(theHandle);
+    req.setEventRetraction(event);
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 8.23
+void RTI1516ambassador::changeAttributeOrderType
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSet const & theAttributes,
+        rti1516e::OrderType theType)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotOwned,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Change_Attribute_Order_Type req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    req.setOrder(certi::toCertiOrderType(theType));
+
+    assignAHSAndExecuteService(theAttributes, req, rep);
+        }
+
+// 8.24
+void RTI1516ambassador::changeInteractionOrderType
+(rti1516e::InteractionClassHandle theClass,
+        rti1516e::OrderType theType)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::InteractionClassNotPublished,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Change_Interaction_Order_Type req, rep ;
+
+    
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass));
+    req.setOrder(certi::toCertiOrderType(theType));
+
+    privateRefs->executeService(&req, &rep);
+        }
+
+//////////////////////////////////
+// Data Distribution Management //
+//////////////////////////////////
+
+// 9.2
+rti1516e::RegionHandle RTI1516ambassador::createRegion
+(rti1516e::DimensionHandleSet const & theDimensions)
+throw (rti1516e::InvalidDimensionHandle,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.3
+void RTI1516ambassador::commitRegionModifications
+(rti1516e::RegionHandleSet const & theRegionHandleSet)
+throw (rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.4
+void RTI1516ambassador::deleteRegion
+(rti1516e::RegionHandle theRegion)
+throw (rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::RegionInUseForUpdateOrSubscription,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.5
+rti1516e::ObjectInstanceHandle 
RTI1516ambassador::registerObjectInstanceWithRegions
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+        theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::ObjectClassNotPublished,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotPublished,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+rti1516e::ObjectInstanceHandle 
RTI1516ambassador::registerObjectInstanceWithRegions
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+        theAttributeHandleSetRegionHandleSetPairVector,
+        std::wstring const & theObjectInstanceName)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::ObjectClassNotPublished,
+        rti1516e::AttributeNotDefined,
+        rti1516e::AttributeNotPublished,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::ObjectInstanceNameNotReserved,
+        rti1516e::ObjectInstanceNameInUse,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.6
+void RTI1516ambassador::associateRegionsForUpdates
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+        theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.7
+void RTI1516ambassador::unassociateRegionsForUpdates
+(rti1516e::ObjectInstanceHandle theObject,
+        rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+        theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::AttributeNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.8
+void RTI1516ambassador::subscribeObjectClassAttributesWithRegions
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+        theAttributeHandleSetRegionHandleSetPairVector,
+        bool active)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.9
+void RTI1516ambassador::unsubscribeObjectClassAttributesWithRegions
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+        theAttributeHandleSetRegionHandleSetPairVector)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.10
+void RTI1516ambassador::subscribeInteractionClassWithRegions
+(rti1516e::InteractionClassHandle theClass,
+        rti1516e::RegionHandleSet const & theRegionHandleSet,
+        bool active)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.11
+void RTI1516ambassador::unsubscribeInteractionClassWithRegions
+(rti1516e::InteractionClassHandle theClass,
+        rti1516e::RegionHandleSet const & theRegionHandleSet)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.12
+void RTI1516ambassador::sendInteractionWithRegions
+(rti1516e::InteractionClassHandle theInteraction,
+        rti1516e::ParameterHandleValueMap const & theParameterValues,
+        rti1516e::RegionHandleSet const & theRegionHandleSet,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::InteractionClassNotPublished,
+        rti1516e::InteractionParameterNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+rti1516e::MessageRetractionHandle RTI1516ambassador::sendInteractionWithRegions
+(rti1516e::InteractionClassHandle theInteraction,
+        rti1516e::ParameterHandleValueMap const & theParameterValues,
+        rti1516e::RegionHandleSet const & theRegionHandleSet,
+        rti1516e::VariableLengthData const & theUserSuppliedTag,
+        rti1516e::LogicalTime const & theTime)
+throw (rti1516e::InteractionClassNotDefined,
+        rti1516e::InteractionClassNotPublished,
+        rti1516e::InteractionParameterNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::InvalidLogicalTime,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 9.13
+void RTI1516ambassador::requestAttributeValueUpdateWithRegions
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandleSetRegionHandleSetPairVector const & theSet,
+        rti1516e::VariableLengthData const & theUserSuppliedTag)
+throw (rti1516e::ObjectClassNotDefined,
+        rti1516e::AttributeNotDefined,
+        rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::InvalidRegionContext,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+//////////////////////////
+// RTI Support Services //
+//////////////////////////
+
+// 10.2
+rti1516e::ObjectClassHandle RTI1516ambassador::getObjectClassHandle
+(std::wstring const & theName)
+throw (rti1516e::NameNotFound,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Object_Class_Handle req, rep ;
+
+    G.Out(pdGendoc,"enter RTI1516ambassador::getObjectClassHandle");
+
+    std::string nameAsString(theName.begin(), theName.end());
+    req.setClassName(nameAsString);
+    privateRefs->executeService(&req, &rep);
+
+    G.Out(pdGendoc,"exit RTI1516ambassador::getObjectClassHandle");
+    rti1516e::ObjectClassHandle rti1516Handle = 
rti1516e::ObjectClassHandleFriend::createRTI1516Handle(rep.getObjectClass());
+
+    return rti1516Handle;
+        }
+
+// 10.3
+std::wstring RTI1516ambassador::getObjectClassName
+(rti1516e::ObjectClassHandle theHandle)
+throw (rti1516e::InvalidObjectClassHandle,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Object_Class_Name req, rep ;
+
+    certi::ObjectClassHandle certiHandle = 
rti1516e::ObjectClassHandleFriend::toCertiHandle(theHandle);
+    req.setObjectClass(certiHandle);
+    try {
+        privateRefs->executeService(&req, &rep);
+    } catch (rti1516e::ObjectClassNotDefined &e)
+    {
+        throw rti1516e::InvalidObjectClassHandle(e.what());
+    }
+
+    std::string nameString = rep.getClassName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    //return hla_strdup(rep.getClassName());
+    return nameWString;
+        }
+
+// 10.4
+rti1516e::AttributeHandle RTI1516ambassador::getAttributeHandle
+(rti1516e::ObjectClassHandle whichClass,
+        std::wstring const & theAttributeName)
+throw (rti1516e::InvalidObjectClassHandle,
+        rti1516e::NameNotFound,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    G.Out(pdGendoc,"enter RTI::RTI1516ambassador::getAttributeHandle");
+    M_Get_Attribute_Handle req, rep ;
+
+    std::string nameAsString(theAttributeName.begin(), theAttributeName.end());
+    req.setAttributeName(nameAsString);
+    
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(whichClass));
+
+    try {
+        privateRefs->executeService(&req, &rep);
+    } catch (rti1516e::ObjectClassNotDefined &e)
+    {
+        if ( ! whichClass.isValid() ) {
+            throw rti1516e::InvalidObjectClassHandle(e.what());
+        } else {
+            throw rti1516e::NameNotFound(e.what());
+        }
+    }
+
+
+
+    G.Out(pdGendoc,"exit  RTI::RTI1516ambassador::getAttributeHandle");
+    return 
rti1516e::AttributeHandleFriend::createRTI1516Handle(rep.getAttribute());
+        }
+
+// 10.5
+std::wstring RTI1516ambassador::getAttributeName
+(rti1516e::ObjectClassHandle whichClass,
+        rti1516e::AttributeHandle theHandle)
+throw (rti1516e::InvalidObjectClassHandle,
+        rti1516e::InvalidAttributeHandle,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Attribute_Name req, rep ;
+
+    
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theHandle));
+    
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(whichClass));
+    try {
+        privateRefs->executeService(&req, &rep);
+    } catch (rti1516e::ObjectClassNotDefined &e)
+    {
+        if ( !whichClass.isValid() )
+        {
+            throw rti1516e::InvalidObjectClassHandle(e.what());
+        } else
+        {
+            throw;
+        }
+    } catch ( rti1516e::AttributeNotDefined &e)
+    {
+        if (! theHandle.isValid() )
+        {
+            throw rti1516e::InvalidAttributeHandle(e.what());
+        } else
+        {
+            throw;
+        }
+    }
+
+    //return hla_strdup(rep.getAttributeName());
+
+    std::string nameString = rep.getAttributeName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    return nameWString;
+        }
+
+// 10.6
+rti1516e::InteractionClassHandle RTI1516ambassador::getInteractionClassHandle
+(std::wstring const & theName)
+throw (rti1516e::NameNotFound,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Interaction_Class_Handle req, rep ;
+    std::string nameString(theName.begin(), theName.end());
+    req.setClassName(nameString);
+
+    privateRefs->executeService(&req, &rep);
+
+    return 
rti1516e::InteractionClassHandleFriend::createRTI1516Handle(rep.getInteractionClass());
+        }
+
+// 10.7
+std::wstring RTI1516ambassador::getInteractionClassName
+(rti1516e::InteractionClassHandle theHandle)
+throw (rti1516e::InvalidInteractionClassHandle,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Interaction_Class_Name req, rep ;
+    
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theHandle));
+    try {
+        privateRefs->executeService(&req, &rep);
+    } catch (rti1516e::InteractionClassNotDefined &e)
+    {
+        if ( !theHandle.isValid() )
+        {
+            throw rti1516e::InvalidInteractionClassHandle(e.what());
+        } else
+        {
+            throw;
+        }
+    }
+
+    //return hla_strdup(rep.getClassName());
+    std::string nameString = rep.getClassName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    return nameWString;
+        }
+
+// 10.8
+rti1516e::ParameterHandle RTI1516ambassador::getParameterHandle
+(rti1516e::InteractionClassHandle whichClass,
+        std::wstring const & theName)
+throw (rti1516e::InvalidInteractionClassHandle,
+        rti1516e::NameNotFound,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Parameter_Handle req, rep ;
+    std::string nameString(theName.begin(), theName.end());
+    req.setParameterName(nameString);
+    
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(whichClass));
+
+    try {
+        privateRefs->executeService(&req, &rep);
+    } catch (rti1516e::InteractionClassNotDefined &e)
+    {
+        if ( !whichClass.isValid() )
+        {
+            throw rti1516e::InvalidInteractionClassHandle(e.what());
+        } else
+        {
+            throw;
+        }
+    }
+
+    return 
rti1516e::ParameterHandleFriend::createRTI1516Handle(rep.getParameter());
+        }
+
+// 10.9
+std::wstring RTI1516ambassador::getParameterName
+(rti1516e::InteractionClassHandle whichClass,
+        rti1516e::ParameterHandle theHandle)
+throw ( rti1516e::InvalidInteractionClassHandle,
+        rti1516e::InvalidParameterHandle,
+        rti1516e::InteractionParameterNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Parameter_Name req, rep ;
+
+    
req.setParameter(rti1516e::ParameterHandleFriend::toCertiHandle(theHandle));
+    
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(whichClass));
+
+    try {
+        privateRefs->executeService(&req, &rep);
+    } catch (rti1516e::InteractionClassNotDefined &e)
+    {
+        if ( !whichClass.isValid() )
+        {
+            throw rti1516e::InvalidInteractionClassHandle(e.what());
+        } else
+        {
+            throw;
+        }
+    }
+
+    //return hla_strdup(rep.getParameterName());
+    std::string nameString = rep.getParameterName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    return nameWString;
+        }
+
+// 10.10
+rti1516e::ObjectInstanceHandle RTI1516ambassador::getObjectInstanceHandle
+(std::wstring const & theName)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Object_Instance_Handle req, rep ;
+    std::string nameString(theName.begin(), theName.end());
+    req.setObjectInstanceName(nameString);
+
+    privateRefs->executeService(&req, &rep);
+    return 
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(rep.getObject());
+        }
+
+// 10.11
+std::wstring RTI1516ambassador::getObjectInstanceName
+(rti1516e::ObjectInstanceHandle theHandle)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Object_Instance_Name req, rep ;
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theHandle));
+    privateRefs->executeService(&req, &rep);
+
+    //return hla_strdup(rep.getObjectInstanceName());
+    std::string nameString = rep.getObjectInstanceName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    return nameWString;
+        }
+
+// 10.12
+rti1516e::DimensionHandle RTI1516ambassador::getDimensionHandle
+(std::wstring const & theName)
+throw (rti1516e::NameNotFound,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Dimension_Handle req, rep ;
+
+    std::string nameString(theName.begin(), theName.end());
+    req.setDimensionName(nameString);
+    //req.setSpace(space);    //SPACE NIET NODIG IN 1516 STANDAARD???
+    privateRefs->executeService(&req, &rep);
+    return 
rti1516e::DimensionHandleFriend::createRTI1516Handle(rep.getDimension());
+        }
+
+// 10.13
+std::wstring RTI1516ambassador::getDimensionName
+(rti1516e::DimensionHandle theHandle)
+throw (rti1516e::InvalidDimensionHandle,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Dimension_Name req, rep ;
+
+    
req.setDimension(rti1516e::DimensionHandleFriend::toCertiHandle(theHandle));
+    //req.setSpace(space);
+    privateRefs->executeService(&req, &rep);
+    //return hla_strdup(rep.getDimensionName());
+    std::string nameString = rep.getDimensionName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    return nameWString;
+        }
+
+// 10.14
+unsigned long RTI1516ambassador::getDimensionUpperBound
+(rti1516e::DimensionHandle theHandle)
+throw (rti1516e::InvalidDimensionHandle,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 10.15
+rti1516e::DimensionHandleSet 
RTI1516ambassador::getAvailableDimensionsForClassAttribute
+(rti1516e::ObjectClassHandle theClass,
+        rti1516e::AttributeHandle theHandle)
+throw (rti1516e::InvalidObjectClassHandle,
+        rti1516e::InvalidAttributeHandle,
+        rti1516e::AttributeNotDefined,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Attribute_Space_Handle req, rep ;
+
+    
req.setAttribute(rti1516e::AttributeHandleFriend::toCertiHandle(theHandle));
+    
req.setObjectClass(rti1516e::ObjectClassHandleFriend::toCertiHandle(theClass));
+    privateRefs->executeService(&req, &rep);
+
+    //JRE TODO: Use space handle to to get the address@hidden
+    //return rep.getSpace();
+    rti1516e::DimensionHandleSet invalidSet;
+    return invalidSet;
+        }
+
+// 10.16
+rti1516e::ObjectClassHandle RTI1516ambassador::getKnownObjectClassHandle
+(rti1516e::ObjectInstanceHandle theObject)
+throw (rti1516e::ObjectInstanceNotKnown,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Object_Class req, rep ;
+
+    
req.setObject(rti1516e::ObjectInstanceHandleFriend::toCertiHandle(theObject));
+    privateRefs->executeService(&req, &rep);
+    return 
rti1516e::ObjectClassHandleFriend::createRTI1516Handle(rep.getObjectClass());
+        }
+
+// 10.17
+rti1516e::DimensionHandleSet 
RTI1516ambassador::getAvailableDimensionsForInteractionClass
+(rti1516e::InteractionClassHandle theClass)
+throw (rti1516e::InvalidInteractionClassHandle,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Interaction_Space_Handle req, rep ;
+
+    
req.setInteractionClass(rti1516e::InteractionClassHandleFriend::toCertiHandle(theClass));
+    this->privateRefs->executeService(&req, &rep);
+
+    //JRE TODO: Use space handle to to get the address@hidden
+    //return rep.getSpace();
+    rti1516e::DimensionHandleSet invalidSet;
+    return invalidSet;
+        }
+
+// 10.18
+rti1516e::TransportationType RTI1516ambassador::getTransportationType
+(std::wstring const & transportationName)
+throw (rti1516e::InvalidTransportationName,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Transportation_Handle req, rep ;
+    std::string nameString(transportationName.begin(), 
transportationName.end());
+    req.setTransportationName(nameString);
+    privateRefs->executeService(&req, &rep);
+
+    return certi::toRTI1516TransportationType(rep.getTransportation());
+        }
+
+// 10.19
+std::wstring RTI1516ambassador::getTransportationName
+(rti1516e::TransportationType transportationType)
+throw (rti1516e::InvalidTransportationType,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Transportation_Name req, rep ;
+
+    
req.setTransportation(certi::toCertiTransportationType(transportationType));
+    privateRefs->executeService(&req, &rep);
+
+    //return hla_strdup(rep.getTransportationName());
+    std::string nameString = rep.getTransportationName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    return nameWString;
+        }
+
+// 10.20
+rti1516e::OrderType RTI1516ambassador::getOrderType
+(std::wstring const & orderName)
+throw (rti1516e::InvalidOrderName,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Ordering_Handle req, rep ;
+
+    std::string nameAsString(orderName.begin(), orderName.end());
+    req.setOrderingName(nameAsString);
+    privateRefs->executeService(&req, &rep);
+
+    return certi::toRTI1516OrderType(rep.getOrdering());
+        }
+
+// 10.21
+std::wstring RTI1516ambassador::getOrderName
+(rti1516e::OrderType orderType)
+throw (rti1516e::InvalidOrderType,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    M_Get_Ordering_Name req, rep ;
+
+    req.setOrdering(certi::toCertiOrderType(orderType));
+    privateRefs->executeService(&req, &rep);
+
+    //return hla_strdup(rep.getOrderingName());
+    std::string nameString = rep.getOrderingName();
+    std::wstring nameWString(nameString.begin(), nameString.end());
+
+    return nameWString;
+        }
+
+// 10.22
+/**
+ * Sets the ClassRelevanceAdvisory (CRA) switch to true. The switch
+ * state is hold on the RTIG side. That's why the message
+ * ENABLE_CLASS_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the CRA switch is true. This causes a delivery of the
+ * federate service startRegistrationForObjectClass to a publisher
+ * if there are any new subscribers for the federates published object
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service stopRegistrationForObjectClass.
+ *
+ * By disabling the CRA switch the federate is no longer informed by
+ * subscriptions to its published object classes, i.e. the federate
+ * services startRegistrationForObjectClass and
+ * stopRegistrationForObjectClass respectively are not invoked.
+ * @see disableClassRelevanceAdvisorySwitch()
+ */
+void RTI1516ambassador::enableObjectClassRelevanceAdvisorySwitch ()
+throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOn,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Enable_Class_Relevance_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.23
+/**
+ * Sets the ClassRelevanceAdvisory (CRA) switch to false. The switch
+ * state is hold on the RTIG side. That's why the message
+ * DISABLE_CLASS_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the CRA switch is true. This causes a delivery of the
+ * federate service startRegistrationForObjectClass to a publisher
+ * if there are any new subscribers for the federates published object
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service stopRegistrationForObjectClass.
+ * @see enableClassRelevanceAdvisorySwitch()
+ *
+ * By disabling the CRA switch the federate is no longer informed by
+ * subscriptions to its published object classes, i.e. the federate
+ * services startRegistrationForObjectClass and
+ * stopRegistrationForObjectClass respectively are not invoked.
+ */
+void RTI1516ambassador::disableObjectClassRelevanceAdvisorySwitch ()
+throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOff,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Disable_Class_Relevance_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.24
+/**
+ * Sets the AttributeRelevanceAdvisory (ARA) switch to true. The switch
+ * state is hold on the RTIG side. That's why the message
+ * ENABLE_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ARA switch is false. When enabling the ARA switch
+ * the federate is informed by the federate service
+ * turnUpdatesOnForObjectInstance of new object instances within remote
+ * federates actively subscribed to its published attributes. If there
+ * are no active subscribers for a set of instance-attributes the federate
+ * receives the federate service turnUpdatesOffForObjectInstance.
+ *
+ * By disabling the ARA switch the federate is no longer informed by
+ * subscriptions to its published attributes, i.e. the federate
+ * services turnUpdatesOnForObjectInstance and
+ * turnUpdatesOffForObjectInstance respectively are not invoked.
+ * @see disableAttributeRelevanceAdvisorySwitch()
+ */
+void RTI1516ambassador::enableAttributeRelevanceAdvisorySwitch ()
+throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOn,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Enable_Attribute_Relevance_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.25
+/**
+ * Sets the AttributeRelevanceAdvisory (ARA) switch to false. The switch
+ * state is hold on the RTIG side. That's why the message
+ * DISABLE_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ARA switch is false. When enabling the ARA switch
+ * the federate is informed by the federate service
+ * turnUpdatesOnForObjectInstance of new object instances within remote
+ * federates actively subscribed to its published attributes. If there
+ * are no active subscribers for a set of instance-attributes the federate
+ * receives the federate service turnUpdatesOffForObjectInstance.
+ * @see enableAttributeRelevanceAdvisorySwitch()
+ *
+ * By disabling the ARA switch the federate is no longer informed by
+ * subscriptions to its published attributes, i.e. the federate
+ * services turnUpdatesOnForObjectInstance and
+ * turnUpdatesOffForObjectInstance respectively are not invoked.
+ */
+void RTI1516ambassador::disableAttributeRelevanceAdvisorySwitch ()
+throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOff,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Disable_Attribute_Relevance_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.26
+/**
+ * Sets the AttributeScopeAdvisory (ASA) switch to true. The switch state
+ * is hold on the RTIG side. That's why the message
+ * ENABLE_ATTRIBUTE_SCOPE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ASA switch is false. When enabling the ASA switch
+ * the federate is informed by the federate services
+ * attributesInScope and attributesOutScope respectively of discovered
+ * or registrated but not owned attribute-instances intersecting or
+ * leaving its subscription regions.
+ *
+ * By disabling the ASA switch the federate is no longer informed of
+ * changes in attribute-instance scope, i.e. the federate
+ * services attributesInScope and attributesOutScope respectively are
+ * not invoked.
+ * @see disableAttributeScopeAdvisorySwitch()
+ */
+void RTI1516ambassador::enableAttributeScopeAdvisorySwitch ()
+throw (rti1516e::AttributeScopeAdvisorySwitchIsOn,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Enable_Attribute_Scope_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.27
+/**
+ * Sets the AttributeScopeAdvisory (ASA) switch to false. The switch state
+ * is hold on the RTIG side. That's why the message
+ * DISABLE_ATTRIBUTE_SCOPE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the ASA switch is false. When enabling the ASA switch
+ * the federate is informed by the federate services
+ * attributesInScope and attributesOutScope respectively of discovered
+ * or registrated but not owned attribute-instances intersecting or
+ * leaving its subscription regions.
+ * @see enableAttributeScopeAdvisorySwitch()
+ *
+ * By disabling the ASA switch the federate is no longer informed of
+ * changes in attribute-instance scope, i.e. the federate
+ * services attributesInScope and attributesOutScope respectively are
+ * not invoked.
+ */
+void RTI1516ambassador::disableAttributeScopeAdvisorySwitch ()
+throw (rti1516e::AttributeScopeAdvisorySwitchIsOff,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Disable_Attribute_Scope_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.28
+/**
+ * Sets the InteractionRelevanceAdvisory (IRA) switch to true. The switch
+ * state is hold on the RTIG side. That's why the message
+ * ENABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the IRA switch is true. This causes a delivery of the
+ * federate service turnInteractionsOn to a publisher if there are
+ * any new subscribers for the federates published interaction
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service turnInteractionsOff().
+ *
+ * By disabling the IRA switch the federate is no longer informed by
+ * subscriptions to its published interaction classes, i.e. the federate
+ * services turnInteractionsOn and turnInteractionsOff respectively are
+ * not invoked.
+ * @see disableInteractionRelevanceAdvisorySwitch()
+ */
+void RTI1516ambassador::enableInteractionRelevanceAdvisorySwitch ()
+throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOn,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Enable_Interaction_Relevance_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.29
+/**
+ * Sets the InteractionRelevanceAdvisory (IRA) switch to false. The switch
+ * state is hold on the RTIG side. That's why the message
+ * DISABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH
+ * is transmitted to RTIA. RTIA transmits the message towards RTIG.
+ *
+ * By default, the IRA switch is true. This causes a delivery of the
+ * federate service turnInteractionsOn to a publisher if there are
+ * any new subscribers for the federates published interaction
+ * classes. If there are no more subscribers a publisher gets the
+ * federate service turnInteractionsOff().
+ * @see enableInteractionRelevanceAdvisorySwitch()
+ *
+ * By disabling the IRA switch the federate is no longer informed by
+ * subscriptions to its published interaction classes, i.e. the federate
+ * services turnInteractionsOn and turnInteractionsOff respectively are
+ * not invoked.
+ */
+void RTI1516ambassador::disableInteractionRelevanceAdvisorySwitch ()
+throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOff,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    M_Disable_Interaction_Relevance_Advisory_Switch req, rep ;
+    privateRefs->executeService(&req, &rep);
+        }
+
+// 10.30
+
+rti1516e::DimensionHandleSet RTI1516ambassador::getDimensionHandleSet
+(rti1516e::RegionHandle theRegionHandle)
+throw (rti1516e::InvalidRegion,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 10.31
+
+rti1516e::RangeBounds RTI1516ambassador::getRangeBounds
+(rti1516e::RegionHandle theRegionHandle,
+        rti1516e::DimensionHandle theDimensionHandle)
+throw (rti1516e::InvalidRegion,
+        rti1516e::RegionDoesNotContainSpecifiedDimension,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 10.32
+void RTI1516ambassador::setRangeBounds
+(rti1516e::RegionHandle theRegionHandle,
+        rti1516e::DimensionHandle theDimensionHandle,
+        rti1516e::RangeBounds const & theRangeBounds)
+throw (rti1516e::InvalidRegion,
+        rti1516e::RegionNotCreatedByThisFederate,
+        rti1516e::RegionDoesNotContainSpecifiedDimension,
+        rti1516e::InvalidRangeBound,
+        rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 10.33
+unsigned long RTI1516ambassador::normalizeFederateHandle
+(rti1516e::FederateHandle theFederateHandle)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::InvalidFederateHandle,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 10.34
+unsigned long RTI1516ambassador::normalizeServiceGroup
+(rti1516e::ServiceGroupIndicator theServiceGroup)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::InvalidServiceGroup,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 10.37
+bool RTI1516ambassador::evokeCallback(double approximateMinimumTimeInSeconds)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    return __tick_kernel(false, approximateMinimumTimeInSeconds, 
approximateMinimumTimeInSeconds);
+        }
+
+// 10.38
+bool RTI1516ambassador::evokeMultipleCallbacks(double 
approximateMinimumTimeInSeconds,
+        double approximateMaximumTimeInSeconds)
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::RTIinternalError)
+        {
+    return __tick_kernel(true, approximateMinimumTimeInSeconds, 
approximateMaximumTimeInSeconds);
+        }
+
+// 10.39
+void RTI1516ambassador::enableCallbacks ()
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+// 10.40
+void RTI1516ambassador::disableCallbacks ()
+throw (rti1516e::FederateNotExecutionMember,
+        rti1516e::SaveInProgress,
+        rti1516e::RestoreInProgress,
+        rti1516e::RTIinternalError)
+        {
+    /* TODO */
+    throw rti1516e::RTIinternalError(L"Not yet implemented");
+        }
+
+rti1516e::FederateHandle RTI1516ambassador::decodeFederateHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return rti1516e::FederateHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::ObjectClassHandle RTI1516ambassador::decodeObjectClassHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return 
rti1516e::ObjectClassHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::InteractionClassHandle 
RTI1516ambassador::decodeInteractionClassHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return 
rti1516e::InteractionClassHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::ObjectInstanceHandle RTI1516ambassador::decodeObjectInstanceHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return 
rti1516e::ObjectInstanceHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::AttributeHandle RTI1516ambassador::decodeAttributeHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return rti1516e::AttributeHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::ParameterHandle RTI1516ambassador::decodeParameterHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return rti1516e::ParameterHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::DimensionHandle RTI1516ambassador::decodeDimensionHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return rti1516e::DimensionHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::MessageRetractionHandle 
RTI1516ambassador::decodeMessageRetractionHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return 
rti1516e::MessageRetractionHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+rti1516e::RegionHandle RTI1516ambassador::decodeRegionHandle(
+        rti1516e::VariableLengthData const & encodedValue) const
+{
+    return rti1516e::RegionHandleFriend::createRTI1516Handle(encodedValue);
+}
+
+
+} // end namespace certi

Index: libRTI/ieee1516-2010/RTIambPrivateRefs.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambPrivateRefs.cpp
diff -N libRTI/ieee1516-2010/RTIambPrivateRefs.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambPrivateRefs.cpp  6 Mar 2014 16:11:32 -0000       
1.1
@@ -0,0 +1,1207 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2005  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// $Id: RTIambPrivateRefs.cpp,v 1.1 2014/03/06 16:11:32 erk Exp $
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+#include "RTIambPrivateRefs.h"
+#include "HandleImplementation.h"
+
+#include <RTI/Exception.h>
+#include <RTI/certiLogicalTime.h>
+#include <RTI/certiLogicalTimeInterval.h>
+#include <RTI/certiLogicalTimeFactory.h>
+#include "RTIHandleFactory.h"
+#include "RTI1516fedTime.h"
+
+#include "PrettyDebug.hh"
+#include "M_Classes.hh"
+#include <sstream>
+#include <iostream>
+
+namespace {
+static PrettyDebug D("LIBRTI", __FILE__);
+static PrettyDebug G("GENDOC",__FILE__);
+
+template<typename T>
+std::vector<std::pair<AttributeHandle, AttributeValue_t> >
+getAHVPSFromRequest(T* request)
+{
+       uint32_t size = request->getAttributesSize();
+       std::vector<std::pair<AttributeHandle, AttributeValue_t> > result;
+       result.resize(size);
+
+       for (uint32_t i = 0 ; i < size ; ++i) {
+               result[i].first = request->getAttributes(i);
+               result[i].second.assign(request->getValues(i).data(), 
request->getValues(i).length());
+       }
+
+       return result;
+}
+
+template<typename T>
+std::vector<std::pair<rti1516::ParameterHandle, ParameterValue_t> >
+getPHVPSFromRequest(T* request)
+{
+       uint32_t size = request->getParametersSize();
+
+       std::vector<std::pair<rti1516::ParameterHandle, ParameterValue_t> > 
result;
+       result.resize(size);
+
+       for (uint32_t i = 0 ; i < size ; ++i) {
+               result[i].first = request->getParameters(i);
+               result[i].second.assign(request->getValues(i).data(), 
request->getValues(i).length());
+       }
+
+       return result;
+}
+
+template<typename T>
+rti1516::AttributeHandleValueMap *
+getAHVMFromRequest(T* request)
+{
+       uint32_t size = request->getAttributesSize();
+       rti1516::AttributeHandleValueMap *result = new 
rti1516::AttributeHandleValueMap();
+       
+       for (uint32_t i = 0 ; i < size ; ++i) {
+               rti1516::AttributeHandle attribute = 
rti1516::AttributeHandleFriend::createRTI1516Handle(request->getAttributes(i)); 
           
+               rti1516::VariableLengthData 
varData(&(request->getValues(i)[0]), request->getValues(i).size()); 
+               
result->insert(std::pair<rti1516::AttributeHandle,rti1516::VariableLengthData>(attribute,
 varData)); 
+       }
+
+       return result;
+}
+
+template<typename T>
+rti1516::ParameterHandleValueMap *
+getPHVMFromRequest(T* request)
+{
+       uint32_t size = request->getParametersSize();
+       rti1516::ParameterHandleValueMap *result = new 
rti1516::ParameterHandleValueMap();
+
+       for (uint32_t i = 0 ; i < size ; ++i) {
+               rti1516::ParameterHandle parameter = 
rti1516::ParameterHandleFriend::createRTI1516Handle(request->getParameters(i));
+               rti1516::VariableLengthData 
varData(&(request->getValues(i)[0]), request->getValues(i).size()); 
+               
result->insert(std::pair<rti1516::ParameterHandle,rti1516::VariableLengthData>(parameter,
 varData)); 
+       }
+
+       return result;
+}
+
+template<typename T>
+rti1516::AttributeHandleSet *
+getAHSFromRequest(T* request)
+{
+       uint32_t size = request->getAttributesSize();
+       rti1516::AttributeHandleSet *result = new rti1516::AttributeHandleSet();
+       
+       for (uint32_t i = 0 ; i < size ; ++i) {
+               rti1516::AttributeHandle attribute = 
rti1516::AttributeHandleFriend::createRTI1516Handle(request->getAttributes(i)); 
           
+               result->insert(attribute);
+       }
+
+       return result;
+}
+
+std::auto_ptr< rti1516::LogicalTime >
+getLogicalTime()
+throw ( rti1516::RTIinternalError )
+{
+       std::auto_ptr< rti1516::LogicalTimeFactory > timeFactory = 
rti1516::LogicalTimeFactoryFactory::makeLogicalTimeFactory(L"");
+       if (timeFactory.get() != 0)
+       {
+               return timeFactory->makeLogicalTime();
+       } else
+       {
+               throw rti1516::RTIinternalError(L"Could not create 
LogicalTimeFactory");
+       }
+}
+
+} // End anonymous namespace
+
+RTI1516ambPrivateRefs::RTI1516ambPrivateRefs()
+{
+       fed_amb      = NULL;
+#ifdef _WIN32
+       handle_RTIA  = (HANDLE)-1;
+#else
+       pid_RTIA     = (pid_t)-1;
+#endif
+       is_reentrant = false;
+       _theRootObj  = NULL;
+       socketUn     = NULL;
+}
+
+RTI1516ambPrivateRefs::~RTI1516ambPrivateRefs()
+{
+       delete socketUn ;
+}
+
+// ----------------------------------------------------------------------------
+void
+RTI1516ambPrivateRefs::leave(const char *msg) throw (rti1516::RTIinternalError)
+{
+       std::wstringstream smsg;
+       smsg << "RTI called leave because <" <<msg<<">";
+       throw rti1516::RTIinternalError(smsg.str());
+}
+
+// ----------------------------------------------------------------------------
+void
+RTI1516ambPrivateRefs::executeService(Message *req, Message *rep)
+{
+       G.Out(pdGendoc,"enter 
RTI1516ambPrivateRefs::executeService(%s,%s)",req->getMessageName(),rep->getMessageName());
+
+       D.Out(pdDebug, "sending request to RTIA.");
+
+       try {
+               req->send(socketUn,msgBufSend);
+       }
+       catch (certi::NetworkError) {
+               std::cerr << "libRTI: exception: NetworkError (write)" << 
std::endl ;
+               if ( req->getMessageType() == certi::Message::CLOSE_CONNEXION)
+               {
+                       std::cerr << "libRTI: Could not execute 'Close 
connexion' service (Network error). Service request ignored." << std::endl;
+                       return;
+               } else
+               {
+                       throw rti1516::RTIinternalError(L"libRTI: Network Write 
Error");
+               }
+       }
+
+       D.Out(pdDebug, "waiting RTIA reply.");
+
+       // waiting RTI reply.
+       try {
+               rep->receive(socketUn,msgBufReceive);
+       }
+       catch (certi::NetworkError) {
+               std::cerr << "libRTI: exception: NetworkError (read)" << 
std::endl ;
+               throw rti1516::RTIinternalError(L"libRTI: Network Read Error 
waiting RTI reply");
+       }
+
+       D.Out(pdDebug, "RTIA reply received.");
+
+
+       if (rep->getMessageType() != req->getMessageType()) {
+               std::cout << "LibRTI: Assertion failed: rep->type != req->type" 
<< std::endl ;
+               throw 
rti1516::RTIinternalError(L"RTI1516ambPrivateRefs::executeService: "
+                               L"rep->type != req->type");
+       }
+
+       D.Out(pdDebug, "processing returned exception (from reply).");
+       // the services may only throw exceptions defined in the HLA standard
+       // the RTIA is responsible for sending 'allowed' exceptions only
+       processException(rep);
+
+       D.Out(pdDebug, "exception processed.");
+       G.Out(pdGendoc,"exit RTI1516ambPrivateRefs::executeService");
+}
+
+void
+RTI1516ambPrivateRefs::sendTickRequestStop()
+{
+       G.Out(pdGendoc,"enter RTI1516ambPrivateRefs::sendTickRequestStop");
+
+       M_Tick_Request_Stop req, rep ;
+
+       try {
+               req.send(socketUn, msgBufSend);
+       }
+       catch (certi::NetworkError) {
+               std::cerr << "libRTI: exception: NetworkError (write)" << 
std::endl ;
+               throw rti1516::RTIinternalError(L"libRTI: Network Write Error");
+       }
+
+       try {
+               rep.receive(socketUn, msgBufReceive);
+       }
+       catch (certi::NetworkError) {
+               std::cerr << "libRTI: exception: NetworkError (read)" << 
std::endl ;
+               throw rti1516::RTIinternalError(L"libRTI: Network Read Error 
waiting RTI reply");
+       }
+
+       // ignore the response, ignore exceptions
+       // rep->type == Message::TICK_REQUEST;
+
+       G.Out(pdGendoc,"exit RTI1516ambPrivateRefs::sendTickRequestStop");
+}
+
+// ----------------------------------------------------------------------------
+//! Process exception from received message.
+/*! When a message is received from RTIA, it can contains an exception.
+  This exception is processed by this module and a new exception is thrown.
+ */
+void
+RTI1516ambPrivateRefs::processException(Message *msg)
+{
+       D.Out(pdExcept, "num de l'exception : %d .", msg->getExceptionType());
+       switch(msg->getExceptionType()) {
+       case e_NO_EXCEPTION: {
+       } break ;
+
+       case e_ArrayIndexOutOfBounds: {
+               D.Out(pdExcept, "Throwing e_ArrayIndexOutOfBounds exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AsynchronousDeliveryAlreadyEnabled: {
+               D.Out(pdExcept, "Throwing e_AsynchronousDeliveryAlreadyEnabled 
exception.");
+               throw 
rti1516::AsynchronousDeliveryAlreadyEnabled(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AsynchronousDeliveryAlreadyDisabled: {
+               D.Out(pdExcept, "Throwing e_AsynchronousDeliveryAlreadyDisabled 
exception.");
+               throw 
rti1516::AsynchronousDeliveryAlreadyDisabled(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeAlreadyOwned: {
+               D.Out(pdExcept, "Throwing e_AttributeAlreadyOwned exception.");
+               throw 
rti1516::AttributeAlreadyOwned(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeAlreadyBeingAcquired: {
+               D.Out(pdExcept,
+                               "Throwing e_AttributeAlreadyBeingAcquired 
exception.");
+               throw 
rti1516::AttributeAlreadyBeingAcquired(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeAlreadyBeingDivested: {
+               D.Out(pdExcept,
+                               "Throwing e_AttributeAlreadyBeingDivested 
exception.");
+               throw 
rti1516::AttributeAlreadyBeingDivested(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeDivestitureWasNotRequested: {
+               D.Out(pdExcept,
+                               "Throwing e_AttributeDivestitureWasNotRequested 
exception.");
+               throw 
rti1516::AttributeDivestitureWasNotRequested(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeAcquisitionWasNotRequested: {
+               D.Out(pdExcept,
+                               "Throwing e_AttributeAcquisitionWasNotRequested 
exception.");
+               throw 
rti1516::AttributeAcquisitionWasNotRequested(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeNotDefined: {
+               D.Out(pdExcept, "Throwing e_AttributeNotDefined exception.");
+               throw rti1516::AttributeNotDefined(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeNotKnown: {
+               D.Out(pdExcept, "Throwing e_AttributeNotKnown exception.");
+               // JvY: Changed name of exception
+               throw 
rti1516::AttributeNotRecognized(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeNotOwned: {
+               D.Out(pdExcept, "Throwing e_AttributeNotOwned exception.");
+               throw rti1516::AttributeNotOwned(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeNotPublished: {
+               D.Out(pdExcept, "Throwing e_AttributeNotPublished exception.");
+               throw 
rti1516::AttributeNotPublished(msg->getExceptionReasonW());
+       } break ;
+
+       case e_AttributeNotSubscribed: {
+               D.Out(pdExcept, "Throwing e_AttributeNotSubscribed exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ConcurrentAccessAttempted: {
+               D.Out(pdExcept, "Throwing e_ConcurrentAccessAttempted 
exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_CouldNotDiscover: {
+               D.Out(pdExcept, "Throwing e_CouldNotDiscover exception.");
+               throw rti1516::CouldNotDiscover(msg->getExceptionReasonW());
+       } break ;
+
+       case e_CouldNotOpenFED: {
+               D.Out(pdExcept, "Throwing e_CouldNotOpenFED exception.");
+               // JvY: Changed name of exception
+               throw rti1516::CouldNotOpenFDD(msg->getExceptionReasonW());
+       } break ;
+
+       case e_CouldNotOpenRID: {
+               D.Out(pdExcept, "Throwing e_CouldNotOpenRID exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_CouldNotRestore: {
+               D.Out(pdExcept, "Throwing e_CouldNotRestore exception.");
+               // JvY: Changed name of exception
+               throw 
rti1516::CouldNotInitiateRestore(msg->getExceptionReasonW());
+       } break ;
+
+       case e_DeletePrivilegeNotHeld: {
+               D.Out(pdExcept, "Throwing e_DeletePrivilegeNotHeld exception.");
+               throw 
rti1516::DeletePrivilegeNotHeld(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ErrorReadingRID: {
+               D.Out(pdExcept, "Throwing e_ErrorReadingRID exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ErrorReadingFED: {
+               D.Out(pdExcept, "Throwing e_ErrorReadingFED exception.");
+               // JvY: Changed name of exception
+               throw rti1516::ErrorReadingFDD(msg->getExceptionReasonW());
+       } break ;
+
+       case e_EventNotKnown: {
+               D.Out(pdExcept, "Throwing e_EventNotKnown exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateAlreadyPaused: {
+               D.Out(pdExcept, "Throwing e_FederateAlreadyPaused exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateAlreadyExecutionMember: {
+               D.Out(pdExcept,
+                               "Throwing e_FederateAlreadyExecutionMember 
exception.");
+               throw 
rti1516::FederateAlreadyExecutionMember(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateDoesNotExist: {
+               D.Out(pdExcept, "Throwing e_FederateDoesNotExist exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateInternalError: {
+               D.Out(pdExcept, "Throwing e_FederateInternalError exception.");
+               throw 
rti1516::FederateInternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateNameAlreadyInUse: {
+               D.Out(pdExcept, "Throwing e_FederateNameAlreadyInUse 
exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateNotExecutionMember: {
+               D.Out(pdExcept, "Throwing e_FederateNotExecutionMember 
exception.");
+               throw 
rti1516::FederateNotExecutionMember(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateNotPaused: {
+               D.Out(pdExcept, "Throwing e_FederateNotPaused exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateOwnsAttributes: {
+               D.Out(pdExcept, "Throwing e_FederateOwnsAttributes exception.");
+               throw 
rti1516::FederateOwnsAttributes(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederatesCurrentlyJoined: {
+               D.Out(pdExcept, "Throwing e_FederatesCurrentlyJoined 
exception.");
+               throw 
rti1516::FederatesCurrentlyJoined(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateWasNotAskedToReleaseAttribute: {
+               D.Out(pdExcept,
+                               "Throwing 
e_FederateWasNotAskedToReleaseAttribute exception.");
+               D.Out(pdDebug,
+                               "Throwing 
e_FederateWasNotAskedToReleaseAttribute exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederationAlreadyPaused: {
+               D.Out(pdExcept, "Throwing e_FederationAlreadyPaused 
exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederationExecutionAlreadyExists: {
+               D.Out(pdExcept, "Throwing e_FederationExecutionAlreadyExists 
excep.");
+               throw 
rti1516::FederationExecutionAlreadyExists(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederationExecutionDoesNotExist: {
+               D.Out(pdExcept, "Throwing e_FederationExecutionDoesNotExist 
except.");
+               throw 
rti1516::FederationExecutionDoesNotExist(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederationNotPaused: {
+               D.Out(pdExcept, "Throwing e_FederationNotPaused exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederationTimeAlreadyPassed: {
+               D.Out(pdExcept, "Throwing e_FederationTimeAlreadyPassed 
exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateNotPublishing: {
+               D.Out(pdExcept, "Throwing e_FederateNotPublishing exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_FederateNotSubscribing: {
+               D.Out(pdExcept, "Throwing e_FederateNotSubscribing exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_RegionNotKnown: {
+               D.Out(pdExcept, "Throwing e_RegionNotKnown exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_IDsupplyExhausted: {
+               D.Out(pdExcept, "Throwing e_IDsupplyExhausted exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InteractionClassNotDefined: {
+               D.Out(pdExcept, "Throwing e_InteractionClassNotDefined 
exception.");
+               throw 
rti1516::InteractionClassNotDefined(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InteractionClassNotKnown: {
+               D.Out(pdExcept, "Throwing e_InteractionClassNotKnown 
exception.");
+               // JvY: Changed name of exception
+               throw 
rti1516::InteractionClassNotRecognized(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InteractionClassNotPublished: {
+               D.Out(pdExcept, "Throwing e_InteractionClassNotPublished 
exception.");
+               throw 
rti1516::InteractionClassNotPublished(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InteractionParameterNotDefined: {
+               D.Out(pdExcept,
+                               "Throwing e_InteractionParameterNotDefined 
exception.");
+               throw 
rti1516::InteractionParameterNotDefined(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InteractionParameterNotKnown: {
+               D.Out(pdExcept, "Throwing e_InteractionParameterNotKnown 
exception.");
+               // JvY: Changed name of exception
+               throw 
rti1516::InteractionParameterNotRecognized(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidDivestitureCondition: {
+               D.Out(pdExcept, "Throwing e_InvalidDivestitureCondition 
exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidExtents: {
+               D.Out(pdExcept, "Throwing e_InvalidExtents exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidFederationTime: {
+               D.Out(pdExcept, "Throwing e_InvalidFederationTime exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidFederationTimeDelta: {
+               D.Out(pdExcept, "Throwing e_InvalidFederationTimeDelta 
exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidLookahead: {
+               D.Out(pdExcept, "Throwing e_InvalidLookahead.");
+               throw rti1516::InvalidLookahead(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidObjectHandle: {
+               D.Out(pdExcept, "Throwing e_InvalidObjectHandle exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidOrderingHandle: {
+               D.Out(pdExcept, "Throwing e_InvalidOrderingHandle exception.");
+               // JvY: Changed name of exception
+               throw rti1516::InvalidOrderType(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidResignAction: {
+               D.Out(pdExcept, "Throwing e_InvalidResignAction exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidRetractionHandle: {
+               D.Out(pdExcept, "Throwing e_InvalidRetractionHandle 
exception.");
+               throw 
rti1516::InvalidRetractionHandle(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidRoutingSpace: {
+               D.Out(pdExcept, "Throwing e_InvalidRoutingSpace exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_InvalidTransportationHandle: {
+               D.Out(pdExcept, "Throwing e_InvalidTransportationHandle 
exception.");
+               // JvY: Changed name of exception
+               throw 
rti1516::InvalidTransportationType(msg->getExceptionReasonW());
+       } break ;
+
+       case e_MemoryExhausted: {
+               D.Out(pdExcept, "Throwing e_MemoryExhausted exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_NameNotFound: {
+               D.Out(pdExcept, "Throwing e_NameNotFound exception.");
+               throw rti1516::NameNotFound(msg->getExceptionReasonW());
+       } break ;
+
+       case e_NoPauseRequested: {
+               D.Out(pdExcept, "Throwing e_NoPauseRequested exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_NoResumeRequested: {
+               D.Out(pdExcept, "Throwing e_NoResumeRequested exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ObjectClassNotDefined: {
+               D.Out(pdExcept, "Throwing e_ObjectClassNotDefined exception.");
+               throw 
rti1516::ObjectClassNotDefined(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ObjectClassNotKnown: {
+               D.Out(pdExcept, "Throwing e_ObjectClassNotKnown exception.");
+               throw rti1516::ObjectClassNotKnown(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ObjectClassNotPublished: {
+               D.Out(pdExcept, "Throwing e_ObjectClassNotPublished 
exception.");
+               throw 
rti1516::ObjectClassNotPublished(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ObjectClassNotSubscribed: {
+               D.Out(pdExcept, "Throwing e_ObjectClassNotSubscribed 
exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ObjectNotKnown: {
+               D.Out(pdExcept, "Throwing e_ObjectNotKnown exception.");
+               // JvY: Changed name of exception
+               throw 
rti1516::ObjectInstanceNotKnown(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ObjectAlreadyRegistered: {
+               D.Out(pdExcept, "Throwing e_ObjectAlreadyRegistered 
exception.");
+               // JvY: Changed name of exception
+               throw 
rti1516::ObjectInstanceNameInUse(msg->getExceptionReasonW());
+       } break ;
+
+       case e_RestoreInProgress: {
+               D.Out(pdExcept, "Throwing e_RestoreInProgress exception.");
+               throw rti1516::RestoreInProgress(msg->getExceptionReasonW());
+       } break ;
+
+       case e_RestoreNotRequested: {
+               D.Out(pdExcept, "Throwing e_RestoreNotRequested exception.");
+               throw rti1516::RestoreNotRequested(msg->getExceptionReasonW());
+       } break ;
+
+       case e_RTIinternalError: {
+               D.Out(pdExcept, "Throwing e_RTIinternalError exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_SpaceNotDefined: {
+               D.Out(pdExcept, "Throwing e_SpaceNotDefined exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_SaveInProgress: {
+               D.Out(pdExcept, "Throwing e_SaveInProgress exception.");
+               throw rti1516::SaveInProgress(msg->getExceptionReasonW());
+       } break ;
+
+       case e_SaveNotInitiated: {
+               D.Out(pdExcept, "Throwing e_SaveNotInitiated exception.");
+               throw rti1516::SaveNotInitiated(msg->getExceptionReasonW());
+       } break ;
+
+       case e_SecurityError: {
+               D.Out(pdExcept, "Throwing e_SecurityError exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_SpecifiedSaveLabelDoesNotExist: {
+               D.Out(pdExcept,
+                               "Throwing e_SpecifiedSaveLabelDoesNotExist 
exception.");
+               throw 
rti1516::SpecifiedSaveLabelDoesNotExist(msg->getExceptionReasonW());
+       } break ;
+
+       case e_TimeAdvanceAlreadyInProgress: {
+               D.Out(pdExcept, "Throwing e_TimeAdvanceAlreadyInProgress 
exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_TimeAdvanceWasNotInProgress: {
+               D.Out(pdExcept, "Throwing e_TimeAdvanceWasNotInProgress 
exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_TooManyIDsRequested: {
+               D.Out(pdExcept, "Throwing e_TooManyIDsRequested exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_UnableToPerformSave: {
+               D.Out(pdExcept, "Throwing e_UnableToPerformSave exception.");
+               throw rti1516::UnableToPerformSave(msg->getExceptionReasonW());
+       } break ;
+
+       case e_UnimplementedService: {
+               D.Out(pdExcept, "Throwing e_UnimplementedService exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_UnknownLabel: {
+               D.Out(pdExcept, "Throwing e_UnknownLabel exception.");
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ValueCountExceeded: {
+               D.Out(pdExcept, "Throwing e_ValueCountExceeded exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+
+       case e_ValueLengthExceeded: {
+               D.Out(pdExcept, "Throwing e_ValueLengthExceeded exception.");
+               // JvY: Changed name of exception
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+       
+       case e_IllegalName: {
+               D.Out(pdExcept, "Throwing e_IllegalName exception.");
+               throw rti1516::IllegalName(msg->getExceptionReasonW());
+       } break;
+
+
+       default: {
+               D.Out(pdExcept, "Throwing unknown exception !");
+               std::cout << "LibRTI: Receiving unknown RTI exception." << 
std::endl;
+               throw rti1516::RTIinternalError(msg->getExceptionReasonW());
+       } break ;
+       }
+}
+
+#define CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(service) \
+               catch (rti1516::Exception &e) { \
+                       std::wstringstream msg; \
+                       msg << "Error in " << service << ": " << e.what(); \
+                       throw rti1516::RTIinternalError(msg.str()); \
+               }
+
+void
+RTI1516ambPrivateRefs::callFederateAmbassador(Message *msg)
+throw (rti1516::RTIinternalError)
+{
+       switch (msg->getMessageType()) {
+
+       case Message::SYNCHRONIZATION_POINT_REGISTRATION_SUCCEEDED:
+               try {
+                       
fed_amb->synchronizationPointRegistrationSucceeded(msg->getLabelW());
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"synchronizationPointRegistrationSucceeded")
+               break ;
+
+       case Message::SYNCHRONIZATION_POINT_REGISTRATION_FAILED:
+               try {
+                       
fed_amb->synchronizationPointRegistrationFailed(msg->getLabelW(), 
rti1516::RTI_DETECTED_FAILURE_DURING_SYNCHRONIZATION);
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"synchronizationPointRegistrationFailed")
+               break ;
+
+       case Message::ANNOUNCE_SYNCHRONIZATION_POINT:
+               try {
+                       std::string tagString(msg->getTag());
+                       rti1516::VariableLengthData 
tagVarData(tagString.c_str(), tagString.length());
+                       
fed_amb->announceSynchronizationPoint(msg->getLabelW(),tagVarData);
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"announceSynchronizationPoint")
+               break ;
+
+       case Message::FEDERATION_SYNCHRONIZED:
+               try {
+                       fed_amb->federationSynchronized(msg->getLabelW());
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationSynchronized")
+               break ;
+
+       case Message::INITIATE_FEDERATE_SAVE:
+               try {
+                       fed_amb->initiateFederateSave((msg->getLabelW()));
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"initiateFederateSave")
+               break ;
+
+       case Message::FEDERATION_SAVED:
+               try {
+                       fed_amb->federationSaved();
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationSaved")
+               break ;
+
+       case Message::REQUEST_FEDERATION_RESTORE_SUCCEEDED:
+               try {
+                       fed_amb->requestFederationRestoreSucceeded(
+                                       (msg->getLabelW()));
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestFederationRestoreSucceeded")
+               break ;
+
+       case Message::REQUEST_FEDERATION_RESTORE_FAILED:
+               try {
+                       
fed_amb->requestFederationRestoreFailed(msg->getLabelW());
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestFederationRestoreFailed")
+               break ;
+
+       case Message::FEDERATION_RESTORE_BEGUN:
+               try {
+                       fed_amb->federationRestoreBegun();
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationRestoreBegun")
+               break ;
+
+       case Message::INITIATE_FEDERATE_RESTORE:
+               try {
+                       M_Initiate_Federate_Restore *IFR = 
static_cast<M_Initiate_Federate_Restore *>(msg);
+                       rti1516::FederateHandle rti1516Handle = 
rti1516::FederateHandleFriend::createRTI1516Handle(IFR->getFederate());
+                       fed_amb->initiateFederateRestore((IFR->getLabelW()), 
rti1516Handle);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"initiateFederateRestore")
+               break ;
+
+       case Message::FEDERATION_RESTORED:
+               try {
+                       fed_amb->federationRestored();
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationRestored")
+               break ;
+
+       case Message::FEDERATION_NOT_RESTORED:
+               try {
+                       // TODO Need to know reason
+                       
fed_amb->federationNotRestored(rti1516::RTI_UNABLE_TO_RESTORE);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"federationNotRestored")
+               break ;
+
+       case Message::START_REGISTRATION_FOR_OBJECT_CLASS:
+               try {
+                       rti1516::ObjectClassHandle rti1516Handle = 
rti1516::ObjectClassHandleFriend::createRTI1516Handle(static_cast<M_Start_Registration_For_Object_Class
 *>(msg)->getObjectClass());
+                       fed_amb->startRegistrationForObjectClass(rti1516Handle);
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"startRegistrationForObjectClass")
+               break ;
+
+       case Message::STOP_REGISTRATION_FOR_OBJECT_CLASS:
+               try {
+                       rti1516::ObjectClassHandle rti1516Handle = 
rti1516::ObjectClassHandleFriend::createRTI1516Handle(static_cast<M_Stop_Registration_For_Object_Class
 *>(msg)->getObjectClass());
+                       fed_amb->stopRegistrationForObjectClass(rti1516Handle);
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"stopRegistrationForObjectClass")
+               break ;
+
+       case Message::TURN_INTERACTIONS_ON:
+               try {
+                       rti1516::InteractionClassHandle rti1516Handle = 
rti1516::InteractionClassHandleFriend::createRTI1516Handle(static_cast<M_Turn_Interactions_On
 *>(msg)->getInteractionClass());
+                       fed_amb->turnInteractionsOn(rti1516Handle);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"turnInteractionsOn")
+               break ;
+
+       case Message::TURN_INTERACTIONS_OFF:
+               try {
+                       rti1516::InteractionClassHandle rti1516Handle = 
rti1516::InteractionClassHandleFriend::createRTI1516Handle(static_cast<M_Turn_Interactions_Off
 *>(msg)->getInteractionClass());
+                       fed_amb->turnInteractionsOff(rti1516Handle);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"turnInteractionsOff")
+               break ;
+
+       case Message::DISCOVER_OBJECT_INSTANCE:
+               try {
+                       M_Discover_Object_Instance* DOI = 
static_cast<M_Discover_Object_Instance *>(msg);
+                       rti1516::ObjectInstanceHandle objectInstance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(DOI->getObject());
+                       rti1516::ObjectClassHandle objectClass = 
rti1516::ObjectClassHandleFriend::createRTI1516Handle(DOI->getObjectClass());
+                       std::string str = DOI->getObjectName();
+                       std::wstring str2(str.length(), L' '); // Make room for 
characters
+                       // Copy string to wstring.
+                       std::copy(str.begin(), str.end(), str2.begin());
+
+                       fed_amb->discoverObjectInstance(objectInstance,
+                                       objectClass,
+                                       str2);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"discoverObjectInstance")
+               break ;
+
+       case Message::REFLECT_ATTRIBUTE_VALUES:
+               try {
+                       M_Reflect_Attribute_Values* RAV = 
static_cast<M_Reflect_Attribute_Values *>(msg);
+                       G.Out(pdGendoc,"          tick_kernel call to 
reflectAttributeValues");
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(RAV->getObject()); 
+
+                       rti1516::AttributeHandleValueMap *attributes = 
getAHVMFromRequest(RAV);
+
+                       std::string tagString(msg->getTag());
+                       rti1516::VariableLengthData 
tagVarData(tagString.c_str(), tagString.length());
+
+                       if (msg->isDated()) {
+                               uint64_t sn = RAV->getEventRetraction().getSN();
+                               certi::FederateHandle certiHandle = 
RAV->getEventRetraction().getSendingFederate();
+                               rti1516::MessageRetractionHandle event = 
rti1516::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, sn);
+
+                               std::auto_ptr < rti1516::LogicalTime > fedTime 
(new RTI1516fedTime(msg->getDate().getTime()));
+
+                               fed_amb->reflectAttributeValues(instance, 
//ObjectInstanceHandle
+                                               *attributes,                    
                                  //AttributeHandleValueMap &
+                                               tagVarData,                     
                                          //VariableLengthData &
+                                               rti1516::TIMESTAMP,             
                                  //OrderType (send)
+                                               rti1516::RELIABLE,              
                                  //TransportationType
+                                               *fedTime,                       
                                          //LogicalTime &
+                                               rti1516::RECEIVE,               
                                  //OrderType (receive)
+                                               event                           
                                          //MessageRetractionHandle
+                                               );
+                       }
+                       else {
+                               fed_amb->reflectAttributeValues(instance,
+                                               *attributes,
+                                               tagVarData,
+                                               rti1516::RECEIVE,
+                                               rti1516::RELIABLE);
+                       }
+                       delete attributes ;
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"reflectAttributeValues")
+               break ;
+
+       case Message::RECEIVE_INTERACTION:
+               try {
+                       M_Receive_Interaction* RI = 
static_cast<M_Receive_Interaction *>(msg);
+                       rti1516::ParameterHandleValueMap *parameters = 
getPHVMFromRequest(RI);
+
+                       rti1516::InteractionClassHandle interactionHandle = 
rti1516::InteractionClassHandleFriend::createRTI1516Handle(RI->getInteractionClass());
+
+                       std::string tagString(msg->getTag());
+                       rti1516::VariableLengthData 
tagVarData(tagString.c_str(), tagString.length());
+
+                       if (msg->isDated()) {
+                               uint64_t sn = RI->getEventRetraction().getSN();
+                               certi::FederateHandle certiHandle = 
RI->getEventRetraction().getSendingFederate();
+                               rti1516::MessageRetractionHandle event = 
rti1516::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, sn);
+
+                               std::auto_ptr < rti1516::LogicalTime > fedTime 
(new RTI1516fedTime(msg->getDate().getTime()));
+
+                               fed_amb->receiveInteraction(
+                                               interactionHandle,              
                                // InteractionClassHandle
+                                               *parameters,                    
                                // ParameterHandleValueMap &
+                                               tagVarData,                     
                                        // VariableLengthData &
+                                               rti1516::TIMESTAMP,             
                                  //OrderType (send)
+                                               rti1516::RELIABLE,              
                                  //TransportationType
+                                               *fedTime,                       
                                          //LogicalTime &
+                                               rti1516::RECEIVE,               
                                  //OrderType (receive)
+                                               event                           
                                          //MessageRetractionHandle
+                                               );
+                       }
+                       else {
+                               fed_amb->receiveInteraction(
+                                               interactionHandle,
+                                               *parameters,
+                                               tagVarData,
+                                               rti1516::RECEIVE,
+                                               rti1516::RELIABLE);
+                       }
+                       delete parameters ;
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"receiveInteraction")
+               break ;
+
+       case Message::REMOVE_OBJECT_INSTANCE:
+               try {
+                       M_Remove_Object_Instance* ROI = 
static_cast<M_Remove_Object_Instance *>(msg);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(ROI->getObject()); 
+
+                       std::string tagString(msg->getTag());
+                       rti1516::VariableLengthData 
tagVarData(tagString.c_str(), tagString.length());
+
+                       if (msg->isDated()) {
+                               uint64_t sn = ROI->getEventRetraction().getSN();
+                               certi::FederateHandle certiHandle = 
ROI->getEventRetraction().getSendingFederate();
+                               rti1516::MessageRetractionHandle event = 
rti1516::MessageRetractionHandleFriend::createRTI1516Handle(certiHandle, sn);
+
+                               std::auto_ptr < rti1516::LogicalTime > fedTime 
(new RTI1516fedTime(msg->getDate().getTime()));
+
+                               fed_amb->removeObjectInstance(
+                                               instance,
+                                               tagVarData,
+                                               rti1516::TIMESTAMP,
+                                               *fedTime,
+                                               rti1516::RECEIVE,
+                                               event);
+                       }
+                       else {
+                               fed_amb->removeObjectInstance(
+                                               instance,
+                                               tagVarData,
+                                               rti1516::RECEIVE);
+                       }
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"removeObjectInstance")
+               break ;
+
+       case Message::PROVIDE_ATTRIBUTE_VALUE_UPDATE:
+               try {
+                       M_Provide_Attribute_Value_Update* PAVU = 
static_cast<M_Provide_Attribute_Value_Update *>(msg);
+
+                       rti1516::AttributeHandleSet *attributeSet = 
getAHSFromRequest(PAVU);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(PAVU->getObject());
+
+                       std::string tag = PAVU->getTag();
+                       rti1516::VariableLengthData tagVarData(tag.c_str(), 
tag.size());
+
+                       
fed_amb->provideAttributeValueUpdate(instance,*attributeSet, tagVarData);
+                       delete attributeSet ;
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"provideAttributeValueUpdate")
+               break ;
+
+       case Message::REQUEST_RETRACTION: {
+
+       } break ;
+
+       case Message::REQUEST_ATTRIBUTE_OWNERSHIP_ASSUMPTION:
+               try {
+                       M_Request_Attribute_Ownership_Assumption* RAOA = 
static_cast<M_Request_Attribute_Ownership_Assumption *>(msg);
+                       rti1516::AttributeHandleSet *attributeSet = 
getAHSFromRequest(RAOA);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(RAOA->getObject()); 
+
+                       std::string tag = RAOA->getTag();
+                       rti1516::VariableLengthData tagVarData(tag.c_str(), 
tag.size());
+
+                       fed_amb->
+                       requestAttributeOwnershipAssumption(instance,
+                                       *attributeSet,
+                                       tagVarData);
+                       delete attributeSet ;
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestAttributeOwnershipAssumption")
+               break ;
+
+       case Message::REQUEST_ATTRIBUTE_OWNERSHIP_RELEASE:
+               try {
+                       M_Request_Attribute_Ownership_Release* RAOR = 
static_cast<M_Request_Attribute_Ownership_Release *>(msg);                      
  
+                       rti1516::AttributeHandleSet *attributeSet = 
getAHSFromRequest(RAOR);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(RAOR->getObject()); 
+
+                       std::string tag = RAOR->getTag();
+                       rti1516::VariableLengthData tagVarData(tag.c_str(), 
tag.size());
+
+                       fed_amb->requestAttributeOwnershipRelease(
+                                       instance,
+                                       *attributeSet,
+                                       tagVarData);
+
+                       delete attributeSet ;
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"requestAttributeOwnershipRelease")
+               break ;
+
+       case Message::ATTRIBUTE_OWNERSHIP_UNAVAILABLE:
+               try {
+                       M_Attribute_Ownership_Unavailable* AOU = 
static_cast<M_Attribute_Ownership_Unavailable *>(msg);
+                       
+                       rti1516::AttributeHandleSet *attributeSet = 
getAHSFromRequest(AOU);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AOU->getObject()); 
+
+                       fed_amb->attributeOwnershipUnavailable(instance,
+                                       *attributeSet);
+
+                       delete attributeSet ;
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeOwnershipUnavailable")
+               break ;
+
+       case Message::ATTRIBUTE_OWNERSHIP_ACQUISITION_NOTIFICATION:
+               try {
+                       M_Attribute_Ownership_Acquisition_Notification* AOAN = 
static_cast<M_Attribute_Ownership_Acquisition_Notification *>(msg);
+                       
+                       rti1516::AttributeHandleSet *attributeSet = 
getAHSFromRequest(AOAN);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AOAN->getObject()); 
+
+                       std::string tag = AOAN->getTag();
+                       rti1516::VariableLengthData tagVarData(tag.c_str(), 
tag.size());
+                       
+                       fed_amb->attributeOwnershipAcquisitionNotification(
+                                       instance,
+                                       *attributeSet,
+                                       tagVarData);
+
+                       delete attributeSet ;
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeOwnershipAcquisitionNotification")
+               break ;
+
+       case Message::ATTRIBUTE_OWNERSHIP_DIVESTITURE_NOTIFICATION:
+               try {
+                       M_Attribute_Ownership_Divestiture_Notification* AODN = 
static_cast<M_Attribute_Ownership_Divestiture_Notification *>(msg);
+                       
+                       rti1516::AttributeHandleSet *attributeSet = 
getAHSFromRequest(AODN);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AODN->getObject()); 
+                       
+                       // requestDivestitureConfirmation = 7.5, en zou 
ontbreken in 1.3. JRE: klopt dit wel?
+                       // Changed function name! Originally: 
attributeOwnershipDivestitureNotification
+                       fed_amb->requestDivestitureConfirmation(
+                                       instance,
+                                       *attributeSet);
+
+                       delete attributeSet ;
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeOwnershipDivestitureNotification")
+               break ;
+
+       case Message::CONFIRM_ATTRIBUTE_OWNERSHIP_ACQUISITION_CANCELLATION:
+               try {
+                       M_Confirm_Attribute_Ownership_Acquisition_Cancellation* 
CAOAC = static_cast<M_Confirm_Attribute_Ownership_Acquisition_Cancellation 
*>(msg);
+                       
+                       rti1516::AttributeHandleSet *attributeSet = 
getAHSFromRequest(CAOAC);
+
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(CAOAC->getObject()); 
+
+                       
fed_amb->confirmAttributeOwnershipAcquisitionCancellation(
+                                       instance,
+                                       *attributeSet);
+
+                       delete attributeSet ;
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"confirmAttributeOwnershipAcquisitionCancellation")
+               break ;
+
+       case Message::INFORM_ATTRIBUTE_OWNERSHIP:
+               try {
+                       M_Inform_Attribute_Ownership* IAO = 
static_cast<M_Inform_Attribute_Ownership *>(msg);
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(IAO->getObject()); 
+                       rti1516::AttributeHandle attribute = 
rti1516::AttributeHandleFriend::createRTI1516Handle(IAO->getAttribute()); 
+                       rti1516::FederateHandle federate = 
rti1516::FederateHandleFriend::createRTI1516Handle(IAO->getFederate()); 
+
+                       fed_amb->
+                       informAttributeOwnership(
+                                       instance,
+                                       attribute,
+                                       federate);
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"informAttributeOwnership")
+               break ;
+
+       case Message::ATTRIBUTE_IS_NOT_OWNED:
+               try {
+                       M_Attribute_Is_Not_Owned* AINO = 
static_cast<M_Attribute_Is_Not_Owned *>(msg);
+                       rti1516::ObjectInstanceHandle instance = 
rti1516::ObjectInstanceHandleFriend::createRTI1516Handle(AINO->getObject()); 
+                       rti1516::AttributeHandle attribute = 
rti1516::AttributeHandleFriend::createRTI1516Handle(AINO->getAttribute()); 
+                       
+                       fed_amb->attributeIsNotOwned(
+                                       instance,
+                                       attribute);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"attributeIsNotOwned")
+               break ;
+
+       case Message::TIME_ADVANCE_GRANT:
+               try {
+                       
fed_amb->timeAdvanceGrant(RTI1516fedTime(msg->getDate().getTime()));
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"timeAdvanceGrant")
+               break ;
+
+       case Message::TIME_REGULATION_ENABLED:
+               try {
+                       std::auto_ptr < rti1516::LogicalTime > fedTime (new 
RTI1516fedTime(msg->getDate().getTime()));
+                       fed_amb->timeRegulationEnabled(*fedTime);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"timeRegulationEnabled")
+               break ;
+
+       case Message::TIME_CONSTRAINED_ENABLED:
+               try {
+                       std::auto_ptr < rti1516::LogicalTime > fedTime (new 
RTI1516fedTime(msg->getDate().getTime()));
+                       fed_amb->timeConstrainedEnabled(*fedTime);
+               }
+               CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"timeConstrainedEnabled")
+               break ;
+
+       case Message::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED:
+               try {
+                       M_Reserve_Object_Instance_Name_Succeeded* ROINS = 
static_cast<M_Reserve_Object_Instance_Name_Succeeded *>(msg);
+                       std::string objName_s(ROINS->getObjectName());
+                       std::wstring objName_ws(objName_s.begin(), 
objName_s.end());
+
+                       
fed_amb->objectInstanceNameReservationSucceeded(objName_ws);
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"reserveObjectInstanceNameSucceeded")
+               break;
+               
+       case Message::RESERVE_OBJECT_INSTANCE_NAME_FAILED:
+               try {
+                       M_Reserve_Object_Instance_Name_Failed* ROINS = 
static_cast<M_Reserve_Object_Instance_Name_Failed *>(msg);
+                       std::string objName_s(ROINS->getObjectName());
+                       std::wstring objName_ws(objName_s.begin(), 
objName_s.end());
+
+                       
fed_amb->objectInstanceNameReservationFailed(objName_ws);
+               }
+               
CATCH_FEDERATE_AMBASSADOR_EXCEPTIONS(L"reserveObjectInstanceNameFailed")
+               break;
+
+       default:
+               leave("RTI service requested by RTI is unknown.");
+       }
+}
+
+// $Id: RTIambPrivateRefs.cpp,v 1.1 2014/03/06 16:11:32 erk Exp $

Index: libRTI/ieee1516-2010/RTIfedAmbassador.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIfedAmbassador.cpp
diff -N libRTI/ieee1516-2010/RTIfedAmbassador.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIfedAmbassador.cpp   6 Mar 2014 16:11:32 -0000       
1.1
@@ -0,0 +1,32 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+#include <RTI/FederateAmbassador.h>
+#include <RTI/NullFederateAmbassador.h>
+
+rti1516e::FederateAmbassador::FederateAmbassador() throw 
(FederateInternalError)
+{
+}
+
+rti1516e::FederateAmbassador::~FederateAmbassador() throw()
+{
+}

Index: libRTI/ieee1516-2010/RTIambassadorImplementation.h
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassadorImplementation.h
diff -N libRTI/ieee1516-2010/RTIambassadorImplementation.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassadorImplementation.h  6 Mar 2014 16:11:32 
-0000       1.1
@@ -0,0 +1,1341 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+// This interface is used to access the services of the RTI. 
+
+#ifndef RTIambassador_h
+#define RTIambassador_h
+
+#include <RTI/RTIambassador.h>
+#include <RTI/RTIambassadorFactory.h>
+#include "RTIambassadorImplementation.h"
+#include "RTIambPrivateRefs.h"
+
+namespace certi
+{
+class RTI_EXPORT RTI1516ambassador : rti1516e::RTIambassador
+{
+    friend std::auto_ptr< rti1516e::RTIambassador >
+    rti1516e::RTIambassadorFactory::createRTIambassador(std::vector< 
std::wstring > & args)
+    throw (rti1516e::BadInitializationParameter, rti1516e::RTIinternalError);
+
+private:
+    RTI1516ambPrivateRefs* privateRefs ;
+
+    // Helper functions
+    template<typename T> void
+    assignAHSAndExecuteService(const rti1516e::AttributeHandleSet &AHS, T 
&req, T &rep);
+    template<typename T> void
+    assignPHVMAndExecuteService(const rti1516e::ParameterHandleValueMap &PHVM, 
T &req, T &rep);
+    template<typename T> void
+    assignAHVMAndExecuteService(const rti1516e::AttributeHandleValueMap &AHVM, 
T &req, T &rep);
+    // Helper function for CallBacks
+    bool __tick_kernel(bool, TickTime, TickTime)
+    throw (rti1516e::SpecifiedSaveLabelDoesNotExist, 
rti1516e::RTIinternalError);
+
+protected:
+    RTI1516ambassador()
+throw ();
+
+public:
+    virtual
+    ~RTI1516ambassador();
+    // throw ()
+
+    // 4.2
+    virtual void createFederationExecution
+    (std::wstring const & federationExecutionName,
+            std::wstring const & fullPathNameToTheFDDfile,
+            std::wstring const & logicalTimeImplementationName = L"")
+    throw (rti1516e::FederationExecutionAlreadyExists,
+           rti1516e::CouldNotOpenFDD,
+           rti1516e::ErrorReadingFDD,
+           rti1516e::CouldNotCreateLogicalTimeFactory,
+           rti1516e::RTIinternalError);
+
+    // 4.3
+    virtual void destroyFederationExecution
+    (std::wstring const & federationExecutionName)
+    throw (rti1516e::FederatesCurrentlyJoined,
+           rti1516e::FederationExecutionDoesNotExist,
+           rti1516e::RTIinternalError);
+
+    // 4.4
+    virtual rti1516e::FederateHandle joinFederationExecution
+    (std::wstring const & federateType,
+           std::wstring const & federationExecutionName,
+           rti1516e::FederateAmbassador & federateAmbassador)
+    throw (rti1516e::FederateAlreadyExecutionMember,
+           rti1516e::FederationExecutionDoesNotExist,
+           rti1516e::SaveInProgress,
+           rti1516e::RestoreInProgress,
+           rti1516e::CouldNotCreateLogicalTimeFactory,
+           rti1516e::RTIinternalError);
+
+    // 4.5
+    virtual void resignFederationExecution
+    (rti1516e::ResignAction resignAction)
+    throw (rti1516e::OwnershipAcquisitionPending,
+            rti1516e::FederateOwnsAttributes,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 4.6
+    virtual void registerFederationSynchronizationPoint
+    (std::wstring const & label,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual void registerFederationSynchronizationPoint
+    (std::wstring const & label,
+            rti1516e::VariableLengthData const & theUserSuppliedTag,
+            rti1516e::FederateHandleSet const & syncSet)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.9
+    virtual void synchronizationPointAchieved
+    (std::wstring const & label)
+    throw (rti1516e::SynchronizationPointLabelNotAnnounced,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.11
+    virtual void requestFederationSave
+    (std::wstring const & label)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual void requestFederationSave
+    (std::wstring const & label,
+            rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::LogicalTimeAlreadyPassed,
+            rti1516e::InvalidLogicalTime,
+            rti1516e::FederateUnableToUseTime,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.13
+    virtual void federateSaveBegun ()
+    throw (rti1516e::SaveNotInitiated,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.14
+    virtual void federateSaveComplete ()
+    throw (rti1516e::FederateHasNotBegunSave,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual void federateSaveNotComplete()
+    throw (rti1516e::FederateHasNotBegunSave,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.16
+    virtual void queryFederationSaveStatus ()
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.18
+    virtual void requestFederationRestore
+    (std::wstring const & label)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.22
+    virtual void federateRestoreComplete ()
+    throw (rti1516e::RestoreNotRequested,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual void federateRestoreNotComplete ()
+    throw (rti1516e::RestoreNotRequested,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RTIinternalError);
+
+    // 4.24
+    virtual void queryFederationRestoreStatus ()
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RTIinternalError);
+
+    /////////////////////////////////////
+    // Declaration Management Services //
+    /////////////////////////////////////
+
+    // 5.2
+    virtual void publishObjectClassAttributes
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSet const & attributeList)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 5.3
+    virtual void unpublishObjectClass
+    (rti1516e::ObjectClassHandle theClass)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::OwnershipAcquisitionPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual void unpublishObjectClassAttributes
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSet const & attributeList)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::OwnershipAcquisitionPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 5.4
+    virtual void publishInteractionClass
+    (rti1516e::InteractionClassHandle theInteraction)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 5.5
+    virtual void unpublishInteractionClass
+    (rti1516e::InteractionClassHandle theInteraction)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 5.6
+    virtual void subscribeObjectClassAttributes
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSet const & attributeList,
+            bool active = true)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 5.7
+    virtual void unsubscribeObjectClass
+    (rti1516e::ObjectClassHandle theClass)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual void unsubscribeObjectClassAttributes
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSet const & attributeList)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 5.8
+    virtual void subscribeInteractionClass
+    (rti1516e::InteractionClassHandle theClass,
+            bool active = true)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 5.9
+    virtual void unsubscribeInteractionClass
+    (rti1516e::InteractionClassHandle theClass)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    ////////////////////////////////
+    // Object Management Services //
+    ////////////////////////////////
+
+    // 6.2
+    virtual void reserveObjectInstanceName
+    (std::wstring const & theObjectInstanceName)
+    throw (rti1516e::IllegalName,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.4
+    virtual rti1516e::ObjectInstanceHandle registerObjectInstance
+    (rti1516e::ObjectClassHandle theClass)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::ObjectClassNotPublished,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual rti1516e::ObjectInstanceHandle registerObjectInstance
+    (rti1516e::ObjectClassHandle theClass,
+            std::wstring const & theObjectInstanceName)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::ObjectClassNotPublished,
+            rti1516e::ObjectInstanceNameNotReserved,
+            rti1516e::ObjectInstanceNameInUse,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.6
+    virtual void updateAttributeValues
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleValueMap const & theAttributeValues,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual rti1516e::MessageRetractionHandle updateAttributeValues
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleValueMap const & theAttributeValues,
+            rti1516e::VariableLengthData const & theUserSuppliedTag,
+            rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::InvalidLogicalTime,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.8
+    virtual void sendInteraction
+    (rti1516e::InteractionClassHandle theInteraction,
+            rti1516e::ParameterHandleValueMap const & theParameterValues,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::InteractionClassNotPublished,
+            rti1516e::InteractionClassNotDefined,
+            rti1516e::InteractionParameterNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual rti1516e::MessageRetractionHandle sendInteraction
+    (rti1516e::InteractionClassHandle theInteraction,
+            rti1516e::ParameterHandleValueMap const & theParameterValues,
+            rti1516e::VariableLengthData const & theUserSuppliedTag,
+            rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::InteractionClassNotPublished,
+            rti1516e::InteractionClassNotDefined,
+            rti1516e::InteractionParameterNotDefined,
+            rti1516e::InvalidLogicalTime,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.10
+    virtual void deleteObjectInstance
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::DeletePrivilegeNotHeld,
+            rti1516e::ObjectInstanceNotKnown,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual rti1516e::MessageRetractionHandle deleteObjectInstance
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::VariableLengthData const & theUserSuppliedTag,
+            rti1516e::LogicalTime  const & theTime)
+    throw (rti1516e::DeletePrivilegeNotHeld,
+            rti1516e::ObjectInstanceNotKnown,
+            rti1516e::InvalidLogicalTime,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.12
+    virtual void localDeleteObjectInstance
+    (rti1516e::ObjectInstanceHandle theObject)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::FederateOwnsAttributes,
+            rti1516e::OwnershipAcquisitionPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.13
+    virtual void changeAttributeTransportationType
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes,
+            rti1516e::TransportationType theType)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.14
+    virtual void changeInteractionTransportationType
+    (rti1516e::InteractionClassHandle theClass,
+            rti1516e::TransportationType theType)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::InteractionClassNotPublished,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 6.17
+    virtual void requestAttributeValueUpdate
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual void requestAttributeValueUpdate
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSet const & theAttributes,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    ///////////////////////////////////
+    // Ownership Management Services //
+    ///////////////////////////////////
+    // 7.2
+    virtual void unconditionalAttributeOwnershipDivestiture
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.3
+    virtual void negotiatedAttributeOwnershipDivestiture
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::AttributeAlreadyBeingDivested,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.6
+    virtual void confirmDivestiture
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & confirmedAttributes,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::AttributeDivestitureWasNotRequested,
+            rti1516e::NoAcquisitionPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.8
+    virtual void attributeOwnershipAcquisition
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & desiredAttributes,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::ObjectClassNotPublished,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotPublished,
+            rti1516e::FederateOwnsAttributes,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.9
+    virtual void attributeOwnershipAcquisitionIfAvailable
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & desiredAttributes)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::ObjectClassNotPublished,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotPublished,
+            rti1516e::FederateOwnsAttributes,
+            rti1516e::AttributeAlreadyBeingAcquired,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.12
+    virtual void attributeOwnershipDivestitureIfWanted
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes,
+            rti1516e::AttributeHandleSet & theDivestedAttributes) // filled by 
RTI
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.13
+    virtual void cancelNegotiatedAttributeOwnershipDivestiture
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::AttributeDivestitureWasNotRequested,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.14
+    virtual void cancelAttributeOwnershipAcquisition
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeAlreadyOwned,
+            rti1516e::AttributeAcquisitionWasNotRequested,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.16
+    virtual void queryAttributeOwnership
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandle theAttribute)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 7.18
+    virtual bool isAttributeOwnedByFederate
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandle theAttribute)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    //////////////////////////////
+    // Time Management Services //
+    //////////////////////////////
+
+    // 8.2
+    virtual void enableTimeRegulation
+    (rti1516e::LogicalTimeInterval const & theLookahead)
+    throw (rti1516e::TimeRegulationAlreadyEnabled,
+            rti1516e::InvalidLookahead,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::RequestForTimeRegulationPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.4
+    virtual void disableTimeRegulation ()
+    throw (rti1516e::TimeRegulationIsNotEnabled,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.5
+    virtual void enableTimeConstrained ()
+    throw (rti1516e::TimeConstrainedAlreadyEnabled,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::RequestForTimeConstrainedPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.7
+    virtual void disableTimeConstrained ()
+    throw (rti1516e::TimeConstrainedIsNotEnabled,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.8
+    virtual void timeAdvanceRequest
+    (rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::InvalidLogicalTime,
+            rti1516e::LogicalTimeAlreadyPassed,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::RequestForTimeRegulationPending,
+            rti1516e::RequestForTimeConstrainedPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.9
+    virtual void timeAdvanceRequestAvailable
+    (rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::InvalidLogicalTime,
+            rti1516e::LogicalTimeAlreadyPassed,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::RequestForTimeRegulationPending,
+            rti1516e::RequestForTimeConstrainedPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.10
+    virtual void nextMessageRequest
+    (rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::InvalidLogicalTime,
+            rti1516e::LogicalTimeAlreadyPassed,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::RequestForTimeRegulationPending,
+            rti1516e::RequestForTimeConstrainedPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.11
+    virtual void nextMessageRequestAvailable
+    (rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::InvalidLogicalTime,
+            rti1516e::LogicalTimeAlreadyPassed,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::RequestForTimeRegulationPending,
+            rti1516e::RequestForTimeConstrainedPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.12
+    virtual void flushQueueRequest
+    (rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::InvalidLogicalTime,
+            rti1516e::LogicalTimeAlreadyPassed,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::RequestForTimeRegulationPending,
+            rti1516e::RequestForTimeConstrainedPending,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.14
+    virtual void enableAsynchronousDelivery ()
+    throw (rti1516e::AsynchronousDeliveryAlreadyEnabled,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.15
+    virtual void disableAsynchronousDelivery ()
+    throw (rti1516e::AsynchronousDeliveryAlreadyDisabled,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.16
+    virtual bool queryGALT (rti1516e::LogicalTime & theTime)
+    throw (rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.17
+    virtual void queryLogicalTime (rti1516e::LogicalTime & theTime)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.18
+    virtual bool queryLITS (rti1516e::LogicalTime & theTime)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.19
+    virtual void modifyLookahead
+    (rti1516e::LogicalTimeInterval const & theLookahead)
+    throw (rti1516e::TimeRegulationIsNotEnabled,
+            rti1516e::InvalidLookahead,
+            rti1516e::InTimeAdvancingState,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.20
+    virtual void queryLookahead (rti1516e::LogicalTimeInterval & interval)
+    throw (rti1516e::TimeRegulationIsNotEnabled,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.21
+    virtual void retract
+    (rti1516e::MessageRetractionHandle theHandle)
+    throw (rti1516e::InvalidRetractionHandle,
+            rti1516e::TimeRegulationIsNotEnabled,
+            rti1516e::MessageCanNoLongerBeRetracted,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.23
+    virtual void changeAttributeOrderType
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSet const & theAttributes,
+            rti1516e::OrderType theType)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotOwned,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 8.24
+    virtual void changeInteractionOrderType
+    (rti1516e::InteractionClassHandle theClass,
+            rti1516e::OrderType theType)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::InteractionClassNotPublished,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    //////////////////////////////////
+    // Data Distribution Management //
+    //////////////////////////////////
+
+    // 9.2
+    virtual rti1516e::RegionHandle createRegion
+    (rti1516e::DimensionHandleSet const & theDimensions)
+    throw (rti1516e::InvalidDimensionHandle,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.3
+    virtual void commitRegionModifications
+    (rti1516e::RegionHandleSet const & theRegionHandleSet)
+    throw (rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.4
+    virtual void deleteRegion
+    (rti1516e::RegionHandle theRegion)
+    throw (rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::RegionInUseForUpdateOrSubscription,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.5
+    virtual rti1516e::ObjectInstanceHandle registerObjectInstanceWithRegions
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+            theAttributeHandleSetRegionHandleSetPairVector)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::ObjectClassNotPublished,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotPublished,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual rti1516e::ObjectInstanceHandle registerObjectInstanceWithRegions
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+            theAttributeHandleSetRegionHandleSetPairVector,
+            std::wstring const & theObjectInstanceName)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::ObjectClassNotPublished,
+            rti1516e::AttributeNotDefined,
+            rti1516e::AttributeNotPublished,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::ObjectInstanceNameNotReserved,
+            rti1516e::ObjectInstanceNameInUse,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.6
+    virtual void associateRegionsForUpdates
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+            theAttributeHandleSetRegionHandleSetPairVector)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.7
+    virtual void unassociateRegionsForUpdates
+    (rti1516e::ObjectInstanceHandle theObject,
+            rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+            theAttributeHandleSetRegionHandleSetPairVector)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::AttributeNotDefined,
+            rti1516e:: InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.8
+    virtual void subscribeObjectClassAttributesWithRegions
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+            theAttributeHandleSetRegionHandleSetPairVector,
+            bool active = true)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.9
+    virtual void unsubscribeObjectClassAttributesWithRegions
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSetRegionHandleSetPairVector const &
+            theAttributeHandleSetRegionHandleSetPairVector)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.10
+    virtual void subscribeInteractionClassWithRegions
+    (rti1516e::InteractionClassHandle theClass,
+            rti1516e::RegionHandleSet const & theRegionHandleSet,
+            bool active = true)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::FederateServiceInvocationsAreBeingReportedViaMOM,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.11
+    virtual void unsubscribeInteractionClassWithRegions
+    (rti1516e::InteractionClassHandle theClass,
+            rti1516e::RegionHandleSet const & theRegionHandleSet)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.12
+    virtual void sendInteractionWithRegions
+    (rti1516e::InteractionClassHandle theInteraction,
+            rti1516e::ParameterHandleValueMap const & theParameterValues,
+            rti1516e::RegionHandleSet const & theRegionHandleSet,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::InteractionClassNotPublished,
+            rti1516e::InteractionParameterNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual rti1516e::MessageRetractionHandle sendInteractionWithRegions
+    (rti1516e::InteractionClassHandle theInteraction,
+            rti1516e::ParameterHandleValueMap const & theParameterValues,
+            rti1516e::RegionHandleSet const & theRegionHandleSet,
+            rti1516e::VariableLengthData const & theUserSuppliedTag,
+            rti1516e::LogicalTime const & theTime)
+    throw (rti1516e::InteractionClassNotDefined,
+            rti1516e::InteractionClassNotPublished,
+            rti1516e::InteractionParameterNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::InvalidLogicalTime,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 9.13
+    virtual void requestAttributeValueUpdateWithRegions
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandleSetRegionHandleSetPairVector const & 
theSet,
+            rti1516e::VariableLengthData const & theUserSuppliedTag)
+    throw (rti1516e::ObjectClassNotDefined,
+            rti1516e::AttributeNotDefined,
+            rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::InvalidRegionContext,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    //////////////////////////
+    // RTI Support Services //
+    //////////////////////////
+
+    // 10.2
+    virtual rti1516e::ObjectClassHandle getObjectClassHandle
+    (std::wstring const & theName)
+    throw (rti1516e::NameNotFound,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.3
+    virtual std::wstring getObjectClassName
+    (rti1516e::ObjectClassHandle theHandle)
+    throw (rti1516e::InvalidObjectClassHandle,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.4
+    virtual rti1516e::AttributeHandle getAttributeHandle
+    (rti1516e::ObjectClassHandle whichClass,
+            std::wstring const & theAttributeName)
+    throw (rti1516e::InvalidObjectClassHandle,
+            rti1516e::NameNotFound,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.5
+    virtual std::wstring getAttributeName
+    (rti1516e::ObjectClassHandle whichClass,
+            rti1516e::AttributeHandle theHandle)
+    throw (rti1516e::InvalidObjectClassHandle,
+            rti1516e::InvalidAttributeHandle,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.6
+    virtual rti1516e::InteractionClassHandle getInteractionClassHandle
+    (std::wstring const & theName)
+    throw (rti1516e::NameNotFound,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.7
+    virtual std::wstring getInteractionClassName
+    (rti1516e::InteractionClassHandle theHandle)
+    throw (rti1516e::InvalidInteractionClassHandle,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.8
+    virtual rti1516e::ParameterHandle getParameterHandle
+    (rti1516e::InteractionClassHandle whichClass,
+            std::wstring const & theName)
+    throw (rti1516e::InvalidInteractionClassHandle,
+            rti1516e::NameNotFound,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.9
+    virtual std::wstring getParameterName
+    (rti1516e::InteractionClassHandle whichClass,
+            rti1516e::ParameterHandle theHandle)
+    throw (rti1516e::InvalidInteractionClassHandle,
+            rti1516e::InvalidParameterHandle,
+            rti1516e::InteractionParameterNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.10
+    virtual rti1516e::ObjectInstanceHandle getObjectInstanceHandle
+    (std::wstring const & theName)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.11
+    virtual std::wstring getObjectInstanceName
+    (rti1516e::ObjectInstanceHandle theHandle)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.12
+    virtual rti1516e::DimensionHandle getDimensionHandle
+    (std::wstring const & theName)
+    throw (rti1516e::NameNotFound,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.13
+    virtual std::wstring getDimensionName
+    (rti1516e::DimensionHandle theHandle)
+    throw (rti1516e::InvalidDimensionHandle,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.14
+    virtual unsigned long getDimensionUpperBound
+    (rti1516e::DimensionHandle theHandle)
+    throw (rti1516e::InvalidDimensionHandle,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.15
+    virtual rti1516e::DimensionHandleSet 
getAvailableDimensionsForClassAttribute
+    (rti1516e::ObjectClassHandle theClass,
+            rti1516e::AttributeHandle theHandle)
+    throw (rti1516e::InvalidObjectClassHandle,
+            rti1516e::InvalidAttributeHandle,
+            rti1516e::AttributeNotDefined,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.16
+    virtual rti1516e::ObjectClassHandle getKnownObjectClassHandle
+    (rti1516e::ObjectInstanceHandle theObject)
+    throw (rti1516e::ObjectInstanceNotKnown,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.17
+    virtual rti1516e::DimensionHandleSet 
getAvailableDimensionsForInteractionClass
+    (rti1516e::InteractionClassHandle theClass)
+    throw (rti1516e::InvalidInteractionClassHandle,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.18
+    virtual rti1516e::TransportationType getTransportationType
+    (std::wstring const & transportationName)
+    throw (rti1516e::InvalidTransportationName,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.19
+    virtual std::wstring getTransportationName
+    (rti1516e::TransportationType transportationType)
+    throw (rti1516e::InvalidTransportationType,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.20
+    virtual rti1516e::OrderType getOrderType
+    (std::wstring const & orderName)
+    throw (rti1516e::InvalidOrderName,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.21
+    virtual std::wstring getOrderName
+    (rti1516e::OrderType orderType)
+    throw (rti1516e::InvalidOrderType,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.22
+    virtual void enableObjectClassRelevanceAdvisorySwitch ()
+    throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOn,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.23
+    virtual void disableObjectClassRelevanceAdvisorySwitch ()
+    throw (rti1516e::ObjectClassRelevanceAdvisorySwitchIsOff,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.24
+    virtual void enableAttributeRelevanceAdvisorySwitch ()
+    throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOn,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.25
+    virtual void disableAttributeRelevanceAdvisorySwitch ()
+    throw (rti1516e::AttributeRelevanceAdvisorySwitchIsOff,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.26
+    virtual void enableAttributeScopeAdvisorySwitch ()
+    throw (rti1516e::AttributeScopeAdvisorySwitchIsOn,
+            rti1516e::FederateNotExecutionMember,
+           rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.27
+    virtual void disableAttributeScopeAdvisorySwitch ()
+    throw (rti1516e::AttributeScopeAdvisorySwitchIsOff,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.28
+    virtual void enableInteractionRelevanceAdvisorySwitch ()
+    throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOn,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.29
+    virtual void disableInteractionRelevanceAdvisorySwitch ()
+    throw (rti1516e::InteractionRelevanceAdvisorySwitchIsOff,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.30
+    virtual
+    rti1516e::DimensionHandleSet getDimensionHandleSet
+    (rti1516e::RegionHandle theRegionHandle)
+    throw (rti1516e::InvalidRegion,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.31
+    virtual
+    rti1516e::RangeBounds getRangeBounds
+    (rti1516e::RegionHandle theRegionHandle,
+            rti1516e::DimensionHandle theDimensionHandle)
+    throw (rti1516e::InvalidRegion,
+            rti1516e::RegionDoesNotContainSpecifiedDimension,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.32
+    virtual void setRangeBounds
+    (rti1516e::RegionHandle theRegionHandle,
+            rti1516e::DimensionHandle theDimensionHandle,
+            rti1516e::RangeBounds const & theRangeBounds)
+    throw (rti1516e::InvalidRegion,
+            rti1516e::RegionNotCreatedByThisFederate,
+            rti1516e::RegionDoesNotContainSpecifiedDimension,
+            rti1516e::InvalidRangeBound,
+            rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.33
+    virtual unsigned long normalizeFederateHandle
+    (rti1516e::FederateHandle theFederateHandle)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::InvalidFederateHandle,
+            rti1516e::RTIinternalError);
+
+    // 10.34
+    virtual unsigned long normalizeServiceGroup
+    (rti1516e::ServiceGroupIndicator theServiceGroup)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::InvalidServiceGroup,
+            rti1516e::RTIinternalError);
+
+    // 10.37
+    virtual bool evokeCallback(double approximateMinimumTimeInSeconds)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.38
+    virtual bool evokeMultipleCallbacks(double approximateMinimumTimeInSeconds,
+            double approximateMaximumTimeInSeconds)
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::RTIinternalError);
+
+    // 10.39
+    virtual void enableCallbacks ()
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    // 10.40
+    virtual void disableCallbacks ()
+    throw (rti1516e::FederateNotExecutionMember,
+            rti1516e::SaveInProgress,
+            rti1516e::RestoreInProgress,
+            rti1516e::RTIinternalError);
+
+    virtual rti1516e::FederateHandle decodeFederateHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::ObjectClassHandle decodeObjectClassHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::InteractionClassHandle decodeInteractionClassHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::ObjectInstanceHandle decodeObjectInstanceHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::AttributeHandle decodeAttributeHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::ParameterHandle decodeParameterHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::DimensionHandle decodeDimensionHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::MessageRetractionHandle decodeMessageRetractionHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+    virtual rti1516e::RegionHandle decodeRegionHandle(
+            rti1516e::VariableLengthData const & encodedValue) const;
+
+};
+}
+
+#endif // RTI_RTI1516ambassador_h

Index: libRTI/ieee1516-2010/RTIambassadorFactory.cpp
===================================================================
RCS file: libRTI/ieee1516-2010/RTIambassadorFactory.cpp
diff -N libRTI/ieee1516-2010/RTIambassadorFactory.cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libRTI/ieee1516-2010/RTIambassadorFactory.cpp       6 Mar 2014 16:11:32 
-0000       1.1
@@ -0,0 +1,250 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2002-2014  ONERA
+//
+// This file is part of CERTI-libRTI
+//
+// CERTI-libRTI is free software ; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License
+// as published by the Free Software Foundation ; either version 2 of
+// the License, or (at your option) any later version.
+//
+// CERTI-libRTI 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program ; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA
+//
+// ----------------------------------------------------------------------------
+
+#include <RTI/RTIambassadorFactory.h>
+#include <memory>
+#include <iostream>
+#include <cstdlib>
+#include <cerrno>
+#include <cstring>
+#ifndef _WIN32
+#include <csignal>
+#include <unistd.h>
+#endif
+
+#include "PrettyDebug.hh"
+#include "RTIambassadorImplementation.h"
+
+#include "M_Classes.hh"
+
+#include "config.h"
+
+rti1516e::RTIambassadorFactory::RTIambassadorFactory()
+{
+}
+
+rti1516e::RTIambassadorFactory::~RTIambassadorFactory()
+throw ()
+{
+}
+
+namespace {
+static PrettyDebug D1516("LIBRTI1516e", __FILE__);
+static PrettyDebug G1516("GENDOC1516e",__FILE__) ;
+}
+
+std::auto_ptr< rti1516e::RTIambassador >
+rti1516e::RTIambassadorFactory::createRTIambassador(std::vector< std::wstring 
> & args)
+throw (BadInitializationParameter,
+        RTIinternalError)
+        {
+    certi::RTI1516ambassador* p_ambassador(new certi::RTI1516ambassador());
+
+    std::auto_ptr< rti1516e::RTIambassador > ap_ambassador(p_ambassador);
+
+    G1516.Out(pdGendoc,"enter RTIambassador::RTIambassador");
+    PrettyDebug::setFederateName( "LibRTI::UnjoinedFederate" );
+    std::wstringstream msg;
+
+    p_ambassador->privateRefs = new RTI1516ambPrivateRefs();
+
+    p_ambassador->privateRefs->socketUn = new SocketUN(stIgnoreSignal);
+
+    p_ambassador->privateRefs->is_reentrant = false ;
+
+    std::vector<std::string> rtiaList;
+    const char* env = getenv("CERTI_RTIA");
+    if (env && strlen(env))
+        rtiaList.push_back(std::string(env));
+    env = getenv("CERTI_HOME");
+    if (env && strlen(env))
+        rtiaList.push_back(std::string(env) + "/bin/rtia");
+    rtiaList.push_back(PACKAGE_INSTALL_PREFIX "/bin/rtia");
+    rtiaList.push_back("rtia");
+
+#if defined(RTIA_USE_TCP)
+    int port = p_ambassador->privateRefs->socketUn->listenUN();
+    if (port == -1) {
+        D1516.Out( pdError, "Cannot listen to RTIA connection. Abort." );
+        throw rti1516e::RTIinternalError(L"Cannot listen to RTIA connection" );
+    }
+#else
+    int pipeFd = p_ambassador->privateRefs->socketUn->socketpair();
+    if (pipeFd == -1) {
+        D1516.Out( pdError, "Cannot get socketpair to RTIA connection. Abort." 
);
+        throw rti1516e::RTIinternalError( L"Cannot get socketpair to RTIA 
connection" );
+    }
+#endif
+
+#ifdef _WIN32
+    STARTUPINFO si;
+    PROCESS_INFORMATION pi;
+
+    ZeroMemory( &si, sizeof(si) );
+    si.cb = sizeof(si);
+    ZeroMemory( &pi, sizeof(pi) );
+
+#ifndef RTIA_CONSOLE_SHOW
+    /*
+     * Avoid displaying console window
+     * when running RTIA.
+     */
+    si.dwFlags = STARTF_USESHOWWINDOW;
+    si.wShowWindow = SW_HIDE;
+#endif
+
+#if !defined(RTIA_USE_TCP)
+    SOCKET newPipeFd;
+    if (!DuplicateHandle(GetCurrentProcess(),
+            (HANDLE)pipeFd,
+            GetCurrentProcess(),
+            (HANDLE*)&newPipeFd,
+            0,
+            TRUE, // Inheritable
+            DUPLICATE_SAME_ACCESS)) {
+        D1516.Out( pdError, "Cannot duplicate socket for RTIA connection. 
Abort." );
+        throw rti1516e::RTIinternalError( L"Cannot duplicate socket for RTIA 
connection. Abort." );
+    }
+#endif
+
+    bool success = false;
+    for (unsigned i = 0; i < rtiaList.size(); ++i) {
+        std::stringstream stream;
+#if defined(RTIA_USE_TCP)
+        stream << rtiaList[i] << ".exe -p " << port;
+#else
+        stream << rtiaList[i] << ".exe -f " << newPipeFd;
+#endif
+
+        // Start the child process.
+        if (CreateProcess( NULL, // No module name (use command line).
+                (char*)stream.str().c_str(),   // Command line.
+                NULL,                                  // Process handle not 
inheritable.
+                NULL,                                  // Thread handle not 
inheritable.
+                TRUE,                                  // Set handle 
inheritance to TRUE.
+                0,                                     // No creation flags.
+                NULL,                                  // Use parent's 
environment block.
+                NULL,                                  // Use parent's 
starting directory.
+                &si,                                   // Pointer to 
STARTUPINFO structure.
+                &pi ))                                 // Pointer to 
PROCESS_INFORMATION structure.
+        {
+            success = true;
+            break;
+        }
+    }
+    if (!success) {
+        msg << "CreateProcess - GetLastError()=<"
+                << GetLastError() <<"> "
+                << "Cannot connect to RTIA.exe";
+        throw rti1516e::RTIinternalError(msg.str());
+    }
+
+    p_ambassador->privateRefs->handle_RTIA = pi.hProcess;
+
+#if !defined(RTIA_USE_TCP)
+    closesocket(pipeFd);
+    closesocket(newPipeFd);
+#endif
+
+#else
+
+    sigset_t nset, oset;
+    // temporarily block termination signals
+    // note: this is to prevent child processes from receiving termination 
signals
+    sigemptyset(&nset);
+    sigaddset(&nset, SIGINT);
+    sigprocmask(SIG_BLOCK, &nset, &oset);
+
+    switch((p_ambassador->privateRefs->pid_RTIA = fork())) {
+    case -1: // fork failed.
+        perror("fork");
+        // unbock the above blocked signals
+        sigprocmask(SIG_SETMASK, &oset, NULL);
+#if !defined(RTIA_USE_TCP)
+        close(pipeFd);
+#endif
+        throw rti1516e::RTIinternalError(wstringize() << "fork failed in 
RTIambassador constructor");
+        break ;
+
+    case 0: // child process (RTIA).
+        // close all open filedescriptors except the pipe one
+        for (int fdmax = sysconf(_SC_OPEN_MAX), fd = 3; fd < fdmax; ++fd) {
+#if !defined(RTIA_USE_TCP)
+            if (fd == pipeFd)
+                continue;
+#endif
+            close(fd);
+        }
+        for (unsigned i = 0; i < rtiaList.size(); ++i)
+        {
+            std::stringstream stream;
+#if defined(RTIA_USE_TCP)
+            stream << port;
+            execlp(rtiaList[i].c_str(), rtiaList[i].c_str(), "-p", 
stream.str().c_str(), NULL);
+#else
+            stream << pipeFd;
+            execlp(rtiaList[i].c_str(), rtiaList[i].c_str(), "-f", 
stream.str().c_str(), NULL);
+#endif
+        }
+        // unbock the above blocked signals
+        sigprocmask(SIG_SETMASK, &oset, NULL);
+        msg << "Could not launch RTIA process (execlp): "
+                << strerror(errno)
+                << std::endl
+                << "Maybe RTIA is not in search PATH environment.";
+        throw rti1516e::RTIinternalError(msg.str().c_str());
+
+    default: // father process (Federe).
+        // unbock the above blocked signals
+        sigprocmask(SIG_SETMASK, &oset, NULL);
+#if !defined(RTIA_USE_TCP)
+        close(pipeFd);
+#endif
+        break ;
+    }
+#endif
+
+#if defined(RTIA_USE_TCP)
+    if (p_ambassador->privateRefs->socketUn->acceptUN(10*1000) == -1) {
+#ifdef _WIN32
+        TerminateProcess(p_ambassador->privateRefs->handle_RTIA, 0);
+#else
+        kill(p_ambassador->privateRefs->pid_RTIA, SIGINT );
+#endif
+        throw rti1516e::RTIinternalError( wstringize() << "Cannot connect to 
RTIA" );
+    }
+#endif
+
+    certi::M_Open_Connexion req, rep ;
+    req.setVersionMajor(CERTI_Message::versionMajor);
+    req.setVersionMinor(CERTI_Message::versionMinor);
+
+    G1516.Out(pdGendoc,"        ====>executeService OPEN_CONNEXION");
+    p_ambassador->privateRefs->executeService(&req, &rep);
+
+    G1516.Out(pdGendoc,"exit  RTIambassador::RTIambassador");
+
+    return ap_ambassador;
+        }
+
+//} // end namespace rti1516



reply via email to

[Prev in Thread] Current Thread [Next in Thread]