[asterisk-scf-commits] asterisk-scf/integration/slice.git branch "operation-context-propogation" updated.

Commits to the Asterisk SCF project code repositories asterisk-scf-commits at lists.digium.com
Fri Jan 27 17:16:21 CST 2012


branch "operation-context-propogation" has been updated
       via  15eebd137a6bda4a45255219cea1faf59f51ee3c (commit)
       via  4d2dcb5bb5aab4977850e2a87b6c9a8d9f84bc29 (commit)
       via  9af2f0cef96c70925100d325e1eb336e9b056221 (commit)
      from  cad2c8230444e178fda64d626c5bcc8ef509a8cb (commit)

Summary of changes:
 .../Core/Discovery/ServiceLocatorEventsIf.ice      |   12 +-
 .../Core/Discovery/ServiceLocatorIf.ice            |   28 ++-
 slice/AsteriskSCF/Core/Routing/RoutingIf.ice       |  120 +++++-----
 slice/AsteriskSCF/Media/MediaExtractionIf.ice      |   11 +-
 slice/AsteriskSCF/Media/MediaIf.ice                |   31 ++-
 slice/AsteriskSCF/Media/MediaInjectionIf.ice       |   10 +-
 slice/AsteriskSCF/Media/MediaOperationIf.ice       |   11 +-
 slice/AsteriskSCF/Media/RTP/MediaRTCPIf.ice        |   32 +++-
 slice/AsteriskSCF/Media/RTP/MediaRTPIf.ice         |   42 +++-
 slice/AsteriskSCF/Media/SDP/MediaSDPIf.ice         |   11 +-
 slice/AsteriskSCF/Media/UDPTL/MediaUDPTLIf.ice     |    8 +-
 slice/AsteriskSCF/Presence/PresenceIf.ice          |   22 ++-
 slice/AsteriskSCF/SIP/SIPExtensionPointIf.ice      |    8 +-
 slice/AsteriskSCF/SIP/SIPRegistrarIf.ice           |   15 +-
 .../SessionCommunicationsExtensionPointsIf.ice     |   46 +++--
 .../SessionCommunicationsIf.ice                    |  227 +++++++++++++-------
 .../SessionCommunications/TelephonyEventsIf.ice    |   27 ++-
 .../System/Component/ComponentServiceIf.ice        |   14 +-
 .../System/Component/ConfigurationIf.ice           |   19 ++-
 slice/AsteriskSCF/System/Component/ReplicaIf.ice   |   16 +-
 slice/AsteriskSCF/System/Logger/LoggerIf.ice       |    7 +-
 slice/AsteriskSCF/System/NAT/NATTraversalIf.ice    |    4 +-
 22 files changed, 468 insertions(+), 253 deletions(-)


- Log -----------------------------------------------------------------
commit 15eebd137a6bda4a45255219cea1faf59f51ee3c
Author: Ken Hunt <ken.hunt at digium.com>
Date:   Fri Jan 27 17:15:11 2012 -0600

    Applying OperationContext and idempotent tag to enhance retry logic.

diff --git a/slice/AsteriskSCF/Core/Discovery/ServiceLocatorEventsIf.ice b/slice/AsteriskSCF/Core/Discovery/ServiceLocatorEventsIf.ice
index 53fd522..6578c25 100644
--- a/slice/AsteriskSCF/Core/Discovery/ServiceLocatorEventsIf.ice
+++ b/slice/AsteriskSCF/Core/Discovery/ServiceLocatorEventsIf.ice
@@ -40,42 +40,42 @@ module Discovery
        *
        * @param guid The unique identifier of the comparator.
        */
-      void comparisonRegistered(string guid);
+      idempotent void comparisonRegistered(string guid);
 
       /**
        * Method which is called when a comparator is unregistered.
        *
        * @param guid The unique identifier of the comparator.
        */
-      void comparisonUnregistered(string guid);
+      idempotent void comparisonUnregistered(string guid);
 
       /**
        * Method which is called when a service is registered.
        *
        * @param guid The unique identifier of the service.
        */
-      void serviceRegistered(string guid);
+      idempotent void serviceRegistered(string guid);
 
       /**
        * Method which is called when a service is unregistered.
        *
        * @param guid The unique identifier of the service.
        */
-      void serviceUnregistered(string guid);
+      idempotent void serviceUnregistered(string guid);
 
       /**
        * Method which is called when a service is suspended.
        *
        * @param guid The unique identifier of the service.
        */
-      void serviceSuspended(string guid);
+      idempotent void serviceSuspended(string guid);
 
       /**
        * Method which is called when a service is unsuspended.
        *
        * @param guid The unique identifier of the service.
        */
-      void serviceUnsuspended(string guid);
+      idempotent void serviceUnsuspended(string guid);
    };
 
 }; /*  end module Discovery */
diff --git a/slice/AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice b/slice/AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice
index 4874c9d..6b2bc8b 100644
--- a/slice/AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice
+++ b/slice/AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice
@@ -17,6 +17,7 @@
 #pragma once
 
 #include <Ice/BuiltinSequences.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -162,36 +163,41 @@ module V1
       /**
        * Method which adds supported discovery parameters to a registered service.
        *
+       * @param operationContext Provides unique id for this operation.
+       *
        * @param params A concrete class containing parameters describing what is supported.
        *
        * @param compareguid The unique identifier of a comparator which can perform a lower level
        *              comparison to determine whether supplied parameters in a locator request
        *              are truly supported or not. This is optional.
        */
-      void addLocatorParams(ServiceLocatorParams params, string compareguid);
+      idempotent void addLocatorParams(
+          AsteriskSCF::System::V1::OperationContext operationContext,
+          ServiceLocatorParams params, 
+          string compareguid);
 
       /**
        * Gets the status of this registered service.
        */
       ["cpp:const"]
-      ServiceStatus getStatus();
+      idempotent ServiceStatus getStatus();
 
       /**
        * Method which suspends this service from being considered when a locator request
        * is performed.
        */
-      void suspend();
+      idempotent void suspend();
 
       /**
        * Method which unsuspends this service. Once this method is called the service will
        * be able to found again when a locator request is performed.
        */
-      void unsuspend();
+      idempotent void unsuspend();
 
       /**
        * Method which unregisters this service from the service locator.
        */
-      void unregister();
+      idempotent void unregister();
    };
 
    /**
@@ -224,7 +230,7 @@ module V1
        * @return A boolean value with true meaning the parameters are supported and false if not.
        *
        */
-      bool isSupported(ServiceLocatorParams params);
+      idempotent bool isSupported(ServiceLocatorParams params);
    };
 
    /**
@@ -241,19 +247,19 @@ module V1
        *
        * @return A proxy to the service management interface for this service.
        */
-      ServiceManagement *addService(Object *service, string guid);
+      idempotent ServiceManagement *addService(Object *service, string guid);
 
       /**
        * Returns a list of all registered services.
        */
       ["cpp:const"]
-      ServiceInfoSeq getServices();
+      idempotent ServiceInfoSeq getServices();
 
       /**
        * Returns the registered service with the given guid.
        */
       ["cpp:const"]
-      ServiceInfo getService(string guid);
+      idempotent ServiceInfo getService(string guid);
 
       /**
        * Method which adds a comparator to the service locator.
@@ -264,7 +270,7 @@ module V1
        *
        * @throws DuplicateCompare if an existing comparator was found using the given guid.
        */
-      void addCompare(string compareguid, ServiceLocatorParamsCompare *compare) throws DuplicateCompare;
+      idempotent void addCompare(string compareguid, ServiceLocatorParamsCompare *compare) throws DuplicateCompare;
 
       /**
        * Method which removes a comparator from the service locator.
@@ -273,7 +279,7 @@ module V1
        *
        * @throws CompareNotFound if the given comparator could not be found.
        */
-      void removeCompare(string compareguid) throws CompareNotFound;
+      idempotent void removeCompare(string compareguid) throws CompareNotFound;
    };
 
 }; /*  end module V1 */
diff --git a/slice/AsteriskSCF/Core/Routing/RoutingIf.ice b/slice/AsteriskSCF/Core/Routing/RoutingIf.ice
index 85ab304..1af6c20 100644
--- a/slice/AsteriskSCF/Core/Routing/RoutingIf.ice
+++ b/slice/AsteriskSCF/Core/Routing/RoutingIf.ice
@@ -129,8 +129,8 @@ module V1
        *
        * @throws InvalidParamsException if any parameters are invalid.
        */
-      void addEndpointLocator(string id, RegExSeq destinationIdRangeList, EndpointLocator *locator)
-     throws LocatorAlreadyRegisteredException, InvalidParamsException;
+      idempotent void addEndpointLocator(string id, RegExSeq destinationIdRangeList, EndpointLocator *locator)
+         throws LocatorAlreadyRegisteredException, InvalidParamsException;
 
       /**
        * Method which unregisters an EndpointLocator.
@@ -139,7 +139,7 @@ module V1
        *
        * @throws DestinationNotFoundException if the EndpointLocator of the given id is not registered.
        */
-      void removeEndpointLocator(string id) throws DestinationNotFoundException;
+      idempotent void removeEndpointLocator(string id) throws DestinationNotFoundException;
 
       /**
        * Method which modifies the range of device ids managed by a previously added EndpointLocator.
@@ -153,8 +153,8 @@ module V1
        *
        * @throws InvalidParamsException if any parameters are invalid.
        */
-      void setEndpointLocatorDestinationIds(string id, RegExSeq deviceIdRangeList)
-     throws DestinationNotFoundException, InvalidParamsException;
+      idempotent void setEndpointLocatorDestinationIds(string id, RegExSeq deviceIdRangeList)
+         throws DestinationNotFoundException, InvalidParamsException;
    };
 
 
@@ -166,7 +166,7 @@ module V1
       /**
        * Method which informs routing to drop references to all EndpointLocators that have been registered.
        */
-      void clearEndpointLocators();
+      idempotent void clearEndpointLocators();
 
       /**
        * Method which sends a policy string to the Lua script processor. The default implementation is a no-op,
@@ -174,7 +174,7 @@ module V1
        *
        * @param policy A site-specific policy specification.
        */
-      void setPolicy(string policy);
+      idempotent void setPolicy(string policy);
    };
 
    module Event
@@ -198,59 +198,59 @@ module V1
        */
       interface RoutingEvents
       {
-     /**
-      * Notification that a lookup was attempted.
-      *
-      * @param destinationId The destination being looked up.
-      *
-      * @param result Indicates whether or not the attempt was successful.
-      */
-     void lookupEvent(string destinationId, OperationResult result);
-
-     /**
-      * Notification that an attempt to add an EndpointLocator was made.
-      *
-      * @param id The identifier of the EndpointLocator being added.
-      *
-      * @param destinationIdRangeList A set of regular expressions that define the endpoints available.
-      *
-      * @param result Indicates whether or not the attempt was successful.
-      */
-     void addEndpointLocatorEvent(string id, RegExSeq destinationIdRangeList, EndpointLocator *locator, OperationResult result);
-
-     /**
-      * Notification that an attempt was made to remove an EndpointLocator.
-      *
-      * @param id The identifier of the EndpointLocator being removed.
-      *
-      * @param result Indicates whether or not the attempt was successful.
-      */
-     void removeEndpointLocatorEvent(string id, OperationResult result);
-
-     /**
-      * Notification that an attempt was made to modify the range of destinationIds
-      * accessible from a given EndpointLocator.
-      *
-      * @param id The destination being looked up.
-      *
-      * @param destinationIdRangeList A list of regular expressions to be representative of the new valid ids.
-      *
-      * @param result Indicates whether or not the attempt was successful.
-      */
-     void setEndpointLocatorDestinationIdsEvent(string id, RegExSeq destinationIdRangeList, OperationResult result);
-
-     /**
-      * Called when the EndpointLocator cache has been cleared by an administrative action.
-      */
-     void clearEndpointLocatorsEvent();
-
-     /**
-      * Called when an administration operation has set the routing service policy.
-      *
-      * @param policy The new policy.
-      */
-     void setPolicyEvent(string policy);
-      };
+         /**
+          * Notification that a lookup was attempted.
+          *
+          * @param destinationId The destination being looked up.
+          *
+          * @param result Indicates whether or not the attempt was successful.
+          */
+         idempotent void lookupEvent(string destinationId, OperationResult result);
+
+         /**
+          * Notification that an attempt to add an EndpointLocator was made.
+          *
+          * @param id The identifier of the EndpointLocator being added.
+          *
+          * @param destinationIdRangeList A set of regular expressions that define the endpoints available.
+          *
+          * @param result Indicates whether or not the attempt was successful.
+          */
+         idempotent void addEndpointLocatorEvent(string id, RegExSeq destinationIdRangeList, EndpointLocator *locator, OperationResult result);
+
+         /**
+          * Notification that an attempt was made to remove an EndpointLocator.
+          *
+          * @param id The identifier of the EndpointLocator being removed.
+          *
+          * @param result Indicates whether or not the attempt was successful.
+          */
+         idempotent void removeEndpointLocatorEvent(string id, OperationResult result);
+
+         /**
+          * Notification that an attempt was made to modify the range of destinationIds
+          * accessible from a given EndpointLocator.
+          *
+          * @param id The destination being looked up.
+          *
+          * @param destinationIdRangeList A list of regular expressions to be representative of the new valid ids.
+          *
+          * @param result Indicates whether or not the attempt was successful.
+          */
+         idempotent void setEndpointLocatorDestinationIdsEvent(string id, RegExSeq destinationIdRangeList, OperationResult result);
+
+         /**
+          * Called when the EndpointLocator cache has been cleared by an administrative action.
+          */
+         void clearEndpointLocatorsEvent();
+
+         /**
+          * Called when an administration operation has set the routing service policy.
+          *
+          * @param policy The new policy.
+          */
+         idempotent void setPolicyEvent(string policy);
+       };
    };
 
 }; /* module V1 */
diff --git a/slice/AsteriskSCF/Media/MediaExtractionIf.ice b/slice/AsteriskSCF/Media/MediaExtractionIf.ice
index 16b7d86..195703d 100644
--- a/slice/AsteriskSCF/Media/MediaExtractionIf.ice
+++ b/slice/AsteriskSCF/Media/MediaExtractionIf.ice
@@ -18,6 +18,7 @@
 
 #include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice>
 #include <AsteriskSCF/Media/MediaIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -108,18 +109,24 @@ module V1
         /**
          * Method used to request that media extraction occurs.
          *
+         * @param operationContext Provides unique id for this operation.
          * @param requests The media extraction requests.
          *
          * @return ExtractInstanceDict A dictionary of media extraction instances.
          */
-        ExtractInstanceDict startExtraction(ExtractRequestInfoDict requests);
+        ExtractInstanceDict startExtraction(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            ExtractRequestInfoDict requests);
 
         /**
          * Method used to request that media extraction stop.
          *
+         * @param operationContext Provides unique id for this operation.
          * @param instances The media extraction instances that should stop.
          */
-        void stopExtraction(ExtractInstanceSeq instances);
+        void stopExtraction(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            ExtractInstanceSeq instances);
     };
 
 }; /* end module V1 */
diff --git a/slice/AsteriskSCF/Media/MediaIf.ice b/slice/AsteriskSCF/Media/MediaIf.ice
index c945aac..971a326 100644
--- a/slice/AsteriskSCF/Media/MediaIf.ice
+++ b/slice/AsteriskSCF/Media/MediaIf.ice
@@ -18,6 +18,7 @@
 
 #include <Ice/BuiltinSequences.ice>
 #include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -136,16 +137,22 @@ module V1
         /**
          * Method used to establish direct media connections external to Asterisk SCF.
          *
+         * @param operationContext Provides unique id for this operation.
          * @param connections The direct connections that are to be established.
          */
-        ["amd"] void connectStreams(DirectMediaConnectionDict connections);
+        ["amd"] idempotent void connectStreams(
+            AsteriskSCF::System::V1::OperationContext operationContext, 
+            DirectMediaConnectionDict connections);
 
         /**
          * Method used to tear down direct media connections.
          *
+         * @param operationContext Provides unique id for this operation.
          * @param streams A sequence of streams that should no longer be directly connected.
          */
-        ["amd"] void disconnectStreams(Ice::StringSeq streams);
+        ["amd"] idempotent void disconnectStreams(
+            AsteriskSCF::System::V1::OperationContext operationContext, 
+            Ice::StringSeq streams);
     };
 
     /**
@@ -229,14 +236,14 @@ module V1
          *
          * @return StreamSourceSeq A sequence of stream sources.
          */
-        StreamSourceSeq getSources();
+        idempotent StreamSourceSeq getSources();
 
         /**
          * Method which returns the stream sinks that are on the session.
          *
          * @return StreamSinkSeq A sequence of stream sinks.
          */
-        StreamSinkSeq getSinks();
+        idempotent StreamSinkSeq getSinks();
 
         /**
          * Method which returns a unique identifier for the session.
@@ -254,7 +261,7 @@ module V1
          * @note  There can only be one cookie of a given type associated
          *        with a session.
          */
-        void setCookies(SessionCookies cookies);
+        idempotent void setCookies(SessionCookies cookies);
 
         /**
          * Remove cookies from the session.
@@ -264,7 +271,7 @@ module V1
          *        Only the concrete type of each cookie passed in is used to 
          *        determine which cookies to remove.
          */
-        void removeCookies(SessionCookies cookies);
+        idempotent void removeCookies(SessionCookies cookies);
 
         /**
          * Get cookies stored on the session.
@@ -276,7 +283,7 @@ module V1
          *         with types that match the types of the template cookies
          *         provided in the cookieTypes parameter.
          */
-        ["amd"] SessionCookies getCookies(SessionCookies cookieTypes);
+        ["amd"] idempotent SessionCookies getCookies(SessionCookies cookieTypes);
     };
 
     /**
@@ -304,14 +311,14 @@ module V1
          *
          * @param destination A proxy to a stream sink where media will be sent to.
          */
-        void addSink(StreamSink* destination);
+        idempotent void addSink(StreamSink* destination);
 
         /**
          * Method which removes a sink. Once removed media will no longer be written to it.
          *
          * @param destination A proxy to the stream sink to be removed.
          */
-        void removeSink(StreamSink* destination);
+        idempotent void removeSink(StreamSink* destination);
 
         /**
          * Method which retrieves the current stream sinks for media.
@@ -337,11 +344,14 @@ module V1
         /**
          * Method which requests that the source change the format of frames being sent to ALL sinks.
          *
+         * @param operationContext Provides unique id for this operation.
          * @param Format A concrete class describing the format to change to.
          *
          * @throws MediaFormatSwitchException if the source could not be switched to the requested format.
          */
-        void requestFormat(Format newformat) throws MediaFormatSwitchException;
+        idempotent void requestFormat(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            Format newformat) throws MediaFormatSwitchException;
     };
 
     /**
@@ -353,6 +363,7 @@ module V1
          * Method which gives the implementation a sequence of frames which it will then deal with in an implementation
          * specific manner.
          *
+         * @param operationContext Provides unique id for this operation.
          * @param frames A sequence of frames.
          *
          * @throws UnsupportedMediaFormatException if the format of a frame is not supported by the sink.
diff --git a/slice/AsteriskSCF/Media/MediaInjectionIf.ice b/slice/AsteriskSCF/Media/MediaInjectionIf.ice
index 714e0e9..87efc48 100644
--- a/slice/AsteriskSCF/Media/MediaInjectionIf.ice
+++ b/slice/AsteriskSCF/Media/MediaInjectionIf.ice
@@ -18,6 +18,7 @@
 
 #include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice>
 #include <AsteriskSCF/Media/MediaIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -107,18 +108,23 @@ module V1
         /**
          * Method used to request that media injection occurs.
          *
+         * @param operationContext Provides unique id for this operation.
          * @param requests The media injection requests.
          *
          * @return InjectInstanceDict A dictionary of media injection instances.
          */
-        InjectInstanceDict startInjection(InjectRequestInfoDict requests);
+        idempotent InjectInstanceDict startInjection(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            InjectRequestInfoDict requests);
 
         /**
          * Method used to request that media injection stop.
          *
          * @param instances The media injection instances that should stop.
          */
-        void stopInjection(InjectInstanceSeq instances);
+        idempotent void stopInjection(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            InjectInstanceSeq instances);
     };
 
 }; /* end module V1 */
diff --git a/slice/AsteriskSCF/Media/MediaOperationIf.ice b/slice/AsteriskSCF/Media/MediaOperationIf.ice
index 9dfcd96..11ce8c9 100644
--- a/slice/AsteriskSCF/Media/MediaOperationIf.ice
+++ b/slice/AsteriskSCF/Media/MediaOperationIf.ice
@@ -18,6 +18,7 @@
 
 #include <AsteriskSCF/Media/MediaIf.ice>
 #include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -44,19 +45,21 @@ const string MediaOperationDiscoveryTranslatorService = "Translator";
 
 interface MediaOperation
 {
-    StreamSource* getSource();
-    StreamSink* getSink();
-    void destroy();
+    idempotent StreamSource* getSource();
+    idempotent StreamSink* getSink();
+    idempotent void destroy();
 };
 
 interface MediaOperationFactory
 {
     /**
      * Create a new instance of a media operation.
+     * @param operationContext Provides unique id for this request.
      * @param source optional source of media that will enter the operation
      * @param sink optional source of media that the operation will write to
      */
-    MediaOperation* createMediaOperation(
+    idempotent MediaOperation* createMediaOperation(
+            AsteriskSCF::System::V1::OperationContext operationContext,
             StreamSource* source,
             StreamSink* sink) throws UnsupportedMediaFormatException;
 };
diff --git a/slice/AsteriskSCF/Media/RTP/MediaRTCPIf.ice b/slice/AsteriskSCF/Media/RTP/MediaRTCPIf.ice
index 5923ddf..f6a9b67 100644
--- a/slice/AsteriskSCF/Media/RTP/MediaRTCPIf.ice
+++ b/slice/AsteriskSCF/Media/RTP/MediaRTCPIf.ice
@@ -15,6 +15,7 @@
  */
 
 #include <AsteriskSCF/Media/RTP/MediaRTPIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -127,13 +128,18 @@ module V1
         *
         * Note that this must be called before RTCP will be sent.
         *
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param address A string representation of the  address.
         *
         * @param port An integer containing the port.
         *
         * @throws InvalidAddress when the address passed in is invalid.
         */
-       void setRemoteDetails(string address, int port) throws AsteriskSCF::Media::RTP::V1::InvalidAddress;
+       idempotent void setRemoteDetails(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           string address, 
+           int port) throws AsteriskSCF::Media::RTP::V1::InvalidAddress;
    };
 
    /**
@@ -144,30 +150,44 @@ module V1
        /**
         * Method called when statistics information is updated for a source
         *
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param source The source the statistics were updated on
         *
         * @param newStatistics Updated statistics information
         */
-       void sourceStatisticsUpdated(AsteriskSCF::Media::RTP::V1::StreamSourceRTP* source, Statistics newStatistics);
+       idempotent void sourceStatisticsUpdated(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           AsteriskSCF::Media::RTP::V1::StreamSourceRTP* source, 
+           Statistics newStatistics);
 
        /**
         * Method called when statistics information is updated for a sink
         *
+        * @param operationContext Provides unique id for this operation.
         *
         * @param sink The sink the statistics were updated on
         *
         * @param newStatistics Updated statistics information
         */
-       void sinkStatisticsUpdated(AsteriskSCF::Media::RTP::V1::StreamSinkRTP* sink, Statistics newStatistics);
+       void sinkStatisticsUpdated(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           AsteriskSCF::Media::RTP::V1::StreamSinkRTP* sink, 
+           Statistics newStatistics);
 
        /**
         * Method called when the SSRC changes for a source
         *
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param source The source that the SSRC has changed on
         *
         * @param ssrc The new SSRC value
         */
-       void sourceSsrcChanged(AsteriskSCF::Media::RTP::V1::StreamSourceRTP* source, int ssrc);
+       void sourceSsrcChanged(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           AsteriskSCF::Media::RTP::V1::StreamSourceRTP* source, 
+           int ssrc);
    };
 
    /**
@@ -197,14 +217,14 @@ module V1
         *
         * @param listener A proxy to the listener to add
         */
-       void addListener(InformationListener *listener);
+       idempotent void addListener(InformationListener *listener);
 
        /**
         * Method used to remove a listener
         *
         * @param listener A proxy to the listener to move
         */
-       void removeListener(InformationListener *listener);
+       idempotent void removeListener(InformationListener *listener);
    };
 
 }; /*  end module V1 */
diff --git a/slice/AsteriskSCF/Media/RTP/MediaRTPIf.ice b/slice/AsteriskSCF/Media/RTP/MediaRTPIf.ice
index 5b3584a..6692d6c 100644
--- a/slice/AsteriskSCF/Media/RTP/MediaRTPIf.ice
+++ b/slice/AsteriskSCF/Media/RTP/MediaRTPIf.ice
@@ -17,7 +17,7 @@
 #include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice>
 #include <AsteriskSCF/Media/MediaIf.ice>
 #include <AsteriskSCF/SessionCommunications/TelephonyEventsIf.ice>
-
+#include <AsteriskSCF/System/OperationsIf.ice>
 module AsteriskSCF
 {
 
@@ -125,7 +125,7 @@ module V1
        *
        * @throws InvalidAddress when the address passed in is invalid.
        */
-      void setRemoteDetails(string address, int port) throws InvalidAddress;
+      idempotent void setRemoteDetails(string address, int port) throws InvalidAddress;
 
       /**
        * Method which retrieves the remote IP address.
@@ -155,14 +155,17 @@ module V1
       /**
        * Method which associates payloads and media formats.
        *
+       * @param operationContext Provides unique id for this operation.
        * @param mappings The payload and media format mappings.
        */
-      void associatePayloads(PayloadMap mappings);
+      void associatePayloads(
+          AsteriskSCF::System::V1::OperationContext operationContext,
+          PayloadMap mappings);
 
       /**
        * Method which releases the RTP session. Once called the RTP session will no longer exist.
        */
-      void release();
+      idempotent void release();
    };
 
     class RTPOptions
@@ -219,6 +222,8 @@ module V1
         *
         * Set the key information for the local endpoint. 
         *
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param suiteName The type of crypto suite to be used.
         *
         * @param keyInfo The key for the specified crypto suite (may be empty).
@@ -230,12 +235,19 @@ module V1
         * @throws SRTPUnavailable if the SRTP functionality is unavailable at the moment, really should not happen.
         *
         */
-       void setOptions(string suiteName, string keyInfo, bool enableAuthentication, bool enableEncryption) 
-           throws SRTPUnavailable;
+       idempotent void setOptions(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           string suiteName, 
+           string keyInfo, 
+           bool enableAuthentication, 
+           bool enableEncryption) 
+               throws SRTPUnavailable;
 
        /**
         * Set the key information and initiates communication with peer.
         * 
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param suiteName The type of crypto suite to be used.
         *
         * @param keyInfo The key for the specified crypto suite (may be empty).
@@ -251,8 +263,13 @@ module V1
         * @throws SRTPAlreadyStarted if this is a duplicate call to start.
         *
         */
-       void start(string suiteName, string keyInfo, bool enableAuthentication, bool enableEncryption) throws
-           SRTPUnavailable, SRTPFailure, SRTPAlreadyStarted;
+       idempotent void start(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           string suiteName, 
+           string keyInfo, 
+           bool enableAuthentication, 
+           bool enableEncryption) throws
+               SRTPUnavailable, SRTPFailure, SRTPAlreadyStarted;
    };
 
    /**
@@ -272,6 +289,8 @@ module V1
       /**
        * Method which creates a new RTP session and returns a proxy to it.
        * 
+       * @param operationContext Provides unique id for this operation.
+       *
        * @param params Parameters to configure the RTP session with.
        *
        * @return RTPSession* A proxy to the new RTP session.
@@ -279,7 +298,12 @@ module V1
        * @throws SessionAllocationFailure if the media service is unable to allocate a session
        * to match the provided parameters.
        */
-       RTPSession* allocate(RTPServiceLocatorParams params, RTPOptions options, out RTPAllocationOutputs outputs) throws SessionAllocationFailure;
+       idempotent RTPSession* allocate(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           RTPServiceLocatorParams params, 
+           RTPOptions options, 
+           out RTPAllocationOutputs outputs) 
+               throws SessionAllocationFailure;
    };
 
 }; /*  end module V1 */
diff --git a/slice/AsteriskSCF/Media/SDP/MediaSDPIf.ice b/slice/AsteriskSCF/Media/SDP/MediaSDPIf.ice
index f6489b2..e57bc50 100644
--- a/slice/AsteriskSCF/Media/SDP/MediaSDPIf.ice
+++ b/slice/AsteriskSCF/Media/SDP/MediaSDPIf.ice
@@ -16,6 +16,7 @@
 
 #include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice>
 #include <AsteriskSCF/Media/MediaIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -97,6 +98,8 @@ module V1
         /**
          * Method which retrieves a media format concrete class given a specific name.
          *
+         * @param operationContext Provides unique id for this operation.
+         *
          * @param name Name of the media format, may contain additional details according to the descriptor service.
          *
          * @param sampleRate The sample rate for the frames.
@@ -107,8 +110,12 @@ module V1
          *
          * @return Format A concrete class containing media format details for the given format.
          */
-        idempotent AsteriskSCF::Media::V1::Format getNamedFormat(string name, int sampleRate, int frameSize,
-                                                                 Ice::StringSeq formatSpecific);
+        idempotent AsteriskSCF::Media::V1::Format getNamedFormat(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            string name, 
+            int sampleRate, 
+            int frameSize,
+            Ice::StringSeq formatSpecific);
 
         /**
          * Method which retrieves a media format concrete class given an SDP descriptor concrete class.
diff --git a/slice/AsteriskSCF/Media/UDPTL/MediaUDPTLIf.ice b/slice/AsteriskSCF/Media/UDPTL/MediaUDPTLIf.ice
index e0388c3..7d0c8d7 100644
--- a/slice/AsteriskSCF/Media/UDPTL/MediaUDPTLIf.ice
+++ b/slice/AsteriskSCF/Media/UDPTL/MediaUDPTLIf.ice
@@ -17,6 +17,7 @@
 #include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice>
 #include <AsteriskSCF/Media/MediaIf.ice>
 #include <AsteriskSCF/Media/NetworkIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -173,6 +174,8 @@ module V1
       /**
        * Method which creates a new UDPTL session and returns a proxy to it.
        * 
+       * @param operationContext Provides unique id for this operation.
+       *
        * @param params Parameters to configure the UDPTL session with.
        *
        * @return UDPTLSession* A proxy to the new UDPTL session.
@@ -180,7 +183,10 @@ module V1
        * @throws SessionAllocationFailure if the media service is unable to allocate a session
        * to match the provided parameters.
        */
-       UDPTLSession* allocate(UDPTLServiceLocatorParams params) throws SessionAllocationFailure;
+       idempotent UDPTLSession* allocate(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           UDPTLServiceLocatorParams params)
+               throws SessionAllocationFailure;
    };
 
 }; /*  end module V1 */
diff --git a/slice/AsteriskSCF/Presence/PresenceIf.ice b/slice/AsteriskSCF/Presence/PresenceIf.ice
index dad6e6c..aadd260 100644
--- a/slice/AsteriskSCF/Presence/PresenceIf.ice
+++ b/slice/AsteriskSCF/Presence/PresenceIf.ice
@@ -17,6 +17,7 @@
 #pragma once
 
 #include <Ice/BuiltinSequences.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -130,11 +131,15 @@ module V1
        /**
         * Method used to indicate that an resource has updated its status.
         *
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param resource Name of the resource that the status is for.
         *
         * @param newStatus Concrete class containing the status of the resource.
         */
-       void update(ResourceStatusDict newStatus);
+       void update(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           ResourceStatusDict newStatus);
    };
 
    /**
@@ -181,6 +186,8 @@ module V1
         *
         * Note that the current status for each resource will be sent to the consumer before returning.
         *
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param authToken Authentication token received when authenticate was called.
         *
         * @param resources A sequence of resources to subscribe to.
@@ -189,16 +196,25 @@ module V1
         *
         * @see Consumer
         */
-       void subscribe(Token authToken, Ice::StringSeq resources, Consumer *presenceConsumer);
+       idempotent void subscribe(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           Token authToken, 
+           Ice::StringSeq resources, 
+           Consumer *presenceConsumer);
 
        /**
         * Method used to unsubscribe from specific resource status updates.
         *
+        * @param operationContext Provides unique id for this operation.
+        *
         * @param resources A sequence of resources that will no longer be subscribed to.
         *
         * @param presenceConsumer A proxy to the consumer that was subscribed.
         */
-       void unsubscribe(Ice::StringSeq resources, Consumer *presenceConsumer);
+       idempotent void unsubscribe(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           Ice::StringSeq resources, 
+           Consumer *presenceConsumer);
    };
 
 }; /* End of module V1 */
diff --git a/slice/AsteriskSCF/SIP/SIPExtensionPointIf.ice b/slice/AsteriskSCF/SIP/SIPExtensionPointIf.ice
index fc00dc5..974ecb0 100644
--- a/slice/AsteriskSCF/SIP/SIPExtensionPointIf.ice
+++ b/slice/AsteriskSCF/SIP/SIPExtensionPointIf.ice
@@ -197,7 +197,7 @@ module V1
          * authentication response (i.e. Authorization header) that Asterisk
          * SCF will send to the UAS that has sent an authentication challenge
          */
-        AsteriskSCF::System::Hook::V1::HookResult respondToChallenge(string endpointName, Ice::StringSeq realms, out ClientAuthSeq auths);
+        idempotent AsteriskSCF::System::Hook::V1::HookResult respondToChallenge(string endpointName, Ice::StringSeq realms, out ClientAuthSeq auths);
     };
 
     sequence<AuthHook*> AuthHookSeq;
@@ -224,9 +224,9 @@ module V1
 
     interface AuthExtensionPoint
     {
-	void addAuthHook(AuthHook *hook, int priority, RequestTypeSeq requestTypes);
-	void removeAuthHook(AuthHook *hook);
-	void clearAuthHooks();
+	idempotent void addAuthHook(AuthHook *hook, int priority, RequestTypeSeq requestTypes);
+	idempotent void removeAuthHook(AuthHook *hook);
+	idempotent void clearAuthHooks();
     };
 
 }; /* End of module V1 */
diff --git a/slice/AsteriskSCF/SIP/SIPRegistrarIf.ice b/slice/AsteriskSCF/SIP/SIPRegistrarIf.ice
index c9ec943..0cfd3f9 100644
--- a/slice/AsteriskSCF/SIP/SIPRegistrarIf.ice
+++ b/slice/AsteriskSCF/SIP/SIPRegistrarIf.ice
@@ -81,8 +81,11 @@ interface RegistrarListener
      * Alerts the listener that contacts have been added.
      * The AoR may be new or it may have previous
      * bindings.
+     *
+     * @param contacts The added contacts.
+     *
      */
-    void contactsAdded(BindingUpdateSeq contacts);
+    idempotent void contactsAdded(BindingUpdateSeq contacts);
     /**
      * Alerts the listener that contacts have been removed.
      * There is no specific call for indicating that an AoR
@@ -90,7 +93,7 @@ interface RegistrarListener
      * method has been called, listeners should take
      * appropriate action if the AoR has no bound contacts.
      */
-     void contactsRemoved(BindingUpdateSeq contacts);
+     idempotent void contactsRemoved(BindingUpdateSeq contacts);
 };
 
 /**
@@ -106,19 +109,19 @@ interface Registrar
      * The return value is the map of all AoRs and their
      * bindings.
      */
-     ["amd"] ContactDict addListener(RegistrarListener *listener);
+     ["amd"] idempotent ContactDict addListener(RegistrarListener *listener);
      /**
       * Remove a listener.
       */
-     ["amd"] void removeListener(RegistrarListener *listener);
+     ["amd"] idempotent void removeListener(RegistrarListener *listener);
      /**
       * Get the mapping of all active registrations.
       */
-     ["amd"] BindingsDict getAllBindings();
+     ["amd"] idempotent BindingsDict getAllBindings();
      /**
       * Get all bindings associated with a particular AoR
       */
-     ["amd"] BindingSeq getAORBindings(string aor);
+     ["amd"] idempotent BindingSeq getAORBindings(string aor);
 };
 
 }; /* end module V1 */
diff --git a/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsExtensionPointsIf.ice b/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsExtensionPointsIf.ice
index d464a95..5865792 100755
--- a/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsExtensionPointsIf.ice
+++ b/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsExtensionPointsIf.ice
@@ -18,6 +18,7 @@
 
 #include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice>
 #include <AsteriskSCF/System/Hook/HookIf.ice>
+#include <AsteriskSCF/System/OperationsIf.ice>
 
 module AsteriskSCF
 {
@@ -59,7 +60,9 @@ module V1
          * @param[out] replacementData Modified data for the session
          * @return A HookResult indicating whether the hook was successful
          */
-        AsteriskSCF::System::Hook::V1::HookResult modifySession(SessionCreationHookData originalData, out SessionCreationHookData replacementData);
+        idempotent AsteriskSCF::System::Hook::V1::HookResult modifySession(
+            SessionCreationHookData originalData, 
+            out SessionCreationHookData replacementData);
     };
 
     sequence<SessionCreationHook*> SessionCreationHookSeq;
@@ -69,15 +72,15 @@ module V1
         /**
          * Add a new session decorator hook
          */
-        void addSessionCreationHook(SessionCreationHook* hook);
+        idempotent void addSessionCreationHook(SessionCreationHook* hook);
         /**
          * Remove a session decorator hook
          */
-        void removeSessionCreationHook(SessionCreationHook* hook);
+        idempotent void removeSessionCreationHook(SessionCreationHook* hook);
         /**
          * Remove all session decorator hooks
          */
-        void clearSessionCreationHooks();
+        idempotent void clearSessionCreationHooks();
     };
 
     const string BridgeCreationExtensionPointCategory = "BridgeCreationHook";
@@ -116,7 +119,8 @@ module V1
         /**
          * Interpose some operations when creating bridge objects.
          */
-         AsteriskSCF::System::Hook::V1::HookResult execute(BridgeCreationHookData originalData,
+         idempotent AsteriskSCF::System::Hook::V1::HookResult execute(
+             BridgeCreationHookData originalData,
              out BridgeCreationHookData alteredData);
     };
 
@@ -128,17 +132,17 @@ module V1
          * Add a new bridge creation hook. Matches on ID and refreshes the proxy if an object with
          * that ID has already been added.
          */
-        void addHook(BridgeCreationHook* hook);
+        idempotent void addHook(BridgeCreationHook* hook);
 
         /**
          * Remove the bridge creation hook that matches the proxy provided.
          */
-        void removeHook(BridgeCreationHook* hook);
+        idempotent void removeHook(BridgeCreationHook* hook);
 
         /**
          * Clear all registered hooks.
          */
-        void clearHooks();
+        idempotent void clearHooks();
     };
 
     const string PartyIdentificationHookLocatorCategory = "PartyIdHook";
@@ -160,7 +164,7 @@ module V1
          * @param[out] replacementConnectedLineUpdate Modified data to be used
          * @return A HookResult indicating whether the hook was successful
          */
-        AsteriskSCF::System::Hook::V1::HookResult modifyReceivedConnectedLine(
+        idempotent AsteriskSCF::System::Hook::V1::HookResult modifyReceivedConnectedLine(
             AsteriskSCF::SessionCommunications::V1::Session *sendingSession, 
             AsteriskSCF::SessionCommunications::PartyIdentification::V1::ConnectedLine receivedConnectedLineUpdate,
             out AsteriskSCF::SessionCommunications::PartyIdentification::V1::ConnectedLine replacementConnectedLineUpdate);
@@ -187,7 +191,7 @@ module V1
          * @param[out] replacementConnectedLine Modified data to be used.
          * @return A HookResult indicating whether the hook was successful
          */
-        AsteriskSCF::System::Hook::V1::HookResult modifyForwardingConnectedLine(
+        idempotent AsteriskSCF::System::Hook::V1::HookResult modifyForwardingConnectedLine(
             AsteriskSCF::SessionCommunications::V1::Session *sendingSession, 
             AsteriskSCF::SessionCommunications::V1::Session *destinationSession, 
             AsteriskSCF::SessionCommunications::PartyIdentification::V1::ConnectedLine receivedConnectedLine,
@@ -215,7 +219,7 @@ module V1
          * @param[out] replacementConnectedLine Modified data to be used.
          * @return A HookResult indicating whether the hook was successful
          */
-        AsteriskSCF::System::Hook::V1::HookResult modifyForwardingCaller(
+        idempotent AsteriskSCF::System::Hook::V1::HookResult modifyForwardingCaller(
             AsteriskSCF::SessionCommunications::V1::Session *sendingSession, 
             AsteriskSCF::SessionCommunications::V1::Session *destinationSession, 
             AsteriskSCF::SessionCommunications::PartyIdentification::V1::Caller receivedCaller,
@@ -244,7 +248,7 @@ module V1
          * @param[out] replacementRedirections Modified data to be used.
          * @return A HookResult indicating whether the hook was successful
          */
-        AsteriskSCF::System::Hook::V1::HookResult modifyForwardingRedirections(
+        idempotent AsteriskSCF::System::Hook::V1::HookResult modifyForwardingRedirections(
             AsteriskSCF::SessionCommunications::V1::Session *sendingSession, 
             AsteriskSCF::SessionCommunications::V1::Session *destinationSession, 
             AsteriskSCF::SessionCommunications::PartyIdentification::V1::Redirections receivedRedirections,
@@ -257,47 +261,47 @@ module V1
         /**
          * Add a hook for received ConnectedLine party id. 
          */
-        void addReceivedConnectedLinePartyIdHook(ReceivedConnectedLinePartyIdHook* hook);
+        idempotent void addReceivedConnectedLinePartyIdHook(ReceivedConnectedLinePartyIdHook* hook);
 
         /**
          * Add a hook to invoke when forwarding ConnectedLine party id. 
          */
-        void addForwardingConnectedLinePartyIdHook(ForwardingConnectedLinePartyIdHook* hook);
+        idempotent void addForwardingConnectedLinePartyIdHook(ForwardingConnectedLinePartyIdHook* hook);
 
         /**
          * Add a hook to invoke when forwarding ConnectedLine party id. 
          */
-        void addForwardingCallerPartyIdHook(ForwardingCallerPartyIdHook* hook);
+        idempotent void addForwardingCallerPartyIdHook(ForwardingCallerPartyIdHook* hook);
 
         /**
          * Add a hook to invoke when forwarding Redirections party id record. 
          */
-        void addForwardingRedirectionsPartyIdHook(ForwardingRedirectionsPartyIdHook* hook);
+        idempotent void addForwardingRedirectionsPartyIdHook(ForwardingRedirectionsPartyIdHook* hook);
 
         /**
          * Remove a received ConnectedLine hook
          */
-        void removeReceivedConnectedLinePartyIdHook(ReceivedConnectedLinePartyIdHook* hook);
+        idempotent void removeReceivedConnectedLinePartyIdHook(ReceivedConnectedLinePartyIdHook* hook);
 
         /**
          * Remove a forwarding ConnectedLine hook
          */
-        void removeForwardingConnectedLinePartyIdHook(ForwardingConnectedLinePartyIdHook* hook);
+        idempotent void removeForwardingConnectedLinePartyIdHook(ForwardingConnectedLinePartyIdHook* hook);
 
         /**
          * Remove a forwarding ConnectedLine hook
          */
-        void removeForwardingCallerPartyIdHook(ForwardingCallerPartyIdHook* hook);
+        idempotent void removeForwardingCallerPartyIdHook(ForwardingCallerPartyIdHook* hook);
 
         /**
          * Remove a forwarding Redirections hook
          */
-        void removeForwardingRedirectionsPartyIdHook(ForwardingRedirectionsPartyIdHook* hook);
+        idempotent void removeForwardingRedirectionsPartyIdHook(ForwardingRedirectionsPartyIdHook* hook);
 
         /**
          * Remove all party identification hooks
          */
-        void clearPartyIdentificationHooks();
+        idempotent void clearPartyIdentificationHooks();
     };
 
 }; /* End of module V1 */
diff --git a/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice b/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice
index 23c1236..1dd53a6 100644
--- a/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice
+++ b/slice/AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice
@@ -300,6 +300,8 @@ module V1
         /**
          * Notification that some indication event has occurred on the session.
          *
+         * @param operationContext Provides unique id for this operation.
+         *
          * @param source The session the event occurred on.
          *
          * @param event The indication event that has occurred.
@@ -310,7 +312,11 @@ module V1
          *
          * @see Indication
          */
-        void indicated(Session* source, Indication event, SessionCookies cookies);
+        idempotent void indicated(
+            AsteriskSCF::System::V1::OperationContext operationContext, 
+            Session* source, 
+            Indication event, 
+            SessionCookies cookies);
     };
 
     sequence<SessionListener*> SessionListenerSeq;
@@ -344,54 +350,78 @@ module V1
         /**
          * Method called to change the state of streams.
          *
+         * @param operationContext Provides unique id for this operation.
+         *
          * @param streams A dictionary of streams and their new state.
          */
-        ["amd"] void changeStreamStates(AsteriskSCF::Media::V1::StreamStateDict streams);
+        ["amd"] idempotent void changeStreamStates(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            AsteriskSCF::Media::V1::StreamStateDict streams);
 
         /**
          * Method called to add streams.
          *
+         * @param operationContext Provides unique id for this operation.
+         *
          * @param streams A dictionary of streams with state and requested formats.
          *
          * @return StreamInformationDict A dictionary of streams actually added with state
          *       and formats. The identifier for each stream must be that of the requested stream.
          */
-        ["amd"] AsteriskSCF::Media::V1::StreamInformationDict addStreams(AsteriskSCF::Media::V1::StreamInformationDict
-                                                                         streams);
+        ["amd"] idempotent AsteriskSCF::Media::V1::StreamInformationDict addStreams(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            AsteriskSCF::Media::V1::StreamInformationDict
+            streams);
 
         /**
          * Method called to remove streams.
          *
+         * @param operationContext Provides unique id for this operation.
+         *
          * @param streams A dictionary of streams to remove.
          */
-        ["amd"] void removeStreams(AsteriskSCF::Media::V1::StreamInformationDict streams);
+        ["amd"] idempotent void removeStreams(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            AsteriskSCF::Media::V1::StreamInformationDict streams);
 
          /**
           * Method which updates connected line party identification. 
           *
+          * @param operationContext Provides unique id for this operation.
+          *
           * @param connectedLine Connected line party information.
           *
           * @see Asterisk::SessionCommunications::PartyIdentifcation::V1::ConnectedLine
           */
-         void updateConnectedLine(AsteriskSCF::SessionCommunications::PartyIdentification::V1::ConnectedLine connectedLine);
+         idempotent void updateConnectedLine(
+             AsteriskSCF::System::V1::OperationContext operationContext,
+             AsteriskSCF::SessionCommunications::PartyIdentification::V1::ConnectedLine connectedLine);
 
          /**
           * Method which updates caller party identification. 
           *
+          * @param operationContext Provides unique id for this operation.
+          *
           * @param connectedLine Caller party information.
           *
           * @see Asterisk::SessionCommunications::PartyIdentifcation::V1::Caller
           */
-         void updateCallerID(AsteriskSCF::SessionCommunications::PartyIdentification::V1::Caller callerID);
+         idempotent void updateCallerID(
+             AsteriskSCF::System::V1::OperationContext operationContext,
+             AsteriskSCF::SessionCommunications::PartyIdentification::V1::Caller callerID);
 
          /**
           * Method which provides notification of redirections that have occurred. 
           *
+          * @param operationContext Provides unique id for this operation.
+          *
           * @param redirections Redirections that have occurred
           * 
           * @see Asterisk::SessionCommunications::PartyIdentifcation::V1::Redirections
           */
-         void updateRedirections(AsteriskSCF::SessionCommunications::PartyIdentification::V1::Redirections redirections);
+         idempotent void updateRedirections(
+             AsteriskSCF::System::V1::OperationContext operationContext,
+             AsteriskSCF::SessionCommunications::PartyIdentification::V1::Redirections redirections);
     };
 
     /**
@@ -417,48 +447,50 @@ module V1
          *
          * @see SessionInfo
          */
-        ["amd"] SessionInfo addListener(SessionListener* listener);
+        ["amd"] idempotent SessionInfo addListener(SessionListener* listener);
 
-    /**
-     * Set (or replace) cookies on the session.
-     *
-     * @param cookies A sequence of one or more concrete objects,
-     *        each of which are of a type derived from SessionCookie.
-     *        The session manager will store these cookies on the
-     *        session, replacing any existing cookies with matching
-     *        types.
-     *
-     * @note  There can only be one cookie of a given type associated
-     *        with a session.
-     **/
-    void setCookies(SessionCookies cookies);
+        /**
+         * Set (or replace) cookies on the session.
+         *
+         * @param cookies A sequence of one or more concrete objects,
+         *        each of which are of a type derived from SessionCookie.
+         *        The session manager will store these cookies on the
+         *        session, replacing any existing cookies with matching
+         *        types.
+         *
+         * @note  There can only be one cookie of a given type associated
+         *        with a session.
+         **/
+        idempotent void setCookies(SessionCookies cookies);
 
-    /**
-     * Remove cookies from the session.
-     *
-     * @param cookies A sequence of one or more concrete objects,
-     *        each of which are of a type derived from SessionCookie.
-     *        The session manager will remove any cookies on the session
-     *        with types that match the ones in this sequence; the
-     *        content of the supplied cookies is not compared.
-     **/
-    void removeCookies(SessionCookies cookies);
+        /**
+         * Remove cookies from the session.
+         *
+         * @param cookies A sequence of one or more concrete objects,
+         *        each of which are of a type derived from SessionCookie.
+         *        The session manager will remove any cookies on the session
+         *        with types that match the ones in this sequence; the
+         *        content of the supplied cookies is not compared.
+         **/
+        idempotent void removeCookies(SessionCookies cookies);
 
-    /**
-     * Get cookies stored on the session.
-     *
-     * @param cookieTypes A sequence of zero or more concrete objects,
-     *        each of which are of a type derived from SessionCookie.
-     *
-     * @return A sequence of zero or more cookies from the session,
-     *         with types that match the types of the template cookies
-     *         provided in the cookieTypes parameter.
-     **/
-    ["amd"] SessionCookies getCookies(SessionCookies cookieTypes);
+        /**
+         * Get cookies stored on the session.
+         *
+         * @param cookieTypes A sequence of zero or more concrete objects,
+         *        each of which are of a type derived from SessionCookie.
+         *
+         * @return A sequence of zero or more cookies from the session,
+         *         with types that match the types of the template cookies
+         *         provided in the cookieTypes parameter.
+         **/
+        ["amd"] idempotent SessionCookies getCookies(SessionCookies cookieTypes);
 
         /**
          * Request that an indication be performed on a session.
          *
+         * @param operationContext Provides unique id for this operation.
+         *
          * @param event The indication event to perform.
          *
          * @throws IndicationException if an error occurs.
@@ -467,7 +499,9 @@ module V1
          *
          * @see IndicationException
          */
-        ["amd"] void indicate(Indication event) throws IndicationException;
+        ["amd"] idempotent void indicate(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            Indication event) throws IndicationException;
 
         /**
          * Method which retrieves a proxy to the endpoint object that created the current session.
@@ -476,7 +510,7 @@ module V1
          *
          * @see SessionEndpoint
          */
-        ["amd"] SessionEndpoint* getEndpoint();
+        ["amd"] idempotent SessionEndpoint* getEndpoint();
 
         /**
          * Method which retrieves information about the current session's state.
@@ -485,14 +519,14 @@ module V1
          *
          * @see SessionInfo
          */
-        ["amd"] SessionInfo getInfo();
+        ["amd"] idempotent SessionInfo getInfo();
 
         /**
          * Method which retrieves streams on the session.
          *
          * @return A StreamInformationDict containing streams and information about them.
          */
-        ["amd"] AsteriskSCF::Media::V1::StreamInformationDict getStreams();
+        ["amd"] idempotent AsteriskSCF::Media::V1::StreamInformationDict getStreams();
 
         /**
          * Retrieve a media session instance, if available, for the current session.
@@ -502,7 +536,7 @@ module V1
          * @return An AsteriskSCF media session for the current session. May be a
          *   nil reference if the media part of the session has not been initialized.
          */
-        ["amd"] AsteriskSCF::Media::V1::Session* getMediaSession();
+        ["amd"] idempotent AsteriskSCF::Media::V1::Session* getMediaSession();
 
         /**
          * Removes a listener from the current list. Once removed, a listener
@@ -510,12 +544,12 @@ module V1
          *
          * @param listener A proxy to the listener to the remove.
          */
-        void removeListener(SessionListener* listener);
+        idempotent void removeListener(SessionListener* listener);
 
         /**
          * Start a session dialogue with a peer.
          */
-        void start();
+        idempotent void start();
 
         /**
          * End the dialogue with the peer, sending the
@@ -523,7 +557,7 @@ module V1
          *
          * @param response Code identifying the reason the dialog stopped.
          */
-        void stop(ResponseCode response);
+        idempotent void stop(ResponseCode response);
 
         /**
          * Gets the bridge object this Session is associated with.
@@ -532,7 +566,7 @@ module V1
          *
          * @throws NotBridged if the session is not currently in a bridge.
          */
-        ["amd"] Bridge* getBridge() throws NotBridged;
+        ["amd"] idempotent Bridge* getBridge() throws NotBridged;
 
         /**
          * Set the Bridge for this session.
@@ -543,7 +577,7 @@ module V1
          *
          * @return A current copy of the session information.
          */
-        ["amd"] SessionInfo setBridge(Bridge* newBridge, SessionListener* listener);
+        ["amd"] idempotent SessionInfo setBridge(Bridge* newBridge, SessionListener* listener);
 
         /**
          * Removes this Session from it's associated Bridge.
@@ -552,7 +586,7 @@ module V1
          *
          * @throws NotBridged if the session is not currently in a bridge.
          */
-        ["amd"] void removeBridge(SessionListener* listener) throws NotBridged;
+        ["amd"] idempotent void removeBridge(SessionListener* listener) throws NotBridged;
 
         /**
          * Method which sets the session controller proxy to be contacted when actions
@@ -576,7 +610,7 @@ module V1
          *
          * @see SessionController
          */
-        ["amd"] SessionController *setAndGetSessionController(SessionController* controller) throws
+        ["amd"] idempotent SessionController *setAndGetSessionController(SessionController* controller) throws
             ControllerAlreadySet;
 
         /**
@@ -588,7 +622,7 @@ module V1
          *
          * @param controller A proxy to the session controller to remove.
          */
-        ["amd"] void removeSessionController(SessionController* controller);
+        ["amd"] idempotent void removeSessionController(SessionController* controller);
 
         /**
          * Method which retrieves caller party identification information
@@ -735,7 +769,7 @@ module V1
          * Attempts to establish an end-to-end communication between an
          * existing session and destination identified by an address or ID.
          *
-         * @param operationId Unique id for this operation.
+         * @param operationContext Provides unique id for this operation.
          *
          * @param source The initiating session.
          *
@@ -752,7 +786,9 @@ module V1
          * @throws BridgingException if the bridge could not be setup properly.
          */
         ["amd"]
-        idempotent void routeSession(string operationId, Session* source,
+        idempotent void routeSession(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            Session* source,
             string destination,
             AsteriskSCF::SessionCommunications::ExtensionPoints::V1::SessionCreationHook* oneShotHook,
             AsteriskSCF::SessionCommunications::PartyIdentification::V1::Caller callerID,
@@ -766,7 +802,7 @@ module V1
          * session routable by the destination param.
          * The session specified may optionally be replaced.
          *
-         * @param operationId Unique id for this operation.
+         * @param operationContext Provides unique id for this operation.
          *
          * @param sessionToReplace The session whose bridged sessions are connected
          *   with a newly created session. The bridge object is obtained from the accessor on this
@@ -791,7 +827,7 @@ module V1
          */
         ["amd"]
         idempotent void connectBridgedSessionsWithDestination(
-                string operationId,
+                AsteriskSCF::System::V1::OperationContext operationContext,
                 Session* sessionToReplace,
                 string destination,
                 bool replaceSession,
@@ -805,7 +841,7 @@ module V1
          * No routing is actually performed. This operation exists here for consistency,
          * since connectBridgedSessionsWithDestination(...) is implemented by this interface.
          *
-         * @param operationId Unique id for this operation.
+         * @param operationContext Provides unique id for this operation.
          *
          * @param sessionToReplace The session that is to be replaced in a
          *   bridge. The bridge obejct associated with this session will survive, and
@@ -829,7 +865,7 @@ module V1
          */
         ["amd"]
         idempotent void connectBridgedSessions(
-                string operationId,
+                AsteriskSCF::System::V1::OperationContext operationContext,
                 Session* sessionToReplace,
                 Session* bridgedSession,
                 bool replaceSession)
@@ -847,6 +883,8 @@ module V1
          * a SessionListener object for notification of changes to the session and also
          * optionally specifying the streams that should be present on the session.
          *
+         * @param operationContext Provides unique id for this operation.
+         *
          * @param destination A stringified identifier or address for the destination.
          *
          * @param callback A SessionListener object to be registered as a listener on the
@@ -856,8 +894,11 @@ module V1
          * @return A newly created session object for the destination.
          *
          */
-        Session* createSession(string destination, SessionListener* callback,
-                AsteriskSCF::SessionCommunications::ExtensionPoints::V1::SessionCreationHook* oneShotHook);
+        idempotent Session* createSession(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            string destination, 
+            SessionListener* callback,
+            AsteriskSCF::SessionCommunications::ExtensionPoints::V1::SessionCreationHook* oneShotHook);
 
         /**
          * Returns the active sessions for this session endpoint.
@@ -872,28 +913,28 @@ module V1
          * any sessions created henceforth, until the default listener 
          * is removed. 
          */
-         void addDefaultSessionListener(SessionListener* listener);
+        idempotent void addDefaultSessionListener(SessionListener* listener);
 
         /**
          * Removes a default SessionListener. Doesn't remove the 
          * the listener from any existing sessions, but rather 
          * stops adding the listener to future sessions.
          */
-         void removeDefaultSessionListener(SessionListener* listener);
+        idempotent void removeDefaultSessionListener(SessionListener* listener);
 
         /**
          * Adds default SessionCookies for sessions created for this endpoint.
          * Does not alter any existing sessions, but any sessions created
          * henceforth will have these cookies set.
          */
-         void addDefaultSessionCookies(SessionCookies cookies);
+        idempotent void addDefaultSessionCookies(SessionCookies cookies);
 
         /**
          * Removes a set of default SessionCookies for sessions created for this endpoint.
          * Doesn't remove cookies from any existing sessions, but new 
          * sessions for this endpoint will not have these cookies set. 
          */
-         void removeDefaultSessionCookies(SessionCookies cookies);
+        idempotent void removeDefaultSessionCookies(SessionCookies cookies);
     };
 
     /**
@@ -1112,7 +1153,8 @@ module V1
          * @see AsteriskSCF::System::V1::OperationContext
          */
         ["amd"]
-        idempotent void replaceSession(AsteriskSCF::System::V1::OperationContext operationContext, Session* sessionToReplace,
+        idempotent void replaceSession(AsteriskSCF::System::V1::OperationContext operationContext, 
+            Session* sessionToReplace,
             SessionWithSessionInfoSeq newSessionInfos)
         throws InvalidSessions, SessionNotFound, BridgeSessionOperationFailed,
             AsteriskSCF::System::V1::OperationCallCancelledException;
@@ -1187,17 +1229,25 @@ module V1
        /**
         * Called when sessions have been added to a bridge.
         *
+        * @param operationContext Information about the logical operation context.
+        *
         * @param sessionBridge The bridge object the sessions were added to.
         *
         * @param sessions A sequence of session proxies that were added to the bridge.
         *
         * @param cookies A sequence of bridge cookies that are associated with the bridge.
         */
-       idempotent void sessionsAdded(Bridge* sessionBridge, SessionSeq sessions, BridgeCookies cookies);
+       idempotent void sessionsAdded(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           Bridge* sessionBridge, 
+           SessionSeq sessions, 
+           BridgeCookies cookies);
 
        /**
         * Called when sessions have been removed from a bridge.
         *
+        * @param operationContext Information about the logical operation context.
+        *
         * @param sessionBridge The bridge object the sessions were removed from.
         *
         * @param sessions A sequence of session proxies that were removed from
@@ -1205,7 +1255,11 @@ module V1
         *
         * @param cookies A sequence of bridge cookies that are associated with the bridge.
         */
-        idempotent void sessionsRemoved(Bridge* sessionBridge, SessionSeq sessions, BridgeCookies cookies);
+        idempotent void sessionsRemoved(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            Bridge* sessionBridge, 
+            SessionSeq sessions, 
+            BridgeCookies cookies);
 
        /**
         * Called when a bridge has completed shutdown/destruction.
@@ -1268,8 +1322,9 @@ module V1
          * 
          */
         ["amd"]
-        idempotent Bridge* createBridge(Session* initiator,
+        idempotent Bridge* createBridge(
                 AsteriskSCF::System::V1::OperationContext operationContext,
+                Session* initiator,
                 SessionSeq destinations,
                 BridgeListener* listener,
                 AsteriskSCF::SessionCommunications::PartyIdentification::V1::Caller callerID,
@@ -1379,7 +1434,7 @@ module V1
           /**
            * Notice that routeSession operation was called.
            *
-           * @param operationId Unique id for this operation.
+           * @param operationContext Provides unique id for this operation.
            *
            * @param source The initiating session.
            *
@@ -1387,12 +1442,16 @@ module V1
            *
            * @param result Operation outcome.
            */
-          void routeSessionEvent(string operationId, Session* source, string destination, OperationResult result);
+          idempotent void routeSessionEvent(
+               AsteriskSCF::System::V1::OperationContext operationContext,
+               Session* source, 
+               string destination, 
+               OperationResult result);
 
           /**
            * Notice that connectBridgedSessionsWithDestinationEvent operation was called.
            *
-           * @param operationId Unique id for this operation.
+           * @param operationContext Provides unique id for this operation.
            *
            * @param sessionToReplace The session that is to be replaced in the
            *   bridge. The bridge obejct is obtained from the accessor on this
@@ -1402,12 +1461,16 @@ module V1
            *
            * @param result Operation outcome.
            */
-          void connectBridgedSessionsWithDestinationEvent(string operationId, Session* sessionToReplace, string destination, OperationResult result);
+          idempotent void connectBridgedSessionsWithDestinationEvent(
+              AsteriskSCF::System::V1::OperationContext operationContext, 
+              Session* sessionToReplace, 
+              string destination, 
+              OperationResult result);
 
           /**
            * Notice that connectBridgedSessionsEvent operation was called.
            *
-           * @param operationId Unique id for this operation.
+           * @param operationContext Provides unique id for this operation.
            *
            * @param sessionToReplace The session that is to be replaced in the
            *   bridge. The bridge obejct is obtained from the accessor on this
@@ -1419,7 +1482,11 @@ module V1
            *
            * @param result Operation outcome.
            */
-          void connectBridgedSessionsEvent(string operationId, Session* sessionToReplace, Session* bridgedSession, OperationResult result);
+          idempotent void connectBridgedSessionsEvent(
+              AsteriskSCF::System::V1::OperationContext operationContext, 
+              Session* sessionToReplace, 
+              Session* bridgedSession, 
+              OperationResult result);
        };
 
     }; /* End of module Event */
diff --git a/slice/AsteriskSCF/SessionCommunications/TelephonyEventsIf.ice b/slice/AsteriskSCF/SessionCommunications/TelephonyEventsIf.ice
index 2e7443b..0d41eff 100644
--- a/slice/AsteriskSCF/SessionCommunications/TelephonyEventsIf.ice
+++ b/slice/AsteriskSCF/SessionCommunications/TelephonyEventsIf.ice
@@ -15,6 +15,9 @@
  */
 
 #pragma once
+
+#include <AsteriskSCF/System/OperationsIf.ice>
+
 module AsteriskSCF
 {
 
@@ -99,13 +102,21 @@ module V1
     {
         /**
          * Add sinks to send telephony events to.
+         *
+         * @param operationContext Provides unique id for this operation.
+         *
+         * @param sinks The sinks to add. 
          */
-        ["amd"] void addSinks(TelephonyEventSinkSeq sinks);
+        ["amd"] idempotent void addSinks(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            TelephonyEventSinkSeq sinks);
 
         /**
          * Remove sinks.
          */
-        ["amd"] void removeSinks(TelephonyEventSinkSeq sinks);
+        ["amd"] idempotent void removeSinks(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            TelephonyEventSinkSeq sinks);
 
         /**
          * Get a list of the sinks to which this source sends events
@@ -125,9 +136,17 @@ module V1
     interface TelephonyEventSink
     {
         /**
-         * Send a telephony event to this sink
+         * Send a telephony event to this sink. 
+         *
+         * @param operationContext Provides unique id for this operation.
+         *
+         * @param event 
          */
-        ["amd"] void write(TelephonyEvent event) throws TelephonyEventException;
+        ["amd"] idempotent void write(
+            AsteriskSCF::System::V1::OperationContext operationContext,
+            TelephonyEvent event) 
+                throws TelephonyEventException;
+
         /**
          * Set the source for this sink
          */
diff --git a/slice/AsteriskSCF/System/Component/ComponentServiceIf.ice b/slice/AsteriskSCF/System/Component/ComponentServiceIf.ice
index e3fe84f..fb4b4b0 100644
--- a/slice/AsteriskSCF/System/Component/ComponentServiceIf.ice
+++ b/slice/AsteriskSCF/System/Component/ComponentServiceIf.ice
@@ -58,7 +58,7 @@ module V1
          *
          * @throws ShuttingDown if the service is in the process of shutting down.
          */
-        void suspend() throws ShuttingDown;
+        idempotent void suspend() throws ShuttingDown;
 
         /**
          * Resumes a service that has been suspended. After this call returns the suspended service
@@ -67,7 +67,7 @@ module V1
          *
          * @throws ShuttingDown if the service is in the process of shutting down.
          */
-        void resume() throws ShuttingDown;
+        idempotent void resume() throws ShuttingDown;
 
         /**
          * Commences a clean shutdown of the services. The details of shutdown are implementation specific.
@@ -77,7 +77,7 @@ module V1
          *
          * @throws Suspended if the service is suspended.
          */
-         void shutdown() throws Suspended;
+         idempotent void shutdown() throws Suspended;
     };
 
     /** 
@@ -97,17 +97,17 @@ module V1
          * Set a test mode. The meaning of the mode is specific
          * to a given component and it's tests. 
          */
-        void setTestMode(string mode);
+        idempotent void setTestMode(string mode);
 
         /** 
          * Set a test mode with params. The meaning of the mode and paramters is specific
          * to a given component and it's tests. 
          */
-        void setTestModeWithArgs(string mode, ComponentTestParamSeq params);
+        idempotent void setTestModeWithArgs(string mode, ComponentTestParamSeq params);
 
-        void clearTestMode(string mode);
+        idempotent void clearTestMode(string mode);
 
-        void clearTestModes();
+        idempotent void clearTestModes();
     };
 
 }; /*  End of V1 */
diff --git a/slice/AsteriskSCF/System/Component/ConfigurationIf.ice b/slice/AsteriskSCF/System/Component/ConfigurationIf.ice
index b2ecce2..1dacf4d 100644
--- a/slice/AsteriskSCF/System/Component/ConfigurationIf.ice
+++ b/slice/AsteriskSCF/System/Component/ConfigurationIf.ice
@@ -16,6 +16,8 @@
 
 #pragma once
 
+#include <AsteriskSCF/System/OperationsIf.ice>
+
 module AsteriskSCF
 {
 
@@ -151,28 +153,37 @@ module V1
        /**
         * Update the configuration of one or more configuration groups.
         *
+        * @param operationContext Provides unique id for this operation.
         * @param groups The groups and configuration items to update (or add).
         *
         * @throws SerialConflict when serial number of a configuration item is out of date.
         *
         */
-       idempotent void setConfiguration(ConfigurationGroupSeq groups) throws SerialConflict;
+       idempotent void setConfiguration(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           ConfigurationGroupSeq groups) throws SerialConflict;
 
        /**
         * Remove specific configuration items from a configuration group.
         *
+        * @param operationContext Provides unique id for this operation.
         * @param groups The groups or configuration items to remove.
         *
         */
-       void removeConfigurationItems(ConfigurationGroupSeq groups);
+       idempotent void removeConfigurationItems(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           ConfigurationGroupSeq groups);
 
        /**
         * Remove a configuration group and all configuration items.
         *
+        * @param operationContext Provides unique id for this operation.
         * @param groups The groups or configuration items to remove.
         *
         */
-       void removeConfigurationGroups(ConfigurationGroupSeq groups);
+       idempotent void removeConfigurationGroups(
+           AsteriskSCF::System::V1::OperationContext operationContext,
+           ConfigurationGroupSeq groups);
     };
 
    /**
@@ -191,7 +202,7 @@ module V1
         *
         * @param service A proxy to the listener.
         */
-       void registerConfigurationService(AsteriskSCF::System::Configuration::V1::ConfigurationService *service);
+       idempotent void registerConfigurationService(AsteriskSCF::System::Configuration::V1::ConfigurationService *service);
    };
 
 }; /* End of namespace V1 */
diff --git a/slice/AsteriskSCF/System/Component/ReplicaIf.ice b/slice/AsteriskSCF/System/Component/ReplicaIf.ice
index 4164b7a..5a9c739 100644
--- a/slice/AsteriskSCF/System/Component/ReplicaIf.ice
+++ b/slice/AsteriskSCF/System/Component/ReplicaIf.ice
@@ -51,7 +51,7 @@ module V1
        *
        * @return true if active, false if in standby mode.
        */
-      bool isActive();
+      idempotent bool isActive();
 
       /**
        * tells the replica object to transition from standby to active mode.
@@ -59,14 +59,14 @@ module V1
        *
        * @return true if activated, false if failed to activate.
        */
-      bool activate();
+      idempotent bool activate();
 
       /**
        * standby tells the replica object to transition from active to standby mode.
        * Calling standby on a replica that is already in standby mode should have
        * no effect.
        */
-      void standby();
+      idempotent void standby();
 
       /**
        * addListener adds a ReplicaListener object that will receive notifications
@@ -74,7 +74,7 @@ module V1
        *
        * @param listener The ReplicaListener object to be added.
        */
-      void addListener(ReplicaListener* listener);
+      idempotent void addListener(ReplicaListener* listener);
 
       /**
        * removeListener removes a ReplicaListener object from the list of listeners
@@ -82,7 +82,7 @@ module V1
        *
        * @param listener The ReplicaListener object to be removed.
        */
-      void removeListener(ReplicaListener* listener);
+      idempotent void removeListener(ReplicaListener* listener);
    };
 
    /**
@@ -98,14 +98,14 @@ module V1
        *
        * @param source The replica under transition.
        */
-      void activated(Replica* source);
+      idempotent void activated(Replica* source);
 
       /**
        * Called when a replica has moved from active to standby state.
        *
        * @param source The replica under transition.
        */
-      void onStandby(Replica* source);
+      idempotent void onStandby(Replica* source);
 
       /**
        * A replica may periodically notify listeners of its state.
@@ -114,7 +114,7 @@ module V1
        *
        * @param isActive the current status of replica, true if active, false if on standby.
        */
-      void heartbeat(Replica* source, bool isActive);
+      idempotent void heartbeat(Replica* source, bool isActive);
     };
 
 }; /* End of namespace V1 */
diff --git a/slice/AsteriskSCF/System/Logger/LoggerIf.ice b/slice/AsteriskSCF/System/Logger/LoggerIf.ice
index 2fb8032..121fb1f 100644
--- a/slice/AsteriskSCF/System/Logger/LoggerIf.ice
+++ b/slice/AsteriskSCF/System/Logger/LoggerIf.ice
@@ -16,6 +16,8 @@
 
 #pragma once
 
+#include <AsteriskSCF/System/OperationsIf.ice>
+
 module AsteriskSCF
 {
 
@@ -148,9 +150,12 @@ module Logging
       /**
        * Notification of a new configuration.
        *
... 42 lines suppressed ...


-- 
asterisk-scf/integration/slice.git



More information about the asterisk-scf-commits mailing list