certi-cvs
[Top][All Lists]
Advanced

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

[certi-cvs] certi libRTI/RTI1516ambassadorFactory.cpp libRT...


From: certi-cvs
Subject: [certi-cvs] certi libRTI/RTI1516ambassadorFactory.cpp libRT...
Date: Mon, 31 May 2010 09:33:27 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      10/05/31 09:33:26

Modified files:
        libRTI         : RTI1516ambassadorFactory.cpp 
                         RTI1516HandleImplementation.h 
                         RTI1516fedTime.cpp RTI1516ambassador.h 
                         RTI1516ambassador.cpp RTI1516Handle.cpp 
                         RTI1516ambPrivateRefs.cpp RTI1516fedTime.h 
                         RTI1516HandleImplementation.cpp 
        RTIG           : FederationsList.cc Federation.cc 
                         FederationsList.hh RTIG_processing.cc RTIG.hh 
                         Federation.hh 
        RTIA           : Statistics.cc ObjectManagement.cc 
                         DataDistribution.hh RTIA_federate.cc 
                         DataDistribution.cc TimeManagement.cc 
                         ObjectManagement.hh 
        libCERTI       : RootObject.hh Exception.cc CMakeLists.txt 
                         Exception.hh ObjectSet.cc ObjectSet.hh 
                         RootObject.cc 
        include/RTI    : SpecificConfig.h 
Added files:
        libCERTI       : NameReservation.hh NameReservation.cc 

Log message:
        Merge-in (with modification) the IEEE1516 work of May 27th
        from Jeroen.
        This check-in does not include the STATIC lib trick.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambassadorFactory.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516HandleImplementation.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516fedTime.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambassador.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambassador.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516Handle.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516ambPrivateRefs.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516fedTime.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/libRTI/RTI1516HandleImplementation.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/FederationsList.cc?cvsroot=certi&r1=3.70&r2=3.71
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.cc?cvsroot=certi&r1=3.128&r2=3.129
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/FederationsList.hh?cvsroot=certi&r1=3.54&r2=3.55
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/RTIG_processing.cc?cvsroot=certi&r1=3.102&r2=3.103
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/RTIG.hh?cvsroot=certi&r1=3.33&r2=3.34
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.hh?cvsroot=certi&r1=3.65&r2=3.66
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/Statistics.cc?cvsroot=certi&r1=3.22&r2=3.23
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/ObjectManagement.cc?cvsroot=certi&r1=3.69&r2=3.70
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/DataDistribution.hh?cvsroot=certi&r1=3.20&r2=3.21
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA_federate.cc?cvsroot=certi&r1=3.108&r2=3.109
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/DataDistribution.cc?cvsroot=certi&r1=3.35&r2=3.36
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/TimeManagement.cc?cvsroot=certi&r1=3.58&r2=3.59
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/ObjectManagement.hh?cvsroot=certi&r1=3.34&r2=3.35
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/RootObject.hh?cvsroot=certi&r1=3.35&r2=3.36
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Exception.cc?cvsroot=certi&r1=3.20&r2=3.21
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/CMakeLists.txt?cvsroot=certi&r1=1.35&r2=1.36
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Exception.hh?cvsroot=certi&r1=3.10&r2=3.11
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectSet.cc?cvsroot=certi&r1=3.32&r2=3.33
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectSet.hh?cvsroot=certi&r1=3.17&r2=3.18
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/RootObject.cc?cvsroot=certi&r1=3.50&r2=3.51
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/NameReservation.hh?cvsroot=certi&rev=3.1
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/NameReservation.cc?cvsroot=certi&rev=3.1
http://cvs.savannah.gnu.org/viewcvs/certi/include/RTI/SpecificConfig.h?cvsroot=certi&r1=1.2&r2=1.3

Patches:
Index: libRTI/RTI1516ambassadorFactory.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambassadorFactory.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambassadorFactory.cpp 28 Apr 2010 18:48:30 -0000      1.1
+++ libRTI/RTI1516ambassadorFactory.cpp 31 May 2010 09:33:25 -0000      1.2
@@ -6,7 +6,7 @@
 #include <cstdlib>
 #include <cerrno>
 #include <cstring>
-#if not defined(_WIN32)
+#ifndef _WIN32
 #include <csignal>
 #endif
 

Index: libRTI/RTI1516HandleImplementation.h
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516HandleImplementation.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516HandleImplementation.h        28 Apr 2010 18:48:30 -0000      
1.1
+++ libRTI/RTI1516HandleImplementation.h        31 May 2010 09:33:25 -0000      
1.2
@@ -37,9 +37,6 @@
           virtual ~HandleImplementation()                                      
          
                  throw();                                                  
                                                                        
-          virtual HandleImplementation &                                       
          
-                 operator=(HandleImplementation const & rhs);                  
      
-                                                                       
           /* Indicates whether this handle is valid                 */ 
           virtual bool isValid() const;                                        
                                                                        

Index: libRTI/RTI1516fedTime.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516fedTime.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516fedTime.cpp   28 Apr 2010 18:48:30 -0000      1.1
+++ libRTI/RTI1516fedTime.cpp   31 May 2010 09:33:25 -0000      1.2
@@ -11,6 +11,21 @@
 
 #include "certi.hh"
 
+rti1516::LogicalTime &
+rti1516::LogicalTime::operator=(rti1516::LogicalTime const & value)
+throw (rti1516::InvalidLogicalTime)
+{
+       throw rti1516::InvalidLogicalTime(L"Operator should be overloaded");
+}
+
+rti1516::LogicalTimeInterval &
+rti1516::LogicalTimeInterval::operator=(rti1516::LogicalTimeInterval const & 
value)
+throw (rti1516::InvalidLogicalTimeInterval)
+{
+       throw rti1516::InvalidLogicalTimeInterval(L"Operator should be 
overloaded");
+}
+
+
 /////////////////////////////////////////////////////////////
 //------------------- RTI1516fedTime ----------------------//
 /////////////////////////////////////////////////////////////
@@ -82,7 +97,8 @@
                if (other == 0)
                {
 #if defined(_WIN32) && defined(_MSC_VER)
-                       throw std::wstring(L"Different LogicalTime 
implementation");
+                       //throw std::wstring(L"Different LogicalTime 
implementation");'
+                       throw rti1516::InvalidLogicalTime(L"Different 
LogicalTime implementation");
 #else
                        //throw rti1516::InvalidLogicalTime(L"Different 
LogicalTime implementation");
 #endif

Index: libRTI/RTI1516ambassador.h
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambassador.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambassador.h  28 Apr 2010 18:48:30 -0000      1.1
+++ libRTI/RTI1516ambassador.h  31 May 2010 09:33:25 -0000      1.2
@@ -20,6 +20,17 @@
        private:
                RTI1516ambPrivateRefs* privateRefs ;
 
+               // Helper functions
+               template<typename T> void
+                       assignAHSAndExecuteService(const 
rti1516::AttributeHandleSet &AHS, T &req, T &rep);
+               template<typename T> void
+                       assignPHVMAndExecuteService(const 
rti1516::ParameterHandleValueMap &PHVM, T &req, T &rep);
+               template<typename T> void 
+                       assignAHVMAndExecuteService(const 
rti1516::AttributeHandleValueMap &AHVM, T &req, T &rep);
+               // Helper function for CallBacks
+               bool __tick_kernel(bool, TickTime, TickTime)
+                       throw (SpecifiedSaveLabelDoesNotExist, 
RTIinternalError);
+
        protected:
                RTI1516ambassador()
                        throw ();

Index: libRTI/RTI1516ambassador.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambassador.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambassador.cpp        28 Apr 2010 18:48:30 -0000      1.1
+++ libRTI/RTI1516ambassador.cpp        31 May 2010 09:33:25 -0000      1.2
@@ -1,7 +1,7 @@
 #include "RTI1516ambassador.h"
 #include <RTI/RangeBounds.h>
 
-#if not defined(_WIN32)
+#ifndef _WIN32
 #include <cstdlib>
 #include <cstring>
 #endif
@@ -13,6 +13,7 @@
 #include "RTI1516HandleFactory.h"
 #include "RTI1516fedTime.h"
 
+#include <algorithm>
 
 namespace {
 
@@ -23,48 +24,109 @@
 
 namespace rti1516
 {
+       /* Deletor Object */
+       template <class T>
+       struct Deletor {
+               void operator() (T* e) {delete e;};
+       };
+
        /* Helper functions */
        template<typename T>
        void
-       assignPHVMToRequest(const rti1516::ParameterHandleValueMap &PHVM, T 
request) {
+       RTI1516ambassador::assignPHVMAndExecuteService(const 
rti1516::ParameterHandleValueMap &PHVM, T &req, T &rep) {
 
-               uint32_t size = PHVM.size();
-               request.setParametersSize(size);
-               request.setValuesSize(size);
-       
-               rti1516::ParameterHandleValueMap::const_iterator iter; 
-               int index = 0;
-               for (iter=PHVM.begin(); iter != PHVM.end(); ++iter) {
-                       certi::ParameterHandle* certiHandle = 
(certi::ParameterHandle*) iter->first.encode().data();
-                       request.setParameters(*certiHandle, index);
-
-                       char* paramValue;
-                       // TODO Fix memory leak!
-                       paramValue = (char*)malloc(iter->second.size());
-                       memcpy(paramValue, iter->second.data(), 
iter->second.size());
-                       request.setValues(std::string(paramValue), index);
-                       index++;
+               req.setParametersSize(PHVM.size());
+               req.setValuesSize(PHVM.size());
+               std::vector<certi::ParameterValue_t*> parameterValueVector;
+               parameterValueVector.resize(PHVM.size());
+               uint32_t i = 0;
+               for ( rti1516::ParameterHandleValueMap::const_iterator it = 
PHVM.begin(); it != PHVM.end(); it++, ++i)
+               {
+                       
req.setParameters(ParameterHandleFriend::toCertiHandle(it->first),i);
+                       char *buf = (char*) calloc(it->second.size() + 1, 
sizeof(char));
+                       memcpy(buf, it->second.data(), it->second.size());
+                       certi::ParameterValue_t* paramValue = new 
certi::ParameterValue_t(buf);
+                       free(buf);
+                       parameterValueVector[i] = paramValue;
+                       req.setValues(*paramValue, i);  
+               }
+
+               try {
+                       privateRefs->executeService(&req, &rep);
+               } catch (...) {
+                       struct Deletor<certi::ParameterValue_t> 
paramValueDeletor;
+                       //delete parameter values
+                       
std::for_each(parameterValueVector.begin(),parameterValueVector.end(),paramValueDeletor);
+                       throw;
                }
        } 
 
        template<typename T>
        void
-       assignAHSToRequest(const rti1516::AttributeHandleSet &AHS, T request) {
-               request.setAttributesSize(AHS.size());
+       RTI1516ambassador::assignAHVMAndExecuteService(const 
rti1516::AttributeHandleValueMap &AHVM, T &req, T &rep) {
+
+               req.setAttributesSize(AHVM.size());
+               req.setValuesSize(AHVM.size());
+               struct Deletor<certi::AttributeValue_t> attrValueDeletor;
+               std::vector<certi::AttributeValue_t*> attributeValueVector;
+               attributeValueVector.resize(AHVM.size());
+               uint32_t i = 0;
+               for ( rti1516::AttributeHandleValueMap::const_iterator it = 
AHVM.begin(); it != AHVM.end(); it++, ++i)
+               {
+                       
req.setAttributes(AttributeHandleFriend::toCertiHandle(it->first),i);
+                       char *buf = (char*) calloc(it->second.size() + 1, 
sizeof(char));
+                       memcpy(buf, it->second.data(), it->second.size());
+                       certi::AttributeValue_t* attrValue = new 
certi::AttributeValue_t(buf);
+                       free(buf);
+                       attributeValueVector[i] = attrValue;
+                       req.setValues(*attrValue, i);  
+               }
+
+               try {
+                       privateRefs->executeService(&req, &rep);
+               } catch (...) {
+                       //delete attribute values
+                       
std::for_each(attributeValueVector.begin(),attributeValueVector.end(),attrValueDeletor);
+                       throw;
+               }
+
+               //delete attribute values
+               
std::for_each(attributeValueVector.begin(),attributeValueVector.end(),attrValueDeletor);
+       }
+
+       template<typename T>
+       void
+       RTI1516ambassador::assignAHSAndExecuteService(const 
rti1516::AttributeHandleSet &AHS, T &req, T &rep) {
+               req.setAttributesSize(AHS.size());
+               struct Deletor<certi::AttributeHandle> attrHandleDeletor;
+               std::vector<certi::AttributeHandle*> attributeHandleVector;
+               attributeHandleVector.resize(AHS.size());
                uint32_t i = 0;
                for ( rti1516::AttributeHandleSet::const_iterator it = 
AHS.begin(); it != AHS.end(); it++, ++i)
                {
-                       
request.setAttributes(AttributeHandleFriend::toCertiHandle(*it),i);
+                       certi::AttributeHandle certiHandle = 
AttributeHandleFriend::toCertiHandle(*it);
+                       req.setAttributes(certiHandle,i);
+                       attributeHandleVector[i] = &certiHandle;
                }
+
+               try {
+                       privateRefs->executeService(&req, &rep);
+               } catch (...) {
+                       //delete attribute handles
+                       
std::for_each(attributeHandleVector.begin(),attributeHandleVector.end(),attrHandleDeletor);
+                       throw;
+               }
+
+               //delete attribute handles
+               
std::for_each(attributeHandleVector.begin(),attributeHandleVector.end(),attrHandleDeletor);
        }
 
        std::string varLengthDataAsString(VariableLengthData varLengthData) {
-               char* str;
-               // TODO Fix memory leak!
-               // TODO Fix loss of data after '\0' character
-               str = (char*)malloc(varLengthData.size());
-               memcpy(str, varLengthData.data(), varLengthData.size());
-               return std::string(str);
+               char *buf = (char*) calloc(varLengthData.size() + 1, 
sizeof(char));
+               memcpy(buf, varLengthData.data(), varLengthData.size());
+               std::string retVal(buf);
+               free(buf);
+               return retVal;
        }
 
        certi::TransportType 
toCertiTransportationType(rti1516::TransportationType theType) {
@@ -79,8 +141,6 @@
        rti1516::OrderType toRTI1516OrderType(certi::OrderType theType) {
                return (theType == certi::RECEIVE) ? rti1516::RECEIVE : 
rti1516::TIMESTAMP;
        }
-               
-
        /* end of Helper functions */
 
        RTIambassador::RTIambassador() throw()
@@ -108,6 +168,82 @@
                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 (rti1516::SpecifiedSaveLabelDoesNotExist,
+                       rti1516::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 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 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 RTIinternalError(message);
+                       }
+               } // while(1)
+       }
+
        // 4.2
        void RTI1516ambassador::createFederationExecution
                (std::wstring const & federationExecutionName,
@@ -683,7 +819,6 @@
                RestoreInProgress,
                RTIinternalError)
        { 
-               /* TODO */ 
                M_Reserve_Object_Instance_Name req, rep;
 
                std::string objInstanceName(theObjectInstanceName.begin(), 
theObjectInstanceName.end());
@@ -754,18 +889,8 @@
 
                req.setTag(varLengthDataAsString(theUserSuppliedTag));
 
-               req.setAttributesSize(theAttributeValues.size());
-               req.setValuesSize(theAttributeValues.size());
-               uint32_t i = 0;
-               for ( rti1516::AttributeHandleValueMap::const_iterator it = 
theAttributeValues.begin(); it != theAttributeValues.end(); it++, ++i)
-               {
-                       
req.setAttributes(AttributeHandleFriend::toCertiHandle(it->first),i);
-                       certi::AttributeValue_t attrValue;
-                       memcpy(&attrValue, it->second.data(), 
it->second.size());
-                       req.setValues(attrValue, i);  
-               }
+               assignAHVMAndExecuteService(theAttributeValues, req, rep);
 
-               privateRefs->executeService(&req, &rep);
                G.Out(pdGendoc,"exit  RTI1516ambassador::updateAttributeValues 
without time");
        }
 
@@ -798,18 +923,8 @@
 
                req.setTag(varLengthDataAsString(theUserSuppliedTag));
                
-               req.setAttributesSize(theAttributeValues.size());
-               req.setValuesSize(theAttributeValues.size());
-               uint32_t i = 0;
-               for ( rti1516::AttributeHandleValueMap::const_iterator it = 
theAttributeValues.begin(); it != theAttributeValues.end(); it++, ++i)
-               {
-                       
req.setAttributes(AttributeHandleFriend::toCertiHandle(it->first),i);
-                       certi::AttributeValue_t attrValue;
-                       memcpy(&attrValue, it->second.data(), 
it->second.size());
-                       req.setValues(attrValue, i);  
-               }
+               assignAHVMAndExecuteService(theAttributeValues, req, rep);
 
-               privateRefs->executeService(&req, &rep);
                G.Out(pdGendoc,"return  
RTI1516ambassador::updateAttributeValues with time");
                certi::FederateHandle certiHandle = 
rep.getEventRetraction().getSendingFederate();
                uint64_t serialNum = rep.getEventRetraction().getSN();
@@ -840,11 +955,9 @@
                }
 
                req.setTag(varLengthDataAsString(theUserSuppliedTag));
-
-               assignPHVMToRequest(theParameterValues,req);
-               
                req.setRegion(0);
-               privateRefs->executeService(&req, &rep);
+               
+               assignPHVMAndExecuteService(theParameterValues, req, rep);
        }
 
        MessageRetractionHandle RTI1516ambassador::sendInteraction
@@ -874,12 +987,9 @@
                }
 
                req.setTag(varLengthDataAsString(theUserSuppliedTag));
-
-               assignPHVMToRequest(theParameterValues,req);
-               
                req.setRegion(0);
 
-               privateRefs->executeService(&req, &rep);
+               assignPHVMAndExecuteService(theParameterValues, req, rep);
 
                certi::FederateHandle certiHandle = 
rep.getEventRetraction().getSendingFederate();
                uint64_t serialNr = rep.getEventRetraction().getSN();
@@ -1052,9 +1162,8 @@
                G.Out(pdGendoc,"enter 
RTI1516ambassador::requestClassAttributeValueUpdate");
                
req.setObjectClass(rti1516::ObjectClassHandleFriend::toCertiHandle(theClass));
 
-               assignAHSToRequest(theAttributes, req);
+               assignAHSAndExecuteService(theAttributes, req, rep);
 
-               privateRefs->executeService(&req, &rep);
                G.Out(pdGendoc,"exit 
RTI1516ambassador::requestClassAttributeValueUpdate");
        }
 
@@ -1215,9 +1324,8 @@
                M_Attribute_Ownership_Release_Response req, rep ;
 
                
req.setObject(rti1516::ObjectInstanceHandleFriend::toCertiHandle(theObject));
-               assignAHSToRequest(theAttributes, req);
 
-               privateRefs->executeService(&req, &rep);
+               assignAHSAndExecuteService(theAttributes, req, rep);
 
                if (rep.getExceptionType() == e_NO_EXCEPTION) {
                        theDivestedAttributes.clear();
@@ -1343,6 +1451,7 @@
                
//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
                double * lookAheadTime = (double*) theLookahead.encode().data();
                req.setLookahead(*lookAheadTime);
 
@@ -1484,6 +1593,7 @@
                RestoreInProgress,
                RTIinternalError)
        { 
+               // JvY: Implementation copied from previous CERTI 
implementation, including immediate throw.
                throw RTIinternalError(L"Unimplemented Service 
flushQueueRequest");
                M_Flush_Queue_Request req, rep ;
 
@@ -1533,11 +1643,16 @@
 
                privateRefs->executeService(&req, &rep);
 
+               //TODO JRE: goed testen of deze return value wel klopt!
+               certi::FederationTime fedTime = rep.getDate();
+               if (fedTime == NULL || fedTime.getTime() == 0) {
+                       return false;
+               }       
+
+               // JvY: TODO Controleren of dit blijft werken met andere 
tijdsimplementaties
                certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
 
-               //TODO JRE: return value???
-               throw RTIinternalError(L"Unimplemented Service queryGALT");
-               return false;
+               return true;
        }
 
        // 8.17
@@ -1551,6 +1666,7 @@
 
                privateRefs->executeService(&req, &rep);
 
+               // JvY: TODO Controleren of dit blijft werken met andere 
tijdsimplementaties
                certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
        }
 
@@ -1566,11 +1682,15 @@
 
                privateRefs->executeService(&req, &rep);
 
+               //TODO JRE: goed testen of deze return value wel klopt!
+               certi::FederationTime fedTime = rep.getDate();
+               if (fedTime == NULL || fedTime.getTime() == 0) {
+                       return false;
+               }
+               // JvY: TODO Controleren of dit blijft werken met andere 
tijdsimplementaties
                certi_cast<RTI1516fedTime>()(theTime) = rep.getDate().getTime();
 
-               //TODO JRE: return value???
-               throw RTIinternalError(L"Unimplemented Service queryLITS");
-               return false;
+               return true;
        }
 
        // 8.19
@@ -1637,9 +1757,8 @@
 
                
req.setObject(rti1516::ObjectInstanceHandleFriend::toCertiHandle(theObject));
                req.setOrder(rti1516::toCertiOrderType(theType));
-               assignAHSToRequest(theAttributes, req);
 
-               privateRefs->executeService(&req, &rep);
+               assignAHSAndExecuteService(theAttributes, req, rep);
        }
 
        // 8.24
@@ -1967,9 +2086,7 @@
                }
 
                std::string nameString = rep.getClassName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               // Copy string to wstring.
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end()); 
 
                //return hla_strdup(rep.getClassName());
                return nameWString;
@@ -2047,8 +2164,7 @@
                //return hla_strdup(rep.getAttributeName());
 
                std::string nameString = rep.getAttributeName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end());
 
                return nameWString;
        }
@@ -2093,8 +2209,7 @@
 
                //return hla_strdup(rep.getClassName());
                std::string nameString = rep.getClassName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end());
 
                return nameWString;
        }
@@ -2159,8 +2274,7 @@
 
                //return hla_strdup(rep.getParameterName());
                std::string nameString = rep.getParameterName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end());
 
                return nameWString;
        }
@@ -2193,8 +2307,7 @@
 
                //return hla_strdup(rep.getObjectInstanceName());
                std::string nameString = rep.getObjectInstanceName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end());
 
                return nameWString;
        }
@@ -2229,8 +2342,7 @@
                privateRefs->executeService(&req, &rep);
                //return hla_strdup(rep.getDimensionName());
                std::string nameString = rep.getDimensionName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end());
 
                return nameWString;
        }
@@ -2329,8 +2441,7 @@
 
                //return hla_strdup(rep.getTransportationName());
                std::string nameString = rep.getTransportationName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end());
 
                return nameWString;
        }
@@ -2365,8 +2476,7 @@
                
                //return hla_strdup(rep.getOrderingName());
                std::string nameString = rep.getOrderingName();
-               std::wstring nameWString(nameString.length(), L' '); // Make 
room for characters
-               std::copy(nameString.begin(), nameString.end(), 
nameWString.begin());
+               std::wstring nameWString(nameString.begin(), nameString.end());
 
                return nameWString;
        }
@@ -2688,9 +2798,7 @@
                throw (FederateNotExecutionMember,
                RTIinternalError)
        { 
-               /* TODO */ 
-               // Copy here from the RTIambassador.cc:tick() (and related 
functions)
-               throw RTIinternalError(L"Not yet implemented");
+               return __tick_kernel(false, approximateMinimumTimeInSeconds, 
approximateMinimumTimeInSeconds);
        }
 
        // 10.38
@@ -2699,9 +2807,7 @@
                throw (FederateNotExecutionMember,
                RTIinternalError)
        { 
-               /* TODO */ 
-               // Copy here from the RTIambassador.cc:tick() (and related 
functions)
-               throw RTIinternalError(L"Not yet implemented");
+               return __tick_kernel(true, approximateMinimumTimeInSeconds, 
approximateMaximumTimeInSeconds);
        }
 
        // 10.39
@@ -2712,6 +2818,7 @@
                RTIinternalError)
        { 
                /* TODO */ 
+               throw RTIinternalError(L"Not yet implemented");
        }
 
        // 10.40
@@ -2722,6 +2829,7 @@
                RTIinternalError)
        { 
                /* TODO */ 
+               throw RTIinternalError(L"Not yet implemented");
        }
 
        FederateHandle RTI1516ambassador::decodeFederateHandle(

Index: libRTI/RTI1516Handle.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516Handle.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516Handle.cpp    28 Apr 2010 18:48:30 -0000      1.1
+++ libRTI/RTI1516Handle.cpp    31 May 2010 09:33:25 -0000      1.2
@@ -1,3 +1,4 @@
+#include <sstream>
 #include <RTI/Handle.h>
 #include "RTI1516HandleImplementation.h"
 
@@ -105,7 +106,11 @@
                                                                     \
        std::wstring HandleKind::toString() const                    \
        {                                                            \
-               return L"";                                              \
+               if (_impl == NULL) return L"";                                  
                \
+               std::wstring implStr = _impl->toString();                       
        \
+               std::wstringstream ss;                                          
                        \
+               ss << #HandleKind << "_" << implStr;                            
        \
+               return ss.str();                                        \
        }                                                            \
                                                                     \
        const HandleKind##Implementation* HandleKind::getImplementation() const 
\

Index: libRTI/RTI1516ambPrivateRefs.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516ambPrivateRefs.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516ambPrivateRefs.cpp    28 Apr 2010 18:48:31 -0000      1.1
+++ libRTI/RTI1516ambPrivateRefs.cpp    31 May 2010 09:33:25 -0000      1.2
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RTI1516ambPrivateRefs.cpp,v 1.1 2010/04/28 18:48:31 erk Exp $
+// $Id: RTI1516ambPrivateRefs.cpp,v 1.2 2010/05/31 09:33:25 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -710,6 +710,12 @@
                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;
@@ -1172,9 +1178,31 @@
                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: RTI1516ambPrivateRefs.cpp,v 1.1 2010/04/28 18:48:31 erk Exp $
+// $Id: RTI1516ambPrivateRefs.cpp,v 1.2 2010/05/31 09:33:25 erk Exp $

Index: libRTI/RTI1516fedTime.h
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516fedTime.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516fedTime.h     28 Apr 2010 18:48:30 -0000      1.1
+++ libRTI/RTI1516fedTime.h     31 May 2010 09:33:25 -0000      1.2
@@ -5,19 +5,6 @@
 #include <RTI/certiLogicalTimeInterval.h>
 #include <RTI/certiLogicalTimeFactory.h>
 
-// FIXME Eric-->Jeroen why do we need this here since
-// the export MACRO should be defined in SpecificConfig.h ?
-#if defined(_WIN32)
-   #if defined(BUILDING_FEDTIME)
-     // define the proper qualifiers to import/export symbols from/to DLL
-     #define RTI_EXPORT_FEDTIME __declspec(dllexport)
-   #else // !BUILDING_FEDTIME
-     #define RTI_EXPORT_FEDTIME __declspec(dllimport)
-   #endif // BUILDING_FEDTIME
-#else
-   #define RTI_EXPORT_FEDTIME
-#endif // _WIN32
-
 namespace rti1516 {
        class VariableLengthData;
 }
@@ -94,6 +81,7 @@
 
        // Generates an encoded value that can be used to send
        // LogicalTimes to other federates in updates or interactions
+       // Not implemented.
        virtual
                rti1516::VariableLengthData 
                encode() const;
@@ -109,6 +97,7 @@
                throw (rti1516::CouldNotEncode);
 
        // Decode encodedLogicalTime into self
+       // Not implemented.
        virtual 
                void 
                decode(rti1516::VariableLengthData const & encodedLogicalTime)
@@ -227,6 +216,7 @@
 
        // Generates an encoded value that can be used to send
        // LogicalTimeIntervals to other federates in updates or interactions
+       // Not implemented.
        virtual 
                rti1516::VariableLengthData 
                encode() const;
@@ -242,6 +232,7 @@
                throw (rti1516::CouldNotEncode);
 
        // Decode encodedValue into self
+       // Not implemented.
        virtual 
                void 
                decode(rti1516::VariableLengthData const & encodedValue)

Index: libRTI/RTI1516HandleImplementation.cpp
===================================================================
RCS file: /sources/certi/certi/libRTI/RTI1516HandleImplementation.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- libRTI/RTI1516HandleImplementation.cpp      28 Apr 2010 18:48:30 -0000      
1.1
+++ libRTI/RTI1516HandleImplementation.cpp      31 May 2010 09:33:25 -0000      
1.2
@@ -25,7 +25,7 @@
                }
 
                memcpy(&val, encodedValue.data(), size);
-               for(int 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;                                      
@@ -48,15 +48,6 @@
                _value = rhs._value;                                     
        }                                                            
                                                                     
-       HandleImplementation & 
HandleImplementation::operator=(HandleImplementation const & rhs)               
         
-       {                                                            
-               if (this != &rhs)                                        
-               {                                                        
-                       _value = rhs._value;                                 
-               }                                                        
-               return *this;                                            
-       }                                                            
-                                                                    
        /* Indicates whether this handle is valid                 */ 
        bool HandleImplementation::isValid() const                              
      
        {                                                            
@@ -90,7 +81,7 @@
                                                                     
                unsigned long val = _value;                              
                char *buf = (char *) buffer;                             
-               for(int i = 0; i < sizeof(_value); i++)                  
+               for(uint32_t i = 0; i < sizeof(_value); i++)
                {                                                        
                        buf[sizeof(_value)-i-1] = (char) val & 0xFF;           
                        val = val >> 8;                                      
@@ -195,7 +186,7 @@
        memcpy(&val2, (ULong*)encodedValue.data() + 1 , size);
        
        // _value
-       for(int i = 0; i < sizeof(val1); i++)                  
+       for(uint32_t i = 0; i < sizeof(val1); i++)
        {                       
                buf1[size-i-1] = (char) val1 & 0xFF;           
                val1 = val1 >> 8;                                      
@@ -206,7 +197,7 @@
        _value = newValue;
 
        // _serialNum
-       for(int i = 0; i < sizeof(val2); i++)                  
+       for(uint32_t i = 0; i < sizeof(val2); i++)
        {                       
                buf2[size-i-1] = (char) val2 & 0xFF;           
                val2 = val2 >> 8;                                      
@@ -273,12 +264,12 @@
        unsigned long val = _value;    
        unsigned long serialNum = _serialNum;      
        char *buf = (char *) buffer;                             
-       for(int i = 0; i < sizeof(_value); i++)                  
+       for(uint32_t i = 0; i < sizeof(_value); i++)
        {                                                        
                buf[sizeof(_value)-i-1] = (char) val & 0xFF;           
                val = val >> 8;                                      
        }   
-       for(int i = 0; i < sizeof(_serialNum); i++)                  
+       for(uint32_t i = 0; i < sizeof(_serialNum); i++)
        {                                                        
                buf[sizeof(_value)+sizeof(_serialNum)-i-1] = (char) serialNum & 
0xFF;           
                serialNum = serialNum >> 8;                                     
 

Index: RTIG/FederationsList.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/FederationsList.cc,v
retrieving revision 3.70
retrieving revision 3.71
diff -u -b -r3.70 -r3.71
--- RTIG/FederationsList.cc     19 Mar 2010 13:54:03 -0000      3.70
+++ RTIG/FederationsList.cc     31 May 2010 09:33:25 -0000      3.71
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: FederationsList.cc,v 3.70 2010/03/19 13:54:03 erk Exp $
+// $Id: FederationsList.cc,v 3.71 2010/05/31 09:33:25 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -1393,7 +1393,29 @@
     return federation->requestObjectOwner(federate, id, attributes, list_size);
 }
 
+void
+FederationsList::reserveObjectInstanceName(Handle federationHandle,
+                                                                          
FederateHandle the_federate,
+                                                                          
std::string newObjName)
+               throw(IllegalName,
+                     FederateNotExecutionMember,
+                     SaveInProgress,
+                     RestoreInProgress,
+                     RTIinternalError)
+
+{
+    G.Out(pdGendoc,"enter FederationsList::reserveObjectInstanceName");
+
+    // It may throw FederationExecutionDoesNotExist
+    Federation *federation = searchFederation(federationHandle);
+
+    federation->reserveObjectInstanceName(the_federate, newObjName);
+    G.Out(pdGendoc,"exit  FederationsList::federateRestoreStatus");
+}
+
+
+
 }} // certi::rtig
 
-// EOF $Id: FederationsList.cc,v 3.70 2010/03/19 13:54:03 erk Exp $
+// EOF $Id: FederationsList.cc,v 3.71 2010/05/31 09:33:25 erk Exp $
 

Index: RTIG/Federation.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.cc,v
retrieving revision 3.128
retrieving revision 3.129
diff -u -b -r3.128 -r3.129
--- RTIG/Federation.cc  28 Apr 2010 18:48:31 -0000      3.128
+++ RTIG/Federation.cc  31 May 2010 09:33:26 -0000      3.129
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: Federation.cc,v 3.128 2010/04/28 18:48:31 erk Exp $
+// $Id: Federation.cc,v 3.129 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -1559,6 +1559,47 @@
        G.Out(pdGendoc,"exit  Federation::publishObject");
                }
 
+
+void 
+Federation::reserveObjectInstanceName(FederateHandle theFederateHandle,
+                                  std::string newObjName)
+       throw (IllegalName,
+              SaveInProgress,
+              RestoreInProgress,
+              RTIinternalError)
+{
+       Socket * socket ;
+       NetworkMessage *msg;
+
+       bool reservation_ok = false;
+
+       reservation_ok = root->reserveObjectInstanceName(theFederateHandle, 
newObjName);
+
+       if (reservation_ok)
+       {
+               msg = 
NM_Factory::create(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED);
+               NM_Reserve_Object_Instance_Name_Succeeded *okMsg = 
dynamic_cast<NM_Reserve_Object_Instance_Name_Succeeded *>(msg);
+
+               okMsg->setObjectName(newObjName);
+               G.Out(pdGendoc,"             =====> send message R_O_I_N_S to 
federate %d",msg->getFederate());
+       } else {
+               msg = 
NM_Factory::create(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_FAILED);
+               NM_Reserve_Object_Instance_Name_Failed *nokMsg = 
dynamic_cast<NM_Reserve_Object_Instance_Name_Failed *>(msg);
+
+               nokMsg->setObjectName(newObjName);
+               G.Out(pdGendoc,"             =====> send message R_O_I_N_F to 
federate %d",msg->getFederate());
+       }
+
+       msg->setFederation(handle);
+       msg->setFederate(theFederateHandle);
+       // send message.
+       socket = server->getSocketLink(msg->getFederate());
+       msg->send(socket,NM_msgBufSend);
+
+       delete msg;
+}
+
+
 // ----------------------------------------------------------------------------
 //! Adds a new object instance to federation.
 ObjectHandle
@@ -2575,5 +2616,5 @@
 
 }} // namespace certi/rtig
 
-// $Id: Federation.cc,v 3.128 2010/04/28 18:48:31 erk Exp $
+// $Id: Federation.cc,v 3.129 2010/05/31 09:33:26 erk Exp $
 

Index: RTIG/FederationsList.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/FederationsList.hh,v
retrieving revision 3.54
retrieving revision 3.55
diff -u -b -r3.54 -r3.55
--- RTIG/FederationsList.hh     19 Mar 2010 13:54:03 -0000      3.54
+++ RTIG/FederationsList.hh     31 May 2010 09:33:26 -0000      3.55
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: FederationsList.hh,v 3.54 2010/03/19 13:54:03 erk Exp $
+// $Id: FederationsList.hh,v 3.55 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_RTIG_FEDERATIONS_LIST_HH
@@ -315,6 +315,15 @@
                SecurityError,
                RTIinternalError);
 
+       void reserveObjectInstanceName(Handle federationHandle,
+                                                                  
FederateHandle the_federate,
+                                                                  std::string 
newObjName)
+               throw(IllegalName,
+                     FederateNotExecutionMember,
+                     SaveInProgress,
+                     RestoreInProgress,
+                     RTIinternalError);
+
     ObjectHandle registerObject(Handle theHandle,
                                 FederateHandle theFederateHandle,
                                 ObjectClassHandle theClass,
@@ -661,4 +670,4 @@
 
 #endif // _CERTI_RTIG_FEDERATIONS_LIST_HH
 
-// $Id: FederationsList.hh,v 3.54 2010/03/19 13:54:03 erk Exp $
+// $Id: FederationsList.hh,v 3.55 2010/05/31 09:33:26 erk Exp $

Index: RTIG/RTIG_processing.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/RTIG_processing.cc,v
retrieving revision 3.102
retrieving revision 3.103
diff -u -b -r3.102 -r3.103
--- RTIG/RTIG_processing.cc     28 Apr 2010 18:45:42 -0000      3.102
+++ RTIG/RTIG_processing.cc     31 May 2010 09:33:26 -0000      3.103
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: RTIG_processing.cc,v 3.102 2010/04/28 18:45:42 erk Exp $
+// $Id: RTIG_processing.cc,v 3.103 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -820,6 +820,21 @@
 }
 
 // ----------------------------------------------------------------------------
+// processReserveObjectInstanceName
+void 
+RTIG::processReserveObjectInstanceName(Socket *link, 
NM_Reserve_Object_Instance_Name *req)
+{
+       G.Out(pdGendoc,"enter RTIG::processReserveObjectInstanceName");
+       auditServer << "Reserve Object Name = " << req->getObjectName();
+
+       federations.reserveObjectInstanceName(  req->getFederation(), 
+                                                                               
        req->getFederate(), 
+                                                                               
        req->getObjectName());
+
+       G.Out(pdGendoc,"exit RTIG::processReserveObjectInstanceName");
+}
+
+// ----------------------------------------------------------------------------
 // processRegisterObject
 void
 RTIG::processRegisterObject(Socket *link, NM_Register_Object *req)
@@ -1481,4 +1496,4 @@
 
 }} // namespace certi/rtig
 
-// $Id: RTIG_processing.cc,v 3.102 2010/04/28 18:45:42 erk Exp $
+// $Id: RTIG_processing.cc,v 3.103 2010/05/31 09:33:26 erk Exp $

Index: RTIG/RTIG.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/RTIG.hh,v
retrieving revision 3.33
retrieving revision 3.34
diff -u -b -r3.33 -r3.34
--- RTIG/RTIG.hh        19 Mar 2010 13:54:03 -0000      3.33
+++ RTIG/RTIG.hh        31 May 2010 09:33:26 -0000      3.34
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: RTIG.hh,v 3.33 2010/03/19 13:54:03 erk Exp $
+// $Id: RTIG.hh,v 3.34 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef CERTI_RTIG_HH
@@ -97,6 +97,7 @@
     void processSubscribeInteractionClass(Socket*, 
NM_Subscribe_Interaction_Class*);
     void processUnpublishInteractionClass(Socket*, NetworkMessage*);
     void processUnsubscribeInteractionClass(Socket*, NetworkMessage*msg);
+    void processReserveObjectInstanceName(Socket *link, 
NM_Reserve_Object_Instance_Name *req);
     void processRegisterObject(Socket*, NM_Register_Object*);
     void processUpdateAttributeValues(Socket*, NM_Update_Attribute_Values*);
     void processSendInteraction(Socket*, NM_Send_Interaction*);
@@ -142,4 +143,4 @@
 
 #endif // CERTI_RTIG_HH
 
-// $Id: RTIG.hh,v 3.33 2010/03/19 13:54:03 erk Exp $
+// $Id: RTIG.hh,v 3.34 2010/05/31 09:33:26 erk Exp $

Index: RTIG/Federation.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.hh,v
retrieving revision 3.65
retrieving revision 3.66
diff -u -b -r3.65 -r3.66
--- RTIG/Federation.hh  19 Mar 2010 13:54:03 -0000      3.65
+++ RTIG/Federation.hh  31 May 2010 09:33:26 -0000      3.66
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: Federation.hh,v 3.65 2010/03/19 13:54:03 erk Exp $
+// $Id: Federation.hh,v 3.66 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_RTIG_FEDERATION_HH
@@ -280,6 +280,13 @@
                RestoreInProgress,
                RTIinternalError);
 
+       void reserveObjectInstanceName(FederateHandle theFederateHandle,
+                                          std::string newObjName)
+               throw (IllegalName,
+                      SaveInProgress,
+                      RestoreInProgress,
+                      RTIinternalError);
+
     ObjectHandle registerObject(FederateHandle theFederateHandle,
                                 ObjectClassHandle theClass,
                                 const std::string& theName)
@@ -683,4 +690,4 @@
 
 #endif // _CERTI_RTIG_FEDERATION_HH
 
-// $Id: Federation.hh,v 3.65 2010/03/19 13:54:03 erk Exp $
+// $Id: Federation.hh,v 3.66 2010/05/31 09:33:26 erk Exp $

Index: RTIA/Statistics.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/Statistics.cc,v
retrieving revision 3.22
retrieving revision 3.23
diff -u -b -r3.22 -r3.23
--- RTIA/Statistics.cc  14 Mar 2010 15:35:53 -0000      3.22
+++ RTIA/Statistics.cc  31 May 2010 09:33:26 -0000      3.23
@@ -215,6 +215,10 @@
        FED_MSG_NAME(Message::TICK_REQUEST_NEXT);
        FED_MSG_NAME(Message::TICK_REQUEST_STOP);
 
+       FED_MSG_NAME(Message::RESERVE_OBJECT_INSTANCE_NAME);
+       FED_MSG_NAME(Message::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED);
+       FED_MSG_NAME(Message::RESERVE_OBJECT_INSTANCE_NAME_FAILED);
+
        // RTI messages
        RTI_MSG_NAME(NetworkMessage::CLOSE_CONNEXION);
        RTI_MSG_NAME(NetworkMessage::MESSAGE_NULL);
@@ -305,6 +309,10 @@
        RTI_MSG_NAME(NetworkMessage::START_REGISTRATION_FOR_OBJECT_CLASS);
        RTI_MSG_NAME(NetworkMessage::STOP_REGISTRATION_FOR_OBJECT_CLASS);
 
+       RTI_MSG_NAME(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME);
+       RTI_MSG_NAME(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED);
+       RTI_MSG_NAME(NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_FAILED);
+
         initialized = true ;
     }
 }
@@ -374,4 +382,4 @@
 #undef FED_MSG_NAME
 #undef RTI_MSG_NAME
 
-// $Id: Statistics.cc,v 3.22 2010/03/14 15:35:53 gotthardp Exp $
+// $Id: Statistics.cc,v 3.23 2010/05/31 09:33:26 erk Exp $

Index: RTIA/ObjectManagement.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/ObjectManagement.cc,v
retrieving revision 3.69
retrieving revision 3.70
diff -u -b -r3.69 -r3.70
--- RTIA/ObjectManagement.cc    23 Mar 2010 13:13:27 -0000      3.69
+++ RTIA/ObjectManagement.cc    31 May 2010 09:33:26 -0000      3.70
@@ -1057,5 +1057,27 @@
        G.Out(pdGendoc,"exit  
ObjectManagement::turnUpdatesOffForObjectInstance");
 }
 
+// 1516 - 6.3
+void 
+ObjectManagement::nameReservationSucceeded(const std::string &reservedName)
+{
+       M_Reserve_Object_Instance_Name_Succeeded req;
+
+       req.setObjectName(reservedName);
+
+       comm->requestFederateService(&req);
+}
+
+void 
+ObjectManagement::nameReservationFailed(const std::string &reservedName)
+{
+       M_Reserve_Object_Instance_Name_Failed req;
+
+       req.setObjectName(reservedName);
+
+       comm->requestFederateService(&req);
+}
+
+
 }} // namespace certi/rtia
 

Index: RTIA/DataDistribution.hh
===================================================================
RCS file: /sources/certi/certi/RTIA/DataDistribution.hh,v
retrieving revision 3.20
retrieving revision 3.21
diff -u -b -r3.20 -r3.21
--- RTIA/DataDistribution.hh    28 Apr 2010 18:48:31 -0000      3.20
+++ RTIA/DataDistribution.hh    31 May 2010 09:33:26 -0000      3.21
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: DataDistribution.hh,v 3.20 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.hh,v 3.21 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_DATA_DISTRIBUTION
@@ -66,7 +66,7 @@
                         uint32_t, TypeException &)
        throw (RegionNotKnown);
 
-       void reserveObjectName(const std::string &);
+       void reserveObjectName(const std::string &, TypeException &);
 
     ObjectHandle registerObject(ObjectClassHandle, const std::string&,
                                const std::vector <AttributeHandle> &, uint32_t,
@@ -101,4 +101,4 @@
 
 #endif // _CERTI_DATA_DISTRIBUTION
 
-// $Id: DataDistribution.hh,v 3.20 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.hh,v 3.21 2010/05/31 09:33:26 erk Exp $

Index: RTIA/RTIA_federate.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA_federate.cc,v
retrieving revision 3.108
retrieving revision 3.109
diff -u -b -r3.108 -r3.109
--- RTIA/RTIA_federate.cc       28 Apr 2010 18:48:31 -0000      3.108
+++ RTIA/RTIA_federate.cc       31 May 2010 09:33:26 -0000      3.109
@@ -377,6 +377,7 @@
                
                ROINr->setObjectName(ROINq->getObjectName());
 
+               ddm->reserveObjectName(ROINq->getObjectName(), e);
 
 
 
@@ -395,7 +396,10 @@
 
                ROIr->setObject(om->registerObject(ROIq->getObjectClass(),
                                ROIq->getObjectName(),
-                               date, heure, e));
+                                                                               
   date, 
+                                                                               
   heure, 
+                                                                               
   e)
+                                               );
                break ;
        }
 
@@ -1196,7 +1200,7 @@
                tm->_tick_multiple = TRq->getMultiple();
                tm->_tick_result   = false; // default return value
 
-               if (TRq->getMinTickTime() > 0.0) {
+               if (TRq->getMinTickTime() >= 0.0) {
                        tm->_tick_timeout = TRq->getMinTickTime();
                        tm->_tick_max_tick = TRq->getMaxTickTime();
                        tm->_tick_clock_start = clock->getCurrentTicksValue();

Index: RTIA/DataDistribution.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/DataDistribution.cc,v
retrieving revision 3.35
retrieving revision 3.36
diff -u -b -r3.35 -r3.36
--- RTIA/DataDistribution.cc    28 Apr 2010 18:48:31 -0000      3.35
+++ RTIA/DataDistribution.cc    31 May 2010 09:33:26 -0000      3.36
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: DataDistribution.cc,v 3.35 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.cc,v 3.36 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -249,16 +249,24 @@
 
 // ----------------------------------------------------------------------------
 void 
-DataDistribution::reserveObjectName(const std::string &newObjName)
+DataDistribution::reserveObjectName(const std::string &newObjName, 
TypeException &e)
 {
        NM_Reserve_Object_Instance_Name req;
 
+       //  Empty strings not allowed
+       if (newObjName.size() <= 0 ||
+               // According to spec, the HLA prefix is reserved for 
RTI-internal objects.
+               newObjName.compare(0, 3, "HLA") == 0 )
+       {
+               e = e_IllegalName;
+       } else {
        req.setFederation(fm->_numero_federation);
        req.setFederate(fm->federate);
 
        req.setObjectName(newObjName);
 
        comm->sendMessage(&req);
+       }
        // JvY TODO: Finish handling on other side (and return path)
 }
 
@@ -433,4 +441,4 @@
 
 }} // namespace certi::rtia
 
-// $Id: DataDistribution.cc,v 3.35 2010/04/28 18:48:31 erk Exp $
+// $Id: DataDistribution.cc,v 3.36 2010/05/31 09:33:26 erk Exp $

Index: RTIA/TimeManagement.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/TimeManagement.cc,v
retrieving revision 3.58
retrieving revision 3.59
diff -u -b -r3.58 -r3.59
--- RTIA/TimeManagement.cc      23 Mar 2010 13:13:27 -0000      3.58
+++ RTIA/TimeManagement.cc      31 May 2010 09:33:26 -0000      3.59
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: TimeManagement.cc,v 3.58 2010/03/23 13:13:27 erk Exp $
+// $Id: TimeManagement.cc,v 3.59 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -385,6 +385,19 @@
       }
         break;
 
+         case NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_SUCCEEDED: 
+                 {
+                         NM_Reserve_Object_Instance_Name_Succeeded ROINS = 
static_cast<NM_Reserve_Object_Instance_Name_Succeeded&>(msg);
+                         om->nameReservationSucceeded(ROINS.getObjectName());
+                 }
+                 break;
+         case NetworkMessage::RESERVE_OBJECT_INSTANCE_NAME_FAILED: 
+                 {
+                         NM_Reserve_Object_Instance_Name_Failed ROINF = 
static_cast<NM_Reserve_Object_Instance_Name_Failed&>(msg);
+                         om->nameReservationFailed(ROINF.getObjectName());
+                 }
+                 break;
+
       default:
         D.Out(pdExcept, "Unknown message type in executeFederateService.");
         throw RTIinternalError(stringize() <<
@@ -1010,4 +1023,4 @@
 
 }} // namespaces
 
-// $Id: TimeManagement.cc,v 3.58 2010/03/23 13:13:27 erk Exp $
+// $Id: TimeManagement.cc,v 3.59 2010/05/31 09:33:26 erk Exp $

Index: RTIA/ObjectManagement.hh
===================================================================
RCS file: /sources/certi/certi/RTIA/ObjectManagement.hh,v
retrieving revision 3.34
retrieving revision 3.35
diff -u -b -r3.34 -r3.35
--- RTIA/ObjectManagement.hh    19 Mar 2010 13:54:03 -0000      3.34
+++ RTIA/ObjectManagement.hh    31 May 2010 09:33:26 -0000      3.35
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: ObjectManagement.hh,v 3.34 2010/03/19 13:54:03 erk Exp $
+// $Id: ObjectManagement.hh,v 3.35 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_RTIA_OM
@@ -241,6 +241,11 @@
                       const uint16_t attribArraySize,
                       TypeException &e);
 
+       // 1516 - 6.3
+       void nameReservationSucceeded(const std::string &reservedName);
+       void nameReservationFailed(const std::string &reservedName);
+
+
     // RTI Support Services
     ObjectClassHandle getObjectClassHandle(const std::string& theName);
     const std::string& getObjectClassName(ObjectClassHandle);
@@ -298,4 +303,4 @@
 
 #endif // _CERTI_RTIA_OM
 
-// $Id: ObjectManagement.hh,v 3.34 2010/03/19 13:54:03 erk Exp $
+// $Id: ObjectManagement.hh,v 3.35 2010/05/31 09:33:26 erk Exp $

Index: libCERTI/RootObject.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/RootObject.hh,v
retrieving revision 3.35
retrieving revision 3.36
diff -u -b -r3.35 -r3.36
--- libCERTI/RootObject.hh      25 Nov 2009 22:05:19 -0000      3.35
+++ libCERTI/RootObject.hh      31 May 2010 09:33:26 -0000      3.36
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RootObject.hh,v 3.35 2009/11/25 22:05:19 erk Exp $
+// $Id: RootObject.hh,v 3.36 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef LIBCERTI_ROOT_OBJECT
@@ -44,6 +44,7 @@
 #include "SecurityServer.hh"
 #include "HandleManager.hh"
 #include "RoutingSpace.hh"
+#include "NameReservation.hh"
 
 #include <vector>
 
@@ -106,6 +107,8 @@
        throw (RegionNotKnown, InvalidExtents);
 
     // Object Management
+       bool reserveObjectInstanceName(FederateHandle the_federate,
+                                                                  const 
std::string &the_object_name);
     void registerObjectInstance(FederateHandle, ObjectClassHandle, 
ObjectHandle,
                                 const std::string&)
         throw (InvalidObjectHandle,
@@ -168,6 +171,11 @@
     ObjectSet      *objects;
 
     /**
+        * The set of reserved names.
+        */
+       NameReservationSet *reservedNames;
+
+    /**
      * Serialize the federate object model into a message buffer.
      */
     void convertToSerializedFOM(NM_Join_Federation_Execution& message);
@@ -194,4 +202,4 @@
 
 #endif // LIBCERTI_ROOT_OBJECT
 
-// $Id: RootObject.hh,v 3.35 2009/11/25 22:05:19 erk Exp $
+// $Id: RootObject.hh,v 3.36 2010/05/31 09:33:26 erk Exp $

Index: libCERTI/Exception.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/Exception.cc,v
retrieving revision 3.20
retrieving revision 3.21
diff -u -b -r3.20 -r3.21
--- libCERTI/Exception.cc       29 Mar 2010 18:24:20 -0000      3.20
+++ libCERTI/Exception.cc       31 May 2010 09:33:26 -0000      3.21
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: Exception.cc,v 3.20 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.cc,v 3.21 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include "Exception.hh"
@@ -148,6 +148,8 @@
 long certi::SocketSHMNotOpen::_type = certi::e_SocketSHMNotOpen ;
 long certi::SocketSHMNotDeleted::_type = certi::e_SocketSHMNotDeleted ;
 
+long certi::IllegalName::_type = certi::e_IllegalName ;
+
 static PrettyDebug PD_Exception("CERTI_EXCEPTION",__FILE__);
 
 const std::string certi::Exception::displayMe() const
@@ -172,4 +174,4 @@
     Debug(PD_Exception, pdExcept) << msg.str();
     return msg.str();
 }
-// $Id: Exception.cc,v 3.20 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.cc,v 3.21 2010/05/31 09:33:26 erk Exp $

Index: libCERTI/CMakeLists.txt
===================================================================
RCS file: /sources/certi/certi/libCERTI/CMakeLists.txt,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -b -r1.35 -r1.36
--- libCERTI/CMakeLists.txt     4 Apr 2010 18:27:49 -0000       1.35
+++ libCERTI/CMakeLists.txt     31 May 2010 09:33:26 -0000      1.36
@@ -31,6 +31,7 @@
     ObjectClassSet.cc
     ObjectSet.cc
     Named.cc
+    NameReservation.cc
     Parameter.cc
     RootObject.cc
     Subscribable.cc
@@ -42,6 +43,7 @@
     ObjectClassSet.hh
     ObjectSet.hh
     Named.hh
+    NameReservation.hh
     Parameter.hh
     RootObject.hh
     Subscribable.hh

Index: libCERTI/Exception.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/Exception.hh,v
retrieving revision 3.10
retrieving revision 3.11
diff -u -b -r3.10 -r3.11
--- libCERTI/Exception.hh       29 Mar 2010 18:24:20 -0000      3.10
+++ libCERTI/Exception.hh       31 May 2010 09:33:26 -0000      3.11
@@ -20,7 +20,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: Exception.hh,v 3.10 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.hh,v 3.11 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_EXCEPTION_HH
@@ -150,7 +150,8 @@
     e_TimeRegulationAlreadyEnabled,
     e_TimeRegulationWasNotEnabled,
     e_NetworkError,
-    e_NetworkSignal
+    e_NetworkSignal,
+       e_IllegalName //1516 only
 } TypeException ;
 
 class CERTI_EXPORT Exception
@@ -255,6 +256,9 @@
 CERTI_EXCEPTION(ValueCountExceeded)
 CERTI_EXCEPTION(ValueLengthExceeded)
 
+// RTI1516 Exceptions for use inside libCERTI
+CERTI_EXCEPTION(IllegalName)
+
 // Additional CERTI exceptions
 CERTI_EXCEPTION(FederateNotPublishing)
 CERTI_EXCEPTION(FederateNotSubscribing)
@@ -299,4 +303,4 @@
 
 #endif // _CERTI_EXCEPTION_HH
 
-// $Id: Exception.hh,v 3.10 2010/03/29 18:24:20 erk Exp $
+// $Id: Exception.hh,v 3.11 2010/05/31 09:33:26 erk Exp $

Index: libCERTI/ObjectSet.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectSet.cc,v
retrieving revision 3.32
retrieving revision 3.33
diff -u -b -r3.32 -r3.33
--- libCERTI/ObjectSet.cc       23 Mar 2010 13:13:27 -0000      3.32
+++ libCERTI/ObjectSet.cc       31 May 2010 09:33:26 -0000      3.33
@@ -413,6 +413,22 @@
 }
 
 // ----------------------------------------------------------------------------
+Object *
+ObjectSet::getObjectByName(const std::string &the_object_name) const
+{
+       std::map<ObjectHandle, Object *>::const_iterator i ;
+       for (i = begin(); i != end(); i++) {
+               if (i->second != 0 && 
+                       i->second->getName() == the_object_name) 
+               {
+                               return i->second;
+               }
+       }
+
+       return 0;
+}
+
+// ----------------------------------------------------------------------------
 //! sendToFederate.
 void
 ObjectSet::sendToFederate(NetworkMessage *msg,
@@ -459,4 +475,4 @@
 }
 } // namespace certi
 
-// $Id: ObjectSet.cc,v 3.32 2010/03/23 13:13:27 erk Exp $
+// $Id: ObjectSet.cc,v 3.33 2010/05/31 09:33:26 erk Exp $

Index: libCERTI/ObjectSet.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectSet.hh,v
retrieving revision 3.17
retrieving revision 3.18
diff -u -b -r3.17 -r3.18
--- libCERTI/ObjectSet.hh       19 Mar 2010 13:54:03 -0000      3.17
+++ libCERTI/ObjectSet.hh       31 May 2010 09:33:26 -0000      3.18
@@ -162,6 +162,8 @@
     Object *getObject(ObjectHandle the_object) const
         throw (ObjectNotKnown);
 
+       Object *getObjectByName(const std::string &the_object_name) const;
+
 protected:    
     void sendToFederate(NetworkMessage *msg,
                         FederateHandle the_federate) const ;
@@ -172,6 +174,11 @@
        typedef std::map<std::string,Object*,std::less<std::string> > 
Name2ObjectMap_t; 
        typedef Handle2ObjectMap_t::const_iterator handledO_const_iterator; 
        typedef Name2ObjectMap_t::const_iterator namedO_const_iterator;
+       /*
+        * FIXME Erk --> those map are unused which is just a shame
+        * this looks like unfinished work. ObjectSet should not inherit
+        * from map<...> but include (and use) the two following maps
+        */
        Handle2ObjectMap_t OFromHandle; 
        Name2ObjectMap_t   OFromName;
        /* The message buffer used to send Network messages */

Index: libCERTI/RootObject.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/RootObject.cc,v
retrieving revision 3.50
retrieving revision 3.51
diff -u -b -r3.50 -r3.51
--- libCERTI/RootObject.cc      19 Mar 2010 13:54:03 -0000      3.50
+++ libCERTI/RootObject.cc      31 May 2010 09:33:26 -0000      3.51
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RootObject.cc,v 3.50 2010/03/19 13:54:03 erk Exp $
+// $Id: RootObject.cc,v 3.51 2010/05/31 09:33:26 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include "Object.hh"
@@ -36,6 +36,7 @@
 #include "PrettyDebug.hh"
 #include "NM_Classes.hh"
 #include "helper.hh"
+#include "NameReservation.hh"
 
 #include <string>
 #include <stdio.h>
@@ -62,6 +63,7 @@
     /* this interaction class set is the root one */
     Interactions  = new InteractionSet(server,true);
     objects       = new ObjectSet(server);
+       reservedNames = new NameReservationSet();
 }
 
 RootObject::~RootObject()
@@ -69,6 +71,7 @@
     delete ObjectClasses ;
     delete Interactions ;
     delete objects ;
+       delete reservedNames ;
 }
 
 // ----------------------------------------------------------------------------
@@ -229,6 +232,45 @@
 }
 
 // ----------------------------------------------------------------------------
+bool
+RootObject::reserveObjectInstanceName(FederateHandle the_federate,
+                                                                         const 
std::string &the_object_name)
+{
+       // Empty strings not allowed
+       if (the_object_name.size() <= 0)
+       {
+               return false;
+       }
+
+       // According to spec, the HLA prefix is reserved for RTI-internal 
objects.
+       if (the_object_name.compare(0, 3, "HLA") == 0)
+       {
+               return false;
+       }
+
+       // Name reservation clashes with registered object?
+       Object *object = objects->getObjectByName(the_object_name);
+       if (object != 0)
+       {
+               return false;
+       }
+
+       // Name reservation clashes with other reserved name?
+       NameReservationSet::const_iterator it = 
reservedNames->find(the_object_name);
+       if (it != reservedNames->end() )
+       {
+               return false;
+       }
+
+       // Make name reservation
+       NameReservation *nr = new NameReservation(the_federate, 
the_object_name);
+       std::pair<std::string, NameReservation *> nr_pair(the_object_name, nr);
+       reservedNames->insert(nr_pair);
+
+       return true;
+}
+
+// ----------------------------------------------------------------------------
 void
 RootObject::registerObjectInstance(FederateHandle the_federate,
                                    ObjectClassHandle the_class,
@@ -244,6 +286,17 @@
           "Federate %d attempts to register instance %d in class %d.",
           the_federate, the_object, the_class);
 
+       NameReservationSet::iterator it = reservedNames->find(the_object_name);
+       if (it != reservedNames->end() )
+       {
+               const NameReservation *nr = it->second;
+               if (nr->getHandle() != the_federate)
+               {
+                       throw ObjectAlreadyRegistered("The name was reserved by 
another federate.");
+               }
+       }
+
+
     Object *object ;
     object = objects->registerObjectInstance(the_federate, the_class,
                                              the_object, the_object_name);
@@ -258,6 +311,14 @@
         objects->deleteObjectInstance(the_federate, the_object, "");
         throw;
     }
+
+       if (it != reservedNames->end() )
+       {
+               NameReservation *nr = it->second;
+               reservedNames->erase(it);
+               delete nr;
+       }
+
 }
 
 // ----------------------------------------------------------------------------
@@ -560,4 +621,4 @@
 
 } // namespace certi
 
-// $Id: RootObject.cc,v 3.50 2010/03/19 13:54:03 erk Exp $
+// $Id: RootObject.cc,v 3.51 2010/05/31 09:33:26 erk Exp $

Index: include/RTI/SpecificConfig.h
===================================================================
RCS file: /sources/certi/certi/include/RTI/SpecificConfig.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- include/RTI/SpecificConfig.h        24 Nov 2009 21:44:48 -0000      1.2
+++ include/RTI/SpecificConfig.h        31 May 2010 09:33:26 -0000      1.3
@@ -9,6 +9,23 @@
 #ifndef RTI_SpecificConfig_h
 #define RTI_SpecificConfig_h
 
+#ifdef _MSC_VER
+#ifndef FAKED_INTTYPES_DEFINED
+#define FAKED_INTTYPES_DEFINED
+typedef unsigned __int64  uint64_t;
+typedef signed __int64    int64_t;
+typedef unsigned __int32  uint32_t;
+typedef signed __int32    int32_t;
+typedef unsigned __int16  uint16_t;
+typedef signed __int16    int16_t;
+typedef unsigned __int8   uint8_t;
+typedef signed __int8     int8_t;
+typedef short int         int_least16_t;
+#endif
+#else
+#include <inttypes.h>
+#endif
+
 #if defined(_WIN32)
 #if defined(_MSC_VER) && defined(RTI_DISABLE_WARNINGS)
 // disable warning about truncating template instantiation symbol names

Index: libCERTI/NameReservation.hh
===================================================================
RCS file: libCERTI/NameReservation.hh
diff -N libCERTI/NameReservation.hh
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libCERTI/NameReservation.hh 31 May 2010 09:33:26 -0000      3.1
@@ -0,0 +1,56 @@
+// ----------------------------------------------------------------------------
+// CERTI - HLA RunTime Infrastructure
+// Copyright (C) 2004  ONERA
+//
+// This file is part of CERTI-libCERTI
+//
+// CERTI-libCERTI 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-libCERTI 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: NameReservation.hh,v 3.1 2010/05/31 09:33:26 erk Exp $
+// ----------------------------------------------------------------------------
+
+#ifndef LIBCERTI_NAME_RESERVATION_HH
+#define LIBCERTI_NAME_RESERVATION_HH
+
+#include <map>
+#include "certi.hh"
+#include "Named.hh"
+#include "Handled.hh"
+
+namespace certi {
+
+class NameReservation;
+
+typedef std::map<std::string, NameReservation *> NameReservationSet;
+
+class CERTI_EXPORT NameReservation : public Named, public 
Handled<FederateHandle>
+{
+public:
+       NameReservation(FederateHandle the_owner, std::string the_name)
+               : Named(the_name)
+               , Handled<FederateHandle>(the_owner)
+       {
+       }
+
+    virtual ~NameReservation()
+       {
+       }
+
+};
+
+} // namespace certi
+
+#endif // LIBCERTI_NAME_RESERVATION_HH
\ No newline at end of file

Index: libCERTI/NameReservation.cc
===================================================================
RCS file: libCERTI/NameReservation.cc
diff -N libCERTI/NameReservation.cc



reply via email to

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