[asterisk-scf-commits] asterisk-scf/integration/routing.git branch "route_replica" updated.

Commits to the Asterisk SCF project code repositories asterisk-scf-commits at lists.digium.com
Tue Apr 26 17:08:16 CDT 2011


branch "route_replica" has been updated
       via  c229b133b74e1a6d4ad477dc2809861b93a642ec (commit)
       via  4c9b64b5a5b7c9ac3d9a96389d00c351b2b0b011 (commit)
       via  3632fa8fe7ca3aebe0c8d7d78a27746646611c26 (commit)
       via  7090af19ec4b77203249e406433469902747dd52 (commit)
       via  ec7d5a75b94b2636c7716bf4f6f9cd5485eec640 (commit)
       via  e26a5e71e5a272af1d18b24f1647e7961373351d (commit)
       via  fe758598e8bf9e1a2896555f3116a4721940ba59 (commit)
       via  225ab0ceb9cbbdf8e524e627897683c18dd63bb6 (commit)
       via  ca0d8f5dd3daff418523a456c08811ab9283f6c8 (commit)
       via  84330fff57a073e168125471fbaa8ad0a5deffca (commit)
       via  1c8a3168decb16bf39136c71bf7ea8c2278b12f2 (commit)
       via  857ecb2d626a38ccf0ec9f85546acd584e36f344 (commit)
       via  fe30d8edeaff2370cd6737e8768a275699c15639 (commit)
       via  0bfb211c2bf36c567f0f43537de2accb99b2b539 (commit)
       via  094adeedea1ff8e76dadc56646191a440cea51bb (commit)
       via  5f19c0311610114762dd1f12c269e30f9462f68b (commit)
       via  c699276d2988519de935e1f9d9cf74139aeb52d0 (commit)
       via  202cea618546a891c9a3daa94522d1d7981aa97a (commit)
       via  e3e9bee702442da2fcf608fbd397f58ca901926c (commit)
       via  6bc5ea45ba208e4ec0b2a6b4b0416c02dedfed6a (commit)
       via  53e4cc7c8e0af9b0aad06699e386aa7657460f69 (commit)
       via  ed0b280dee905303a032b64503ba9ee0272cbe3a (commit)
       via  c816cb57332b6cad1277b16582a2b22e7dc3e9e7 (commit)
       via  ff689cdbe7cf7a6da9a3e51cfd68540fee6f88a0 (commit)
       via  f97f2313449ce44c68a62c409f11729718412d19 (commit)
       via  6dde95cd9c7902661eb8dca41d590d128a64fd1b (commit)
       via  88d1d904f5d76d1185f5f0aff98acca062fa47f9 (commit)
       via  5b9b4472bc3b67c0bcd31817a913dfcafa822551 (commit)
       via  728136565bfcda6555d8335ae68dbc1ed3e0859f (commit)
       via  2bf23eebe4d576ba355cab8b818e280267999cba (commit)
       via  b3ca1721ff1e4ff3f5dab1f3e18daf95246bd9fa (commit)
       via  42c99da77483e81f27dd51caf997df6f3999b6f3 (commit)
       via  17315ed02076c88dde9e74b93c661c255b28fffa (commit)
       via  62336bb7f690b64562ccd19ed6cd370f6e47ac28 (commit)
       via  6e3878b6a12ac333e817284504896984dd7bc3ee (commit)
       via  8a97cd195db2ea12f4dc30494eb4e5968063126e (commit)
       via  503795a461d068efff9a2edd3c6f8a685badb081 (commit)
       via  4838f17d8deeb4991ee6bd0edc1ba23a197fa0f2 (commit)
       via  c9f6521ba85207afe33ce75fe132217136e27c02 (commit)
       via  d2ba3ebcf37912b94cd6e37e27b60b553737cacb (commit)
       via  be9168f36d9785259a56fa6781b1f9698e70feef (commit)
       via  4412b56c2b6c9c7c0a8e67674e4b25fa62126cc8 (commit)
       via  fd0cca72f9619ceed4127ca377d17fcd9bbadb8e (commit)
       via  0ec69e310c04cc5adc0fea1f363d35126c653c82 (commit)
       via  229737c095035362f35c8f24c00462149e1c23eb (commit)
      from  92bc96aee37ea0b6580cdc69a684a9378b04467f (commit)

Summary of changes:
 config/routingtest-integ.config.in             |    2 +-
 local-slice/BasicRoutingStateReplicationIf.ice |    2 +-
 src/BasicRoutingServiceApp.cpp                 |   42 +++++----
 src/CMakeLists.txt                             |    6 --
 src/EndpointRegistry.h                         |    2 +
 src/ReplicationContext.cpp                     |    2 +-
 src/RouteSessionOperation.cpp                  |    2 +-
 src/RoutingServiceEventPublisher.cpp           |    1 +
 src/SessionListener.cpp                        |   13 ++-
 src/SessionListener.h                          |   25 +-----
 src/SessionRouter.cpp                          |    4 +-
 src/SessionRouter.h                            |    3 +-
 test/MockBridge.cpp                            |  114 +++++++++++++++---------
 test/MockBridge.h                              |   12 ++-
 test/MockBridgeManager.cpp                     |   26 ++++--
 test/MockBridgeManager.h                       |    4 +-
 test/MockSession.cpp                           |   37 +++-----
 test/MockSession.h                             |    7 +--
 test/MockSessionEndpoint.cpp                   |    2 +-
 test/TestRouting.cpp                           |  108 +++++++++++++++++++----
 20 files changed, 251 insertions(+), 163 deletions(-)


- Log -----------------------------------------------------------------
commit c229b133b74e1a6d4ad477dc2809861b93a642ec
Merge: 4c9b64b 92bc96a
Author: Ken Hunt <ken.hunt at digium.com>
Date:   Tue Apr 26 17:06:56 2011 -0500

    Merge branch 'route_replica' of gitdepot:asterisk-scf/integration/routing into route_replica
    
    Conflicts:
    	local-slice/BasicRoutingStateReplicationIf.ice
    	src/BasicRoutingServiceApp.cpp
    	src/CMakeLists.txt
    	src/EndpointRegistry.h
    	src/ReplicationContext.cpp
    	src/RouteSessionOperation.cpp
    	src/RoutingServiceEventPublisher.h
    	src/SessionListener.cpp
    	src/SessionListener.h
    	src/SessionRouter.cpp
    	src/SessionRouter.h
    	test/TestRouting.cpp

diff --cc src/BasicRoutingServiceApp.cpp
index e1c6501,59dae3d..eb32e51
--- a/src/BasicRoutingServiceApp.cpp
+++ b/src/BasicRoutingServiceApp.cpp
@@@ -323,10 -323,10 +323,10 @@@ void BasicRoutingServiceApp::onStandby(
      listenToStateReplicator();
  }
  
--/** 
-- * Register as a listener to our state replicator. 
++
++/** Register as a listener to our state replicator.
   * A component in standby mode will do this to monitor state changes
-- * being sent from an active component. 
++ * being sent from an active component.
   */
  void BasicRoutingServiceApp::listenToStateReplicator()
  {
@@@ -340,8 -340,8 +340,9 @@@
          // Are we in standby mode?
          if (mReplicationContext->isComponentActive() == false)
          {
--            AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx oneWayStateReplicator = 
--                  AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx::uncheckedCast(mReplicationContext->getReplicatorService()->ice_oneway());
++            AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx oneWayStateReplicator =
++                AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx::uncheckedCast(
++                  mReplicationContext->getReplicatorService()->ice_oneway());
  
              oneWayStateReplicator->addListener(mReplicatorListenerProxy);
              mListeningToReplicator = true;
@@@ -354,10 -354,10 +355,10 @@@
      }
  }
  
--/** 
-- * Unregister as a listener to our state replicator. 
++/**
++ * Unregister as a listener to our state replicator.
   * A component in active mode doesn't neeed to listen to
-- * state replication data. 
++ * state replication data.
   */
  void BasicRoutingServiceApp::stopListeningToStateReplicator()
  {
@@@ -368,8 -368,8 +369,9 @@@
  
      try
      {
--        AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx oneWayStateReplicator = 
--                AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx::uncheckedCast(mReplicationContext->getReplicatorService()->ice_oneway());
++        AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx oneWayStateReplicator =
++                AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx::uncheckedCast(
++                  mReplicationContext->getReplicatorService()->ice_oneway());
  
          oneWayStateReplicator->removeListener(mReplicatorListenerProxy);
  
diff --cc src/EndpointRegistry.h
index b262c0f,8365562..5622dfe
--- a/src/EndpointRegistry.h
+++ b/src/EndpointRegistry.h
@@@ -19,7 -19,7 +19,9 @@@
  
  #include <AsteriskSCF/Core/Routing/RoutingIf.h>
  #include <AsteriskSCF/SmartProxy.h>
+ 
 +#include "BasicRoutingStateReplicationIf.h"
++
  #include "ReplicationContext.h"
  #include "ScriptProcessor.h"
  
diff --cc src/SessionListener.cpp
index 2e55f7e,2829c1b..ee8ec21
--- a/src/SessionListener.cpp
+++ b/src/SessionListener.cpp
@@@ -45,17 -45,9 +45,16 @@@ SessionListenerImpl::~SessionListenerIm
  {
  }
  
--
 -void SessionListenerImpl::stopped(const SessionPrx& session, const AsteriskSCF::SessionCommunications::V1::ResponseCodePtr& responseCode, const Ice::Current&)
 +void SessionListenerImpl::indicated(const SessionPrx& session, 
 +                                    const IndicationPtr& event,
 +                                    const Ice::Current&)
  {
 +    StoppedIndicationPtr stoppedIndication = StoppedIndicationPtr::dynamicCast(event);
 +    if (stoppedIndication == 0)
 +    {
 +        return;
 +    }
 +
      mTerminated = true;
  
      SessionSeq cacheSessions;
diff --cc src/SessionRouter.h
index e1ae20b,f695882..623d38c
--- a/src/SessionRouter.h
+++ b/src/SessionRouter.h
@@@ -20,7 -20,7 +20,8 @@@
  
  #include <AsteriskSCF/SmartProxy.h>
  #include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.h>
 -#include "AsteriskSCF/Threading/WorkQueue.h"
 +#include <AsteriskSCF/Threading/WorkQueue.h>
++
  #include "EndpointRegistry.h"
  
  namespace AsteriskSCF
diff --cc test/TestRouting.cpp
index ba7c32c,0c5c548..4f4ec28
--- a/test/TestRouting.cpp
+++ b/test/TestRouting.cpp
@@@ -290,6 -288,6 +290,7 @@@ public
      }
  };
  
++
  /**
   * Test adding and removing a locator with the routing service's Locator Registry.
   */
@@@ -640,7 -570,7 +641,8 @@@ BOOST_FIXTURE_TEST_CASE(BackupEndpointL
          // There's nothing to prevent this from working, although in practice, 
          // we'd expect other components to not have a proxy to the backup component's interfaces. 
          BOOST_TEST_MESSAGE("Looking up endpoint via the Backup Routing Service...");
 -        string lookupVal = "102";
 +        string lookupVal = "101";
++
          AsteriskSCF::Core::Endpoint::V1::EndpointSeq seq = SharedTestData::instance.backupLocatorRegistry->lookup(lookupVal);
  
          BOOST_CHECK(seq.size() > 0);

commit 4c9b64b5a5b7c9ac3d9a96389d00c351b2b0b011
Author: Ken Hunt <ken.hunt at digium.com>
Date:   Tue Apr 26 16:31:58 2011 -0500

    Integrated with release code.

diff --git a/src/BasicRoutingServiceApp.cpp b/src/BasicRoutingServiceApp.cpp
index 59dae3d..e1c6501 100644
--- a/src/BasicRoutingServiceApp.cpp
+++ b/src/BasicRoutingServiceApp.cpp
@@ -490,17 +490,19 @@ void BasicRoutingServiceApp::deregisterFromServiceLocator(bool includeComponentS
  */
 void BasicRoutingServiceApp::locateBridgeManager()
 {
-    mBridgeManager = AsteriskSCF::SmartProxy::SmartProxy<BridgeManagerPrx>(
-        mServiceLocator,
-        new ServiceLocatorParams(BridgeServiceDiscoveryCategory),
-        lg);
-
-    mSessionContext->bridgeManager = mBridgeManager;
-
-    if (!mBridgeManager.isInitialized())
+    try
     {
-        lg(Debug) << "Probabaly safe to ignore ServiceNotFound during startup. Will attempt to locate Bridge Service again when it is needed.";
+        mBridgeManager = AsteriskSCF::SmartProxy::SmartProxy<BridgeManagerPrx>(
+            mServiceLocator,
+            new ServiceLocatorParams(BridgeServiceDiscoveryCategory),
+            lg);
     }
+    catch(const AsteriskSCF::Core::Discovery::V1::ServiceNotFound&)
+    {
+        lg(Debug) << "BridgeManager not found... safe to ignore ServiceNotFound during startup.";
+    }
+
+    mSessionContext->bridgeManager = mBridgeManager;
 }
 
 /**
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0e0351f..44c019f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,6 +5,8 @@ include_directories(${LUA_INCLUDE_DIR})
 
 asterisk_scf_slice_include_directories(${API_SLICE_DIR})
 
+asterisk_scf_component_add_slice(BasicRoutingService ../local-slice/BasicRoutingStateReplicationIf.ice)
+
 asterisk_scf_component_add_file(BasicRoutingService BasicRoutingServiceApp.cpp)
 asterisk_scf_component_add_file(BasicRoutingService SessionRouter.cpp)
 asterisk_scf_component_add_file(BasicRoutingService SessionRouter.h)
diff --git a/src/RoutingServiceEventPublisher.h b/src/RoutingServiceEventPublisher.h
index 26de38c..028a21c 100644
--- a/src/RoutingServiceEventPublisher.h
+++ b/src/RoutingServiceEventPublisher.h
@@ -19,7 +19,6 @@
 #include <boost/shared_ptr.hpp>
 
 #include <AsteriskSCF/Core/Routing/RoutingIf.h>
-#include <AsteriskSCF/Core/Routing/RoutingIf.h>
 #include <AsteriskSCF/SmartProxy.h>
 #include "BasicRoutingStateReplicationIf.h"
 
diff --git a/src/SessionRouter.cpp b/src/SessionRouter.cpp
index dbcb77d..a8395dd 100644
--- a/src/SessionRouter.cpp
+++ b/src/SessionRouter.cpp
@@ -24,10 +24,6 @@
 #include <AsteriskSCF/logger.h>
 #include "AsteriskSCF/Threading/WorkQueue.h"
 
-#include <AsteriskSCF/Core/Routing/RoutingIf.h>
-#include <AsteriskSCF/Core/Endpoint/EndpointIf.h>
-#include <AsteriskSCF/logger.h>
-
 #include "SessionRouter.h"
 #include "RouteSessionOperation.h"
 #include "ConnectBridgedSessionsOperation.h"
diff --git a/test/TestRouting.cpp b/test/TestRouting.cpp
index f3bbff7..ba7c32c 100644
--- a/test/TestRouting.cpp
+++ b/test/TestRouting.cpp
@@ -29,10 +29,6 @@
 #include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.h>
 #include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.h>
 
-#include <AsteriskSCF/Core/Routing/RoutingIf.h>
-#include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.h>
-#include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.h>
-
 #include "SharedTestData.h"
 #include "MockBridge.h"
 #include "MockBridgeManager.h"
@@ -150,7 +146,6 @@ struct GlobalIceFixture
                 throw "Invalid Backup Replica";
             }
 
-            PopulateEndpoints();
             RegisterWithServiceLocator();
         }
         catch (const Ice::Exception& ex)
@@ -193,20 +188,6 @@ struct GlobalIceFixture
         management->addLocatorParams(genericparams, "");
     }
 
-    void PopulateEndpoints()
-    {
-        SharedTestData::instance.endpointLocator->clear();
-
-        SharedTestData::instance.endpointLocator->addEndpoint("101");
-        SharedTestData::instance.endpointLocator->addEndpoint("102");
-        SharedTestData::instance.endpointLocator->addEndpoint("103");
-        SharedTestData::instance.endpointLocator->addEndpoint("104");
-
-        // Initialize the regular expressions for the ids that this channel will support.
-        // Use two strings just for kicks.
-        SharedTestData::instance.regExIds.push_back("101");
-        SharedTestData::instance.regExIds.push_back("10[234]");  // 102, 103 or 104
-    }
 
     ~GlobalIceFixture()
     {
@@ -238,6 +219,8 @@ public:
         try
         {
             SharedTestData::instance.locatorRegistry->addEndpointLocator("TestChannel", SharedTestData::instance.regExIds, SharedTestData::instance.endpointLocatorPrx);
+        
+            PopulateEndpoints();
         }
         catch (...)
         {
@@ -262,6 +245,21 @@ public:
             BOOST_TEST_MESSAGE("Unknown exception. PerTestFixture can't remove our endpoint locator from the Routing Service..");
         }
     }
+
+    void PopulateEndpoints()
+    {
+        SharedTestData::instance.endpointLocator->clear();
+
+        SharedTestData::instance.endpointLocator->addEndpoint("101");
+        SharedTestData::instance.endpointLocator->addEndpoint("102");
+        SharedTestData::instance.endpointLocator->addEndpoint("103");
+        SharedTestData::instance.endpointLocator->addEndpoint("104");
+
+        // Initialize the regular expressions for the ids that this channel will support.
+        // Use two strings just for kicks.
+        SharedTestData::instance.regExIds.push_back("101");
+        SharedTestData::instance.regExIds.push_back("10[234]");  // 102, 103 or 104
+    }
 };
 
 /**
@@ -613,6 +611,15 @@ BOOST_AUTO_TEST_CASE(ChangeLocatorIds)
         BOOST_FAIL("Exception during lookup of modified EndpointLocator.");
     }
 
+    try
+    {
+        SharedTestData::instance.locatorRegistry->removeEndpointLocator("TestChannel");
+    }
+    catch (...)
+    {
+        BOOST_FAIL("Exception removing EndpointLocator.");
+    }
+
     BOOST_TEST_MESSAGE("Completed ChangeLocatorIds test.");
 }
 
@@ -633,7 +640,7 @@ BOOST_FIXTURE_TEST_CASE(BackupEndpointLocatorInStandby, PerTestFixture)
         // There's nothing to prevent this from working, although in practice, 
         // we'd expect other components to not have a proxy to the backup component's interfaces. 
         BOOST_TEST_MESSAGE("Looking up endpoint via the Backup Routing Service...");
-        string lookupVal = "102";
+        string lookupVal = "101";
         AsteriskSCF::Core::Endpoint::V1::EndpointSeq seq = SharedTestData::instance.backupLocatorRegistry->lookup(lookupVal);
 
         BOOST_CHECK(seq.size() > 0);

commit 3632fa8fe7ca3aebe0c8d7d78a27746646611c26
Author: Ken Hunt <ken.hunt at digium.com>
Date:   Mon Apr 25 18:07:24 2011 -0500

    Integration with recent release repo changes.

diff --git a/local-slice/BasicRoutingStateReplicationIf.ice b/local-slice/BasicRoutingStateReplicationIf.ice
index a23e9cb..c039f0f 100644
--- a/local-slice/BasicRoutingStateReplicationIf.ice
+++ b/local-slice/BasicRoutingStateReplicationIf.ice
@@ -30,7 +30,7 @@ module V1
     const string StateReplicatorComponentCategory = "RoutingStateReplicatorComponent";
     const string StateReplicatorDiscoveryCategory = "RoutingStateReplicator";
 
-    class RoutingStateReplicatorParams extends AsteriskSCF::Core::Discovery::V1::ServiceLocatorParams
+    unsliceable class RoutingStateReplicatorParams extends AsteriskSCF::Core::Discovery::V1::ServiceLocatorParams
     {
        string name;
     };
diff --git a/src/ReplicationContext.cpp b/src/ReplicationContext.cpp
index ab29728..f9f1f21 100644
--- a/src/ReplicationContext.cpp
+++ b/src/ReplicationContext.cpp
@@ -51,7 +51,7 @@ bool ReplicationContext::isReplicating()
 {
     boost::shared_lock<boost::shared_mutex> lock(mImpl->mLock);
 
-    return (mImpl->mActive && mImpl->mReplicatorService.initializeOnce());
+    return ((mImpl->mActive) && (mImpl->mReplicatorService.initialize() != 0));
 }
 
 bool ReplicationContext::isComponentActive()
diff --git a/src/RouteSessionOperation.cpp b/src/RouteSessionOperation.cpp
index bb2a405..3c62105 100644
--- a/src/RouteSessionOperation.cpp
+++ b/src/RouteSessionOperation.cpp
@@ -363,7 +363,7 @@ void RouteSessionOperation::lookupState()
 {
     lg(Debug) <<  BOOST_CURRENT_FUNCTION << ": entered with destination " << mDestination ;
 
-    if (!mSessionContext->bridgeManager.initializeOnce())
+    if (mSessionContext->bridgeManager.initialize() == 0)
     {
         lg(Error) << "No proxy to BridgeManager.  "
             "Make sure all services are running.";
diff --git a/src/SessionListener.cpp b/src/SessionListener.cpp
index 2829c1b..2e55f7e 100644
--- a/src/SessionListener.cpp
+++ b/src/SessionListener.cpp
@@ -46,8 +46,16 @@ SessionListenerImpl::~SessionListenerImpl()
 }
 
 
-void SessionListenerImpl::stopped(const SessionPrx& session, const AsteriskSCF::SessionCommunications::V1::ResponseCodePtr& responseCode, const Ice::Current&)
+void SessionListenerImpl::indicated(const SessionPrx& session, 
+                                    const IndicationPtr& event,
+                                    const Ice::Current&)
 {
+    StoppedIndicationPtr stoppedIndication = StoppedIndicationPtr::dynamicCast(event);
+    if (stoppedIndication == 0)
+    {
+        return;
+    }
+
     mTerminated = true;
 
     SessionSeq cacheSessions;
@@ -63,7 +71,7 @@ void SessionListenerImpl::stopped(const SessionPrx& session, const AsteriskSCF::
         {
             if (session->ice_getIdentity() != (*s)->ice_getIdentity())
             {
-                (*s)->stop(responseCode);
+                (*s)->stop(stoppedIndication->response);
             }
         }
         catch(const Ice::Exception &e)
diff --git a/src/SessionListener.h b/src/SessionListener.h
index ad06259..31b1997 100644
--- a/src/SessionListener.h
+++ b/src/SessionListener.h
@@ -39,28 +39,9 @@ public:
 
 public: // Overrides for SessionListener
 
-    void connected(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
-                   const Ice::Current&) {}     // No-op
-
-    void flashed(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
-                 const Ice::Current&) {}       // No-op
-
-    void held(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
-              const Ice::Current&) {}          // No-op
-
-    void progressing(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
-                     const AsteriskSCF::SessionCommunications::V1::ResponseCodePtr&, 
-                     const Ice::Current&) {}   // No-op
-
-    void ringing(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
-                 const Ice::Current&) {}       // No op
-
-    void unheld(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
-                const Ice::Current&) {}        // No op
-
-    void stopped(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
-                 const AsteriskSCF::SessionCommunications::V1::ResponseCodePtr& responseCode, 
-                 const Ice::Current&);
+    void indicated(const AsteriskSCF::SessionCommunications::V1::SessionPrx& session, 
+                   const ::AsteriskSCF::SessionCommunications::V1::IndicationPtr& event,
+                   const Ice::Current&);
 
 public: // Impl operations
 

commit 7090af19ec4b77203249e406433469902747dd52
Author: Ken Hunt <ken.hunt at digium.com>
Date:   Mon Apr 25 11:11:46 2011 -0500

    gcc cleanup.

diff --git a/src/BasicRoutingServiceApp.cpp b/src/BasicRoutingServiceApp.cpp
index 64d8397..59dae3d 100644
--- a/src/BasicRoutingServiceApp.cpp
+++ b/src/BasicRoutingServiceApp.cpp
@@ -80,6 +80,7 @@ public:
           mWorkQueue( new AsteriskSCF::Threading::SimpleWorkQueue("SessionRouterWorkQueue")),
           mListeningToReplicator(false)
     {
+        lg.setLevel(Error);
     }
 
     ~BasicRoutingServiceApp()
diff --git a/src/SessionRouterOperation.h b/src/SessionRouterOperation.h
index 9095423..7bc8212 100644
--- a/src/SessionRouterOperation.h
+++ b/src/SessionRouterOperation.h
@@ -26,6 +26,7 @@
 #include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.h>
 #include <AsteriskSCF/SmartProxy.h>
 #include <AsteriskSCF/Core/Routing/RoutingIf.h>
+#include <AsteriskSCF/logger.h>
 #include "ReplicationContext.h"
 
 #include "SessionListener.h"
@@ -219,7 +220,7 @@ public:
             // we provide our override of the appropriate AMD callback. 
             // For state machine, note that this means the result will "callback" on the same thread
             // that called this method.
-            AMD_EndpointLocator_lookupPtr lookupCallback;
+            ::AsteriskSCF::Core::Routing::V1::AMD_EndpointLocator_lookupPtr lookupCallback;
 
             lookupCallback = new LookupCallback<T, S>(this);
 
@@ -312,7 +313,7 @@ protected:
  * AMD implementation that other components would use to do a lookup(). 
  */
 template <typename T, typename S>
-class LookupCallback : public AMD_EndpointLocator_lookup
+class LookupCallback : public ::AsteriskSCF::Core::Routing::V1::AMD_EndpointLocator_lookup
 {
 public:
     LookupCallback(SessionRouterOperation<T, S>* operation)

commit ec7d5a75b94b2636c7716bf4f6f9cd5485eec640
Author: Ken Hunt <ken.hunt at digium.com>
Date:   Mon Apr 25 10:30:15 2011 -0500

    Adding tests for replication.
      - New tests.
      - One-way calls to add/remove replication listener.

diff --git a/config/routingtest-integ.config.in b/config/routingtest-integ.config.in
index 5aad998..1e9528c 100644
--- a/config/routingtest-integ.config.in
+++ b/config/routingtest-integ.config.in
@@ -39,7 +39,7 @@ BridgeManager.ServiceLocatorId=BridgeService
 
 RoutingService.Endpoints=tcp -p 10050
 RoutingService.ComponentService.Endpoints=tcp -p 10051
-RoutingService.ThreadPool.Size=4
+RoutingService.ThreadPool.Size=6
 RoutingService.ThreadPool.SizeMax=10
 RoutingService.ThreadPool.SizeWarn=9
 RoutingService.Standby=no
@@ -47,7 +47,7 @@ RoutingService.StateReplicatorName=Replicator
 
 RoutingService2.Endpoints=tcp -p 10052
 RoutingService2.ComponentService.Endpoints=tcp -p 10053
-RoutingService2.ThreadPool.Size=4
+RoutingService2.ThreadPool.Size=6
 RoutingService2.ThreadPool.SizeMax=10
 RoutingService2.ThreadPool.SizeWarn=9
 RoutingService2.Standby=yes
@@ -56,7 +56,9 @@ RoutingService2.StateReplicatorName=Replicator
 Replicator.InstanceName=Replicator
 Replicator.Endpoints=default -p 10054
 Replicator.ComponentService.Endpoints=default -p 10055
-Replicator.ThreadPool.Size=4
+Replicator.ThreadPool.Size=6
+Replicator.ThreadPool.SizeMax=10
+Replicator.ThreadPool.SizeWarn=9
 
 # AsteriskSCF.RoutingService.logger=Debug
 
@@ -67,10 +69,18 @@ Replicator.ThreadPool.Size=4
 TestRoutingAdapterOut.Endpoints=tcp -p 10070
 TestRoutingAdapterIn.Endpoints=tcp -p 10071
 
+# NOTE: For testing, we grab direct proxy to the same servant on 
+# backup service.
+
 # Where to look for the Routing Service LocatorRegistry interface
 LocatorRegistry.Proxy=RoutingServiceLocatorRegistry:tcp -p 10050
+BackupLocatorRegistry.Proxy=RoutingServiceLocatorRegistry:tcp -p 10052
 
 SessionRouter.Proxy=SessionRouter:tcp -p 10050
+BackupSessionRouter.Proxy=SessionRouter:tcp -p 10052
+
+Replica.Proxy=BasicRoutingServiceReplica:tcp -p 10050
+BackupReplica.Proxy=BasicRoutingServiceReplica:tcp -p 10052
 
 TestRoutingAdapterIn.ThreadPool.Size=4
 TestRoutingAdapterIn.ThreadPool.SizeMax=10
@@ -121,3 +131,4 @@ ServiceLocatorLocalAdapter.Endpoints=tcp -p 4412
 
 # Logger configuration
 LoggerAdapter.Endpoints=default
+AsteriskSCF.Logging.logger.AsteriskSCF=Error
diff --git a/src/BasicRoutingServiceApp.cpp b/src/BasicRoutingServiceApp.cpp
index 84e35cb..64d8397 100644
--- a/src/BasicRoutingServiceApp.cpp
+++ b/src/BasicRoutingServiceApp.cpp
@@ -329,17 +329,27 @@ void BasicRoutingServiceApp::onStandby()
  */
 void BasicRoutingServiceApp::listenToStateReplicator()
 {
-    // Do we have a reference to our state replicator?
-    if (mReplicationContext->getReplicatorService() == 0)
+    if ((mReplicationContext->getReplicatorService() == 0) || (mListeningToReplicator == true))
     {
         return;
     }
 
-    // Are we in standby mode?
-    if (mReplicationContext->isComponentActive() == false)
+    try
     {
-        mReplicationContext->getReplicatorService()->addListener(mReplicatorListenerProxy);
-        mListeningToReplicator = true;
+        // Are we in standby mode?
+        if (mReplicationContext->isComponentActive() == false)
+        {
+            AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx oneWayStateReplicator = 
+                  AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx::uncheckedCast(mReplicationContext->getReplicatorService()->ice_oneway());
+
+            oneWayStateReplicator->addListener(mReplicatorListenerProxy);
+            mListeningToReplicator = true;
+        }
+    }
+    catch (const Ice::Exception& e)
+    {
+        lg(Error) << e.what();
+        throw;
     }
 }
 
@@ -350,13 +360,25 @@ void BasicRoutingServiceApp::listenToStateReplicator()
  */
 void BasicRoutingServiceApp::stopListeningToStateReplicator()
 {
-    if (!mListeningToReplicator)
+    if ((mReplicationContext->getReplicatorService() == 0) || (mListeningToReplicator == false))
     {
         return;
     }
 
-    mReplicationContext->getReplicatorService()->removeListener(mReplicatorListenerProxy);
-    mListeningToReplicator = false;
+    try
+    {
+        AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx oneWayStateReplicator = 
+                AsteriskSCF::BasicRoutingService::V1::RoutingStateReplicatorPrx::uncheckedCast(mReplicationContext->getReplicatorService()->ice_oneway());
+
+        oneWayStateReplicator->removeListener(mReplicatorListenerProxy);
+
+        mListeningToReplicator = false;
+    }
+    catch (const Ice::Exception& e)
+    {
+        lg(Error) << e.what();
+        throw;
+    }
 }
 
 /**
diff --git a/src/RoutingStateReplicatorListener.cpp b/src/RoutingStateReplicatorListener.cpp
index a1c5d64..dc48b3c 100644
--- a/src/RoutingStateReplicatorListener.cpp
+++ b/src/RoutingStateReplicatorListener.cpp
@@ -122,12 +122,14 @@ public:
 	    class visitor : public AsteriskSCF::BasicRoutingService::V1::RoutingStateItemVisitor
 	    {
 	    public:
-	        visitor(RoutingStateReplicatorListenerPriv *impl) : mImpl(impl)
+	        visitor(RoutingStateReplicatorListenerPriv *impl, const Ice::Current& current)  
+                        :  mImpl(impl), mCurrent(current)
 	        {
 	        }
 
 	    private:
 	        RoutingStateReplicatorListenerPriv *mImpl;
+            const Ice::Current& mCurrent;
 
             void visitRouteSessionOpStart(const ::AsteriskSCF::BasicRoutingService::V1::RouteSessionOpStartPtr& opState)
             {
@@ -161,13 +163,13 @@ public:
 
             void visitEndpointLocatorState(const ::AsteriskSCF::BasicRoutingService::V1::EndpointLocatorStatePtr& item)
             {
-                mImpl->mEndpointRegistry->addEndpointLocator(item->key, item->regExList, item->locator, ::Ice::Current());
+                mImpl->mEndpointRegistry->addEndpointLocator(item->key, item->regExList, item->locator, mCurrent);
             }
 
         }; // end method-local visitor def
 
         // Create the visitor. Smart pointer will cleanup when this method exits. 
-        AsteriskSCF::BasicRoutingService::V1::RoutingStateItemVisitorPtr v = new visitor(this);
+        AsteriskSCF::BasicRoutingService::V1::RoutingStateItemVisitorPtr v = new visitor(this, current);
 
         for (RoutingStateItemSeq::const_iterator item = items.begin(); item != items.end(); ++item)
         {
diff --git a/test/SharedTestData.h b/test/SharedTestData.h
index dd7d145..a82c213 100644
--- a/test/SharedTestData.h
+++ b/test/SharedTestData.h
@@ -20,6 +20,7 @@
 #include <AsteriskSCF/Core/Routing/RoutingIf.h>
 #include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.h>
 #include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.h>
+#include <AsteriskSCF/System/Component/ReplicaIf.h>
 
 #include "MockBridgeManager.h"
 #include "MockEndpointLocator.h"
@@ -44,9 +45,15 @@ struct SharedTestData
     Ice::ObjectAdapterPtr adapterIn;
     Ice::ObjectAdapterPtr adapterOut;
 
-    //A proxy to the actual routing service
+    // Proxies to the routing service
     AsteriskSCF::Core::Routing::V1::LocatorRegistryPrx locatorRegistry;
     AsteriskSCF::SessionCommunications::V1::SessionRouterPrx sessionRouter;
+    AsteriskSCF::System::Component::V1::ReplicaPrx serviceReplicaMgmt;
+
+    // Proxies to the backup instance's routing service interfaces.
+    AsteriskSCF::Core::Routing::V1::LocatorRegistryPrx backupLocatorRegistry;
+    AsteriskSCF::SessionCommunications::V1::SessionRouterPrx backupSessionRouter;
+    AsteriskSCF::System::Component::V1::ReplicaPrx backupServiceReplicaMgmt;
 
     // Our own EndpointLocator to server up endpoints to the RoutingService, emulating a channel.
     MockEndpointLocatorPtr endpointLocator;
diff --git a/test/TestRouting.cpp b/test/TestRouting.cpp
index d1fef56..f3bbff7 100644
--- a/test/TestRouting.cpp
+++ b/test/TestRouting.cpp
@@ -45,6 +45,7 @@ using namespace AsteriskSCF::Core::Endpoint::V1;
 using namespace AsteriskSCF::SessionCommunications::V1;
 using namespace AsteriskSCF::Core::Discovery::V1;
 using namespace AsteriskSCF::RoutingTest;
+using namespace AsteriskSCF::System::Component::V1;
 
 /**
  * Instantiate our shared data.
@@ -94,20 +95,26 @@ struct GlobalIceFixture
             SharedTestData::instance.communicatorOut = Ice::initialize(initData);
             SharedTestData::instance.adapterOut = SharedTestData::instance.communicatorOut->createObjectAdapterWithEndpoints("TestRoutingAdapterOut", "default -p 10071");
 
-            // Get ref to Routing Service so we can test it. Getting direct for now, but
+            // Get ref to Routing Service EndpointLocator so we can test it. Getting direct for now, but
             // need to test acquiring reference via ServiceLocator as well.
-            Ice::PropertiesPtr communicatorProps = SharedTestData::instance.communicatorOut->getProperties();
             Ice::ObjectPrx locatorObj = SharedTestData::instance.communicatorOut->propertyToProxy("LocatorRegistry.Proxy");
             SharedTestData::instance.locatorRegistry = LocatorRegistryPrx::uncheckedCast(locatorObj);
 
-            // Get the ServiceLocator and ServiceLocator manager
-            // <TBD>
-
             if (!SharedTestData::instance.locatorRegistry)
             {
                 throw "Invalid LocatorRegistry";
             }
 
+            // Get ref to Backup Routing Services EndpointLocator we can test it. 
+            Ice::ObjectPrx locatorObj2 = SharedTestData::instance.communicatorOut->propertyToProxy("BackupLocatorRegistry.Proxy");
+            SharedTestData::instance.backupLocatorRegistry = LocatorRegistryPrx::uncheckedCast(locatorObj2);
+
+            if (!SharedTestData::instance.backupLocatorRegistry)
+            {
+                throw "Invalid Backup LocatorRegistry";
+            }
+
+            // Get a ref to the SessionRouter interface and cache it for testing.
             Ice::ObjectPrx routerObj = SharedTestData::instance.communicatorOut->propertyToProxy("SessionRouter.Proxy");
             SharedTestData::instance.sessionRouter = SessionRouterPrx::checkedCast(routerObj);
 
@@ -116,8 +123,34 @@ struct GlobalIceFixture
                 throw "Invalid SessionRouter";
             }
 
-            PopulateEndpoints();
+            // Get a ref to the Backup SessionRouter interface and cache it for testing.
+            Ice::ObjectPrx routerObj2 = SharedTestData::instance.communicatorOut->propertyToProxy("BackupSessionRouter.Proxy");
+            SharedTestData::instance.backupSessionRouter = SessionRouterPrx::checkedCast(routerObj2);
+
+            if (!SharedTestData::instance.backupSessionRouter)
+            {
+                throw "Invalid Backup SessionRouter";
+            }
+
+            // Get a ref to the Replica interface and cache it for testing.
+            Ice::ObjectPrx replicaObj = SharedTestData::instance.communicatorOut->propertyToProxy("Replica.Proxy");
+            SharedTestData::instance.serviceReplicaMgmt = ReplicaPrx::checkedCast(replicaObj);
+
+            if (!SharedTestData::instance.serviceReplicaMgmt)
+            {
+                throw "Invalid Replica";
+            }
 
+            // Get a ref to the Replica interface and cache it for testing.
+            Ice::ObjectPrx replicaObj2 = SharedTestData::instance.communicatorOut->propertyToProxy("BackupReplica.Proxy");
+            SharedTestData::instance.backupServiceReplicaMgmt = ReplicaPrx::checkedCast(replicaObj2);
+
+            if (!SharedTestData::instance.backupServiceReplicaMgmt)
+            {
+                throw "Invalid Backup Replica";
+            }
+
+            PopulateEndpoints();
             RegisterWithServiceLocator();
         }
         catch (const Ice::Exception& ex)
@@ -232,6 +265,34 @@ public:
 };
 
 /**
+ * A fixture for replication testing.
+ * Provides setup/teardown for a specific set of tests.
+ */
+struct ReplicationFixture : public PerTestFixture
+{
+public:
+    ReplicationFixture()
+    {
+        try
+        {
+        }
+        catch (...)
+        {
+        }
+    }
+
+    ~ReplicationFixture()
+    {
+        try
+        {
+        }
+        catch (...)
+        {
+        }
+    }
+};
+
+/**
  * Test adding and removing a locator with the routing service's Locator Registry.
  */
 BOOST_AUTO_TEST_CASE(AddAndRemoveEndpointLocator)
@@ -556,29 +617,91 @@ BOOST_AUTO_TEST_CASE(ChangeLocatorIds)
 }
 
 /**
- * A fixture for replication testing.
- * Provides setup/teardown for a specific set of tests.
+ * See if we can do a lookup of the endpoint locator on the backup
+ * service while it is still in standby mode. 
+ * There's nothing to prevent this from working, although in practice, 
+ * we'd expect other components to not have a proxy to the backup component's interfaces. 
  */
-struct ReplicationFixture
+BOOST_FIXTURE_TEST_CASE(BackupEndpointLocatorInStandby, PerTestFixture)
 {
-public:
-    ReplicationFixture()
+    try
     {
-        try
-        {
-        }
-        catch (...)
-        {
-        }
+        // Give the state replicator time to push the EndpointLocator to the standby component. 
+        IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(500));
+
+        // Do a lookup on the backup while it is in standby mode. 
+        // There's nothing to prevent this from working, although in practice, 
+        // we'd expect other components to not have a proxy to the backup component's interfaces. 
+        BOOST_TEST_MESSAGE("Looking up endpoint via the Backup Routing Service...");
+        string lookupVal = "102";
+        AsteriskSCF::Core::Endpoint::V1::EndpointSeq seq = SharedTestData::instance.backupLocatorRegistry->lookup(lookupVal);
+
+        BOOST_CHECK(seq.size() > 0);
+        BOOST_CHECK(seq[0]->getId() == lookupVal);
+    }
+    catch(const std::exception &e)
+    {
+        string msg = "Exception looking up endpoint via Backup Service Locator: ";
+        msg += e.what();
+        BOOST_FAIL(msg);
     }
+}
+/**
+ * See if we can do a lookup of the endpoint locator on the backup
+ * after it's activated.
+ */
+BOOST_FIXTURE_TEST_CASE(BackupEndpointLocatorActive, PerTestFixture)
+{
+    try
+    {
+        // Give the state replicator time to push the EndpointLocator to the standby component. 
+        IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1000));
 
-    ~ReplicationFixture()
+        // Make the backup active. 
+        SharedTestData::instance.backupServiceReplicaMgmt->activate();
+        BOOST_CHECK(SharedTestData::instance.backupServiceReplicaMgmt->isActive() == true);
+
+        // Do a lookup on it now that it's active. 
+        BOOST_TEST_MESSAGE("Looking up endpoint via the Backup Routing Service...");
+        string lookupVal = "102";
+        AsteriskSCF::Core::Endpoint::V1::EndpointSeq seq = SharedTestData::instance.backupLocatorRegistry->lookup(lookupVal);
+
+        BOOST_CHECK(seq.size() > 0);
+        BOOST_CHECK(seq[0]->getId() == lookupVal);
+
+        // Set the backup back into standby mode.
+        SharedTestData::instance.backupServiceReplicaMgmt->standby();
+        BOOST_CHECK(SharedTestData::instance.backupServiceReplicaMgmt->isActive() == false);
+
+    }
+    catch(const std::exception &e)
     {
-        try
-        {
-        }
-        catch (...)
-        {
-        }
+        string msg = "Exception looking up endpoint via Backup Service Locator: ";
+        msg += e.what();
+        BOOST_FAIL(msg);
     }
-};
+}
+
+BOOST_FIXTURE_TEST_CASE(SwitchActiveAndStandby, PerTestFixture)
+{
+    try
+    {
+        // Verify that both the active and standby services report the correct state.
+        BOOST_CHECK(SharedTestData::instance.serviceReplicaMgmt->isActive() == true);
+        BOOST_CHECK(SharedTestData::instance.backupServiceReplicaMgmt->isActive() == false);
+
+        // Switch the active to standby. 
+        SharedTestData::instance.serviceReplicaMgmt->standby();
+        BOOST_CHECK(SharedTestData::instance.serviceReplicaMgmt->isActive() == false);
+
+        // Switch back to active. 
+        SharedTestData::instance.serviceReplicaMgmt->activate();
+        BOOST_CHECK(SharedTestData::instance.serviceReplicaMgmt->isActive() == true);
+    }
+    catch (...)
+    {
+        BOOST_FAIL("Exception switching component between active and standby.");
+    }
+
+}
+

commit e26a5e71e5a272af1d18b24f1647e7961373351d
Author: Ken Hunt <ken.hunt at digium.com>
Date:   Sun Apr 24 17:24:27 2011 -0500

    Changed the transactionId in the Ice context to a parameter for SessionRouter operations.

diff --git a/local-slice/BasicRoutingStateReplicationIf.ice b/local-slice/BasicRoutingStateReplicationIf.ice
index 576175d..a23e9cb 100644
--- a/local-slice/BasicRoutingStateReplicationIf.ice
+++ b/local-slice/BasicRoutingStateReplicationIf.ice
@@ -81,11 +81,11 @@ module V1
     };
 
     /** 
-     * All transactional operations will derive from this. 
+     * All transient operations will derive from this. 
      */
     class OperationStateItem extends RoutingStateItem
     {
-        string transactionId; 
+        string operationId; 
     };
 
     ///////////////////////////////////////////////////////////////////////
@@ -94,7 +94,7 @@ module V1
 
     /**
      * Indicates the RouteSessionOperation started. 
-     * The key (in the base state item) is the transactionId of this 
+     * The key (in the base state item) is the operationId of this 
      * operation + RouteSessionOpStartKeyMod 
      */
     class RouteSessionOpStart extends OperationStateItem
@@ -106,7 +106,7 @@ module V1
 
     /**
      * Indicates the RouteSessionOperation has completed an AMI endpoint lookup(). 
-     * The key (in the base state item) is the transactionId of this 
+     * The key (in the base state item) is the operationId of this 
      * operation + RouteSessionOpWaitLookupKeyMod
      */
     class RouteSessionOpWaitLookupState extends OperationStateItem
@@ -117,7 +117,7 @@ module V1
 
     /**
      * Indicates the RouteSessionOperation has created the bridge. 
-     * The key (in the base state item) is the transactionId of this 
+     * The key (in the base state item) is the operationId of this 
      * operation + RouteSessionOpBridgingKeyMod
      */
     class RouteSessionOpBridgingState extends OperationStateItem
@@ -132,7 +132,7 @@ module V1
 
     /**
      * Indicates the ConnectBridgedSessionsWithDestinationOperation started. 
-     * The key (in the base state item) is the transactionId of this 
+     * The key (in the base state item) is the operationId of this 
      * operation + ConnectBridgedSessionsWithDestStartKeyMod
      */
     class ConnectBridgedSessionsWithDestinationOpStart extends OperationStateItem
@@ -144,7 +144,7 @@ module V1
 
     /**
      * Indicates the ConnectBridgedSessionsWithDestinationOperation completed an AMI endpoint lookup(). 
-     * The key (in the base state item) is the transactionId of this 
+     * The key (in the base state item) is the operationId of this 
      * operation + ConnectBridgedSessionsWithDestWaitLookupKeyMod
      */
     class ConnectBridgedSessionsWithDestinationOpWaitLookupState extends OperationStateItem
@@ -155,7 +155,7 @@ module V1
 
     /**
      * Indicates the ConnectBridgedSessionsWithDestinationOperation has created the bridge. 
-     * The key (in the base state item) is the transactionId of this 
+     * The key (in the base state item) is the operationId of this 
      * operation + ConnectBridgedSessionsWithDestBridgingKeyMod
      */
     class ConnectBridgedSessionsWithDestinationOpBridgingState extends OperationStateItem
diff --git a/src/ConnectBridgedSessionsOperation.cpp b/src/ConnectBridgedSessionsOperation.cpp
index d9a61b1..358007f 100644
--- a/src/ConnectBridgedSessionsOperation.cpp
+++ b/src/ConnectBridgedSessionsOperation.cpp
@@ -46,59 +46,49 @@ namespace BasicRoutingService
  * This object is an instance of WorkQueue::Work so that it can enqueued to a worker thread. 
  */
 
-ConnectBridgedSessionsOperation::ConnectBridgedSessionsOperation(const AMD_SessionRouter_connectBridgedSessionsPtr& cb,
-                                                                const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
-                                                                const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& bridgedSession, 
-                                                                const ::Ice::Current& current,
-                                                                const SessionContextPtr& context,
-                                                                OperationsManager* const listener,
-                                                                std::string transactionId)
-        : SessionRouterOperation<AMD_SessionRouter_connectBridgedSessionsPtr, ConnectBridgedSessionsOp::OperationState>(cb, 
-                                                                                                                        context, 
-                                                                                                                        current,
-                                                                                                                        listener,
-                                                                                                          ConnectBridgedSessionsOp::STATE_CONNECT,
-                                                                                                          transactionId),
+ConnectBridgedSessionsOperation::ConnectBridgedSessionsOperation
+                           (const AMD_SessionRouter_connectBridgedSessionsPtr& cb,
+                            const std::string& operationId,
+                            const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
+                            const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& bridgedSession, 
+                            const ::Ice::Current& current,
+                            const SessionContextPtr& context,
+                            OperationsManager* const listener)
+        : SessionRouterOperation<AMD_SessionRouter_connectBridgedSessionsPtr, 
+                                 ConnectBridgedSessionsOp::OperationState>
+                                     (cb, 
+                                      context, 
+                                      current,
+                                      listener,
+                                      ConnectBridgedSessionsOp::STATE_CONNECT,
+                                      operationId),
            mSessionToReplace(sessionToReplace),
            mBridgedSession(bridgedSession)
 {
-    Ice::Context::const_iterator it = current.ctx.find(::AsteriskSCF::SessionCommunications::V1::TransactionKey);
-    if (it == current.ctx.end())
-    {
-         lg(Error) << "ConnectBridgedSessionsOperation() called with no transaction ID set!"  ;
-         throw InvalidParamsException();
-    }
-
-    mTransactionId = (it->second);
-        mStateMachine.addState(ConnectBridgedSessionsOp::STATE_CONNECT, boost::bind(&ConnectBridgedSessionsOperation::connectBridgedSessionsState, this));
+    mStateMachine.addState(ConnectBridgedSessionsOp::STATE_CONNECT, 
+                           boost::bind(&ConnectBridgedSessionsOperation::connectBridgedSessionsState, this));
 }
 
 /**
  * Factory method for the operation. 
  */
-ConnectBridgedSessionsOperationPtr ConnectBridgedSessionsOperation::create(const AMD_SessionRouter_connectBridgedSessionsPtr& cb,
-                                                                           const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
-                                                                           const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& bridgedSession, 
-                                                                           const ::Ice::Current& current,
-                                                                           const SessionContextPtr& context,
-                                                                           OperationsManager* const listener)
+ConnectBridgedSessionsOperationPtr ConnectBridgedSessionsOperation::create
+                    (const AMD_SessionRouter_connectBridgedSessionsPtr& cb,
+                    const std::string& operationId,
+                    const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
+                    const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& bridgedSession, 
+                    const ::Ice::Current& current,
+                    const SessionContextPtr& context,
+                    OperationsManager* const listener)
 {
-    // We don't really care about the transaction id on this operation, since we don't replicate this operation.
-    Ice::Context::const_iterator it = current.ctx.find(::AsteriskSCF::SessionCommunications::V1::TransactionKey);
-    std::string transactionId = "unused";
-    if (it == current.ctx.end())
-    {
-         lg(Error) << "ConnectBridgedSessionsOperation() called with no transaction ID set. Ignored."  ;
-         transactionId = (it->second);
-    }
-    
+  
     ConnectBridgedSessionsOperationPtr ptr(new ConnectBridgedSessionsOperation(cb,
+                                                                               operationId,
                                                                                sessionToReplace,
                                                                                bridgedSession,
                                                                                current,
                                                                                context,
-                                                                               listener,
-                                                                               transactionId));
+                                                                               listener));
 
     return ptr;
 }
@@ -142,8 +132,8 @@ void ConnectBridgedSessionsOperation::connectBridgedSessionsState()
 
     // Create a listener for the sessions not being replaced to handle early termination.
     lg(Debug) << "connectBridgedSessions(): Adding listener to " << preserveSessions.size() << " session(s)." ;
-    SessionListenerManagerPtr listener(new SessionListenerManager(mSessionContext->adapter, preserveSessions));
-    mListenerManager = listener;
+    mListenerManager = SessionListenerManagerPtr(
+          new SessionListenerManager(mSessionContext->adapter, preserveSessions));
 
     // Get the bridge for the sessions being moved.
     BridgePrx oldBridge;
@@ -162,7 +152,8 @@ void ConnectBridgedSessionsOperation::connectBridgedSessionsState()
     // Check for early termination by the source.
     if (mListenerManager->getListener()->isTerminated())
     {
-        lg(Notice) << "connectBridgedSessions(): Source ended session before transfer in connectBridgedSessions(). " ;
+        lg(Notice) << BOOST_CURRENT_FUNCTION << 
+             ": Source ended session before transfer in connectBridgedSessions(). " ;
         finishWithException(SourceTerminatedPreBridgingException(preserveSessions[0]->getEndpoint()->getId()));
         return;
     }
@@ -175,12 +166,12 @@ void ConnectBridgedSessionsOperation::connectBridgedSessionsState()
     // Now replace the sessions.
     try
     {
-        lg(Debug) << "connectBridgedSessions(): Asking bridge to replace sessions." ;
+        lg(Debug) << BOOST_CURRENT_FUNCTION << ": Asking bridge to replace sessions." ;
         mergeBridge->replaceSession(mSessionToReplace, migratingSessions);
     }
     catch(const Ice::Exception& e)
     {
-        lg(Error) << "connectBridgedSessions(): Unable to replace session for bridge in connectBridgedSessions(). " ;
+        lg(Error) << BOOST_CURRENT_FUNCTION << ": Unable to replace session for bridge in connectBridgedSessions(). " ;
         finishWithException(e);
         return;
     }
diff --git a/src/ConnectBridgedSessionsOperation.h b/src/ConnectBridgedSessionsOperation.h
index 1a87dce..32c0de9 100644
--- a/src/ConnectBridgedSessionsOperation.h
+++ b/src/ConnectBridgedSessionsOperation.h
@@ -63,6 +63,7 @@ class  ConnectBridgedSessionsOperation : public SessionRouterOperation<AsteriskS
 public:
     static ConnectBridgedSessionsOperationPtr create(
                           const AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_connectBridgedSessionsPtr& cb,
+                          const std::string& operationId,
                           const AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
                           const AsteriskSCF::SessionCommunications::V1::SessionPrx& bridgedSession, 
                           const Ice::Current& current,
@@ -73,12 +74,12 @@ public:
 
 protected:
     ConnectBridgedSessionsOperation(const AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_connectBridgedSessionsPtr& cb,
+                                    const std::string& operationId,
                                     const AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
                                     const AsteriskSCF::SessionCommunications::V1::SessionPrx& bridgedSession, 
                                     const Ice::Current& current,
                                     const SessionContextPtr& context,
-                                    OperationsManager* const listener,
-                                    std::string transactionId);
+                                    OperationsManager* const listener);
 
 private:
     /**
diff --git a/src/ConnectBridgedSessionsWithDestinationOperation.cpp b/src/ConnectBridgedSessionsWithDestinationOperation.cpp
index 17ac0d8..8a6cb15 100644
--- a/src/ConnectBridgedSessionsWithDestinationOperation.cpp
+++ b/src/ConnectBridgedSessionsWithDestinationOperation.cpp
@@ -41,20 +41,21 @@ namespace BasicRoutingService
 /**
  * This listener monitors the progress of an operation, and pushes relevant state to the replicator. 
  */
-class ConnectBridgedSessionsWithDestReplicatingListener : public SimpleStateMachine<ConnectBridgedSessionsWithDestinationOp::OperationState>::StateMachineListener
+class ConnectBridgedSessionsWithDestReplicatingListener : 
+       public SimpleStateMachine<ConnectBridgedSessionsWithDestinationOp::OperationState>::StateMachineListener
 {
 public:
     ConnectBridgedSessionsWithDestReplicatingListener(ConnectBridgedSessionsWithDestinationOperationPtr op, 
                                                       const ReplicationContextPtr& replication)  
                                                          : mOperation(op), 
                                                            mReplicationContext(replication), 
-                                                           mTransactionId(op->getTransactionId())
+                                                           mOperationId(op->getOperationId())
     {
     }
 
     ~ConnectBridgedSessionsWithDestReplicatingListener()
     {
-        lg(Debug) << "ConnectBridgedSessionsWithDestReplicatingListener() being destroyed for transaction " << mTransactionId;
+        lg(Debug) << "ConnectBridgedSessionsWithDestReplicatingListener() being destroyed for operation " << mOperationId;
     }
 
     /**
@@ -67,22 +68,19 @@ public:
             return;
         }
 
-        switch(state)
+        if (state == ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP)
         {
-        case ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP:
-            {
             // Push this information to the state replicator.
-            ConnectBridgedSessionsWithDestinationOpStartPtr opStart(new ConnectBridgedSessionsWithDestinationOpStart());
-            opStart->transactionId = mOperation->getTransactionId();
-            opStart->key = mOperation->getTransactionId() + AsteriskSCF::BasicRoutingService::V1::ConnectBridgedSessionsWithDestStartKeyMod;
+            ConnectBridgedSessionsWithDestinationOpStartPtr 
+                 opStart(new ConnectBridgedSessionsWithDestinationOpStart());
+            opStart->operationId = mOperation->getOperationId();
+            opStart->key = mOperation->getOperationId() + 
+                 AsteriskSCF::BasicRoutingService::V1::ConnectBridgedSessionsWithDestStartKeyMod;
             opStart->sessionToReplace = mOperation->getSessionToReplace();
             opStart->destination = mOperation->getDestination();
 
             pushState(opStart);
-            }
-            break;
-
-       } // end switch
+        }
     }
 
     void pushState(RoutingStateItemPtr item)
@@ -112,9 +110,11 @@ public:
             {
             // We just completed the entire operation. 
             // Push this information to the state replicator.
-            ConnectBridgedSessionsWithDestinationOpWaitLookupStatePtr waitLookup(new ConnectBridgedSessionsWithDestinationOpWaitLookupState());
-            waitLookup->transactionId = mOperation->getTransactionId();
-            waitLookup->key = mOperation->getTransactionId() + AsteriskSCF::BasicRoutingService::V1::RouteSessionOpWaitLookupKeyMod;
+            ConnectBridgedSessionsWithDestinationOpWaitLookupStatePtr 
+                 waitLookup(new ConnectBridgedSessionsWithDestinationOpWaitLookupState());
+            waitLookup->operationId = mOperation->getOperationId();
+            waitLookup->key = mOperation->getOperationId() + 
+                 AsteriskSCF::BasicRoutingService::V1::RouteSessionOpWaitLookupKeyMod;
             waitLookup->endpoints = mOperation->getLookupResult();
 
             pushState(waitLookup);
@@ -125,9 +125,11 @@ public:
             {
             // We just completed creating a bridge. 
             // Push this information to the state replicator.
-            ConnectBridgedSessionsWithDestinationOpBridgingStatePtr bridgeOp(new ConnectBridgedSessionsWithDestinationOpBridgingState());
-            bridgeOp->transactionId = mOperation->getTransactionId();
-            bridgeOp->key = mOperation->getTransactionId() + AsteriskSCF::BasicRoutingService::V1::RouteSessionOpBridgingKeyMod;
+            ConnectBridgedSessionsWithDestinationOpBridgingStatePtr 
+                 bridgeOp(new ConnectBridgedSessionsWithDestinationOpBridgingState());
+            bridgeOp->operationId = mOperation->getOperationId();
+            bridgeOp->key = mOperation->getOperationId() + 
+                    AsteriskSCF::BasicRoutingService::V1::RouteSessionOpBridgingKeyMod;
             bridgeOp->bridge = mOperation->getBridge();
 
             pushState(bridgeOp);
@@ -169,7 +171,7 @@ public:
 
 private:
     RoutingStateItemSeq mReplicatedState;
-    std::string mTransactionId;
+    std::string mOperationId;
     ConnectBridgedSessionsWithDestinationOperationPtr mOperation;
     ReplicationContextPtr mReplicationContext;
 
@@ -177,10 +179,14 @@ private:
 
 void ConnectBridgedSessionsWithDestinationOperation::initStateMachine()
 {
-    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP, boost::bind(&ConnectBridgedSessionsWithDestinationOperation::lookupState, this));
-    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_WAIT_LOOKUP_RESULTS, boost::bind(&ConnectBridgedSessionsWithDestinationOperation::waitOnLookupState, this));
-    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_BRIDGING, boost::bind(&ConnectBridgedSessionsWithDestinationOperation::establishBridgeState, this));
-    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_SEND_RESPONSE, boost::bind(&ConnectBridgedSessionsWithDestinationOperation::sendResponseState, this));
+    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP, 
+                           boost::bind(&ConnectBridgedSessionsWithDestinationOperation::lookupState, this));
+    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_WAIT_LOOKUP_RESULTS, 
+                           boost::bind(&ConnectBridgedSessionsWithDestinationOperation::waitOnLookupState, this));
+    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_BRIDGING, 
+                           boost::bind(&ConnectBridgedSessionsWithDestinationOperation::establishBridgeState, this));
+    mStateMachine.addState(ConnectBridgedSessionsWithDestinationOp::STATE_SEND_RESPONSE, 
+                           boost::bind(&ConnectBridgedSessionsWithDestinationOperation::sendResponseState, this));
 }
 
 /**
@@ -189,19 +195,21 @@ void ConnectBridgedSessionsWithDestinationOperation::initStateMachine()
  * 
  * This object is an instance of WorkQueue::Work so that it can enqueued to a worker thread. 
  */
-ConnectBridgedSessionsWithDestinationOperation::ConnectBridgedSessionsWithDestinationOperation(const AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr& cb,
+ConnectBridgedSessionsWithDestinationOperation::ConnectBridgedSessionsWithDestinationOperation(
+                          const AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr& cb,
+                          const std::string& operationId,
                           const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
                           const ::std::string& destination, 
                           const ::Ice::Current& current,
                           const SessionContextPtr& context,
-                          OperationsManager* const listener,
-                          std::string transactionId)
-        : SessionRouterOperation<AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr, ConnectBridgedSessionsWithDestinationOp::OperationState>(cb, 
+                          OperationsManager* const listener)
+        : SessionRouterOperation<AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr, 
+                                ConnectBridgedSessionsWithDestinationOp::OperationState>(cb, 
                                 context, 
                                 current,
                                 listener,
                                 ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP,
-                                transactionId),
+                                operationId),
         mSessionToReplace(sessionToReplace),
         mDestination(destination)
 {
@@ -213,27 +221,21 @@ ConnectBridgedSessionsWithDestinationOperation::ConnectBridgedSessionsWithDestin
  */
 ConnectBridgedSessionsWithDestinationOperationPtr ConnectBridgedSessionsWithDestinationOperation::create(
                           const AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr& cb,
+                          const std::string& operationId,
                           const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
                           const ::std::string& destination, 
                           const ::Ice::Current& current,
                           const SessionContextPtr& context,
                           OperationsManager* const listener)
 {
-    Ice::Context::const_iterator it = current.ctx.find(::AsteriskSCF::SessionCommunications::V1::TransactionKey);
-    if (it == current.ctx.end())
-    {
-         lg(Error) << "ConnectBridgedSessionsWithDestinationOperation() called with no transaction ID set!"  ;
-         throw InvalidParamsException();
-    }
-    std::string transactionId = (it->second);
 
     ConnectBridgedSessionsWithDestinationOperationPtr op( new ConnectBridgedSessionsWithDestinationOperation(cb,
+                                                        operationId,
                                                         sessionToReplace,
                                                         destination,
                                                         current,
                                                         context,
-                                                        listener,
-                                                        transactionId) );
+                                                        listener) );
 
     boost::shared_ptr<SimpleStateMachine<ConnectBridgedSessionsWithDestinationOp::OperationState>::StateMachineListener> replicatingListener(new ConnectBridgedSessionsWithDestReplicatingListener(op, context->replicationContext));
     op->addStateMachineListener(replicatingListener);
@@ -245,10 +247,10 @@ ConnectBridgedSessionsWithDestinationOperationPtr ConnectBridgedSessionsWithDest
  * Constructor to service replicas. 
  */
 ConnectBridgedSessionsWithDestinationOperation::ConnectBridgedSessionsWithDestinationOperation(const SessionContextPtr& context)
-        : SessionRouterOperation<AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr, ConnectBridgedSessionsWithDestinationOp::OperationState>(
-                                context, 
-                                ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP
-                                )
+        : SessionRouterOperation<AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr, 
+                                ConnectBridgedSessionsWithDestinationOp::OperationState>
+                                (context, 
+                                 ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP)
 {
     initStateMachine();
 }
@@ -256,7 +258,8 @@ ConnectBridgedSessionsWithDestinationOperation::ConnectBridgedSessionsWithDestin
 /**
  * Factory for replica objects. 
  */
-ConnectBridgedSessionsWithDestinationOperationPtr ConnectBridgedSessionsWithDestinationOperation::createReplica(const SessionContextPtr& context)
+ConnectBridgedSessionsWithDestinationOperationPtr 
+      ConnectBridgedSessionsWithDestinationOperation::createReplica(const SessionContextPtr& context)
 {
     ConnectBridgedSessionsWithDestinationOperationPtr op(new ConnectBridgedSessionsWithDestinationOperation(context));
     return op;
@@ -291,7 +294,7 @@ void ConnectBridgedSessionsWithDestinationOperation::reflectUpdate(AsteriskSCF::
 {
     mSessionToReplace = item->sessionToReplace;
     mDestination = item->destination;
-    mTransactionId = item->transactionId;
+    mOperationId = item->operationId;
 
     mReplicatedStates.push_back(ConnectBridgedSessionsWithDestinationOp::STATE_LOOKUP);
 }
@@ -352,7 +355,7 @@ bool ConnectBridgedSessionsWithDestinationOperation::fastForwardReplica()
  */
 void ConnectBridgedSessionsWithDestinationOperation::lookupState()
 {
-    lg(Debug) << "connectBridgedSessionsWithDestination() entered with destination " << mDestination;
+    lg(Debug) << BOOST_CURRENT_FUNCTION << ": entered with destination " << mDestination;
 
     try
     {
@@ -377,18 +380,16 @@ void ConnectBridgedSessionsWithDestinationOperation::lookupState()
     // Create a listener for the sessions not being replaced to handle early termination.
     // The wrapper we're using will remove the listener and free it when
     // this method is left.
-    lg(Debug) << "connectBridgedSessionsWithDestination(): Attaching listener";
-    SessionListenerManagerPtr listener(new SessionListenerManager(mSessionContext->adapter, mSessionToReplace));
-    mListenerManager = listener;
+    lg(Debug) << BOOST_CURRENT_FUNCTION << ": Attaching listener";
+    mListenerManager = SessionListenerManagerPtr(new SessionListenerManager(mSessionContext->adapter, mSessionToReplace));
 
     // Route the destination
-    lg(Debug) << "connectBridgedSessionsWithDestination(): Routing destination " << mDestination;
+    lg(Debug) << BOOST_CURRENT_FUNCTION << ": Routing destination " << mDestination;
 
     mStateMachine.setNextState(ConnectBridgedSessionsWithDestinationOp::STATE_WAIT_LOOKUP_RESULTS);
 
     // Lookup the destination. This will use AMI, and the callback should 
     // schedule us to execute again. 
-    lg(Debug) << "routeSession(): Routing destination " << mDestination;
     lookupEndpoints(mDestination, mIceCurrent);
 }
 
@@ -433,14 +434,14 @@ void ConnectBridgedSessionsWithDestinationOperation::establishBridgeState()
 
     if (mListenerManager->getListener()->getNumSessions() < 2)
     {
-        lg(Error) << "connectBridgedSessionsWithDestination(): Unable to create a new session for destination " << mDestination << " in connectBridgedSessionsWithDestination(). " ;
+        lg(Error) << BOOST_CURRENT_FUNCTION << ": Unable to create a new session for destination " << mDestination ;
         finishWithException(SessionCreationException(mDestination));
         return;
     }
 
     if (mListenerManager->getListener()->isTerminated())
     {
-        lg(Notice) << "connectBridgedSessionsWithDestination(): Source ended session before transfer in connectBridgedSessionsWithDestination(). " ;
+        lg(Notice) << BOOST_CURRENT_FUNCTION << ": Source ended session before transfer. " ;
         finishWithException( SourceTerminatedPreBridgingException(mRemainingSessions[0]->getEndpoint()->getId()));
         return;
     }
@@ -452,17 +453,17 @@ void ConnectBridgedSessionsWithDestinationOperation::establishBridgeState()
     // Modify the bridge
     try
     {
-        lg(Debug) << "connectBridgedSessionsWithDestination(): Replacing session with newly routed destination " << mDestination;
+        lg(Debug) << BOOST_CURRENT_FUNCTION << ": Replacing session with newly routed destination " << mDestination;
         mBridge->replaceSession(mSessionToReplace, newSessions);
     }
     catch (const Ice::Exception &e)
     {
-        lg(Error) << "connectBridgedSessionsWithDestination(): Exception replacing the session in connectBridgedSessionsWithDestination. " << e.what() ;
+        lg(Error) << BOOST_CURRENT_FUNCTION << ": Exception replacing the session. " << e.what() ;
         finishWithException(BridgingException(mRemainingSessions[0]->getEndpoint()->getId(), mDestination));
         return;
     }
 
-    lg(Debug) << "connectBridgedSessionsWithDestination(): Forwarding start() to new session.";
+    lg(Debug) << BOOST_CURRENT_FUNCTION << ": Forwarding start() to new session.";
 
     try
     {
@@ -470,7 +471,7 @@ void ConnectBridgedSessionsWithDestinationOperation::establishBridgeState()
     }
     catch (const Ice::Exception &e)
     {
-        lg(Debug) << "routeSession(): Exception forwarding start: " << e.what();
+        lg(Error) << BOOST_CURRENT_FUNCTION << ": Exception forwarding start: " << e.what();
 
         finishWithException(e);
         return;
diff --git a/src/ConnectBridgedSessionsWithDestinationOperation.h b/src/ConnectBridgedSessionsWithDestinationOperation.h
index dd38cd8..8e00ece 100644
--- a/src/ConnectBridgedSessionsWithDestinationOperation.h
+++ b/src/ConnectBridgedSessionsWithDestinationOperation.h
@@ -68,6 +68,7 @@ public:
      * Factory method for the class. This method creates an active operation. 
      */
     static ConnectBridgedSessionsWithDestinationOperationPtr create(const AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr& cb,
+                                                                    const std::string& operationId,
                                                                     const AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
                                                                     const std::string& destination, 
                                                                     const ::Ice::Current& current,
@@ -101,12 +102,12 @@ public:
 
 protected:
     ConnectBridgedSessionsWithDestinationOperation(const AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr& cb,
+                        const std::string& operationId,
                         const AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
                         const std::string& destination, 
                         const ::Ice::Current& current,
                         const SessionContextPtr& context,
-                        OperationsManager* const listener,
-                        std::string transactionId);
+                        OperationsManager* const listener);
 
     // Constructor to service replicas.
     ConnectBridgedSessionsWithDestinationOperation(const SessionContextPtr& context);
diff --git a/src/EndpointRegistry.cpp b/src/EndpointRegistry.cpp
index f5e52d9..5c96a51 100644
--- a/src/EndpointRegistry.cpp
+++ b/src/EndpointRegistry.cpp
@@ -443,7 +443,7 @@ void EndpointRegistry::addEndpointLocator(const std::string& locatorId, const Re
 {
     try
     {
-        lg(Debug) << "EndpointRegistry::addEndpointLocator() adding locator for " << locatorId << ". Proxy details: " << locator->ice_toString() << std::endl;
+        lg(Debug) << "EndpointRegistry::addEndpointLocator() adding locator for " << locatorId << ". Proxy details: " << locator->ice_toString();
 
         EndpointLocatorMapIterator existing;
         bool exists = mImpl->locatorExists( locatorId, existing);
diff --git a/src/OperationReplicaCache.h b/src/OperationReplicaCache.h
index 5638006..1ab6f6e 100644
--- a/src/OperationReplicaCache.h
+++ b/src/OperationReplicaCache.h
@@ -76,14 +76,14 @@ public:
         boost::unique_lock<boost::shared_mutex> lock(mLock);
 
         // See if this transaction is in the cache.
-        OpMapType::iterator i = mReplicas.find(item->transactionId);
+        OpMapType::iterator i = mReplicas.find(item->operationId);
         if (i ==  mReplicas.end())
         {
             // Add an entry to the cache.
             OperationReplicaItem< boost::shared_ptr<O> > replica;
-            mReplicas[item->transactionId] = replica;
+            mReplicas[item->operationId] = replica;
 
-            i = mReplicas.find(item->transactionId);
+            i = mReplicas.find(item->operationId);
         }
 
         // Add this item to the replica's collection of state items.
diff --git a/src/RouteSessionOperation.cpp b/src/RouteSessionOperation.cpp
index 2a563b0..bb2a405 100644
--- a/src/RouteSessionOperation.cpp
+++ b/src/RouteSessionOperation.cpp
@@ -39,16 +39,18 @@ namespace BasicRoutingService
 {
 
 /**
- * This listener monitors the progress of an operation, and pushes relevant state to the replicator. 
+ * This listener monitors the progress of an operation, 
+ * and pushes relevant state to the replicator. 
  */
-class RouteSessionReplicatingListener : public SimpleStateMachine<RouteSessionOp::OperationState>::StateMachineListener
+class RouteSessionReplicatingListener : 
+      public SimpleStateMachine<RouteSessionOp::OperationState>::StateMachineListener
 {
 public:
     RouteSessionReplicatingListener(RouteSessionOperationPtr op, 
                                     const ReplicationContextPtr& replicationContext)  
                                        : mOperation(op), 
                                          mReplicationContext(replicationContext), 
-                                         mTransactionId(op->getTransactionId())
+                                         mTransactionId(op->getOperationId())
     {
     }
 
@@ -67,21 +69,18 @@ public:
             return;
         }
 
-        switch(state)
+        if (state == RouteSessionOp::STATE_LOOKUP)
         {
-        case RouteSessionOp::STATE_LOOKUP:
-            {
             // This is the initial state. All the state of interest is what's been passed in.
             // Push this information to the state replicator.
             RouteSessionOpStartPtr routeSessionOpStart(new RouteSessionOpStart());
-            routeSessionOpStart->transactionId =  mOperation->getTransactionId();
-            routeSessionOpStart->key = mOperation->getTransactionId() + AsteriskSCF::BasicRoutingService::V1::RouteSessionOpStartKeyMod;
+            routeSessionOpStart->operationId =  mOperation->getOperationId();
+            routeSessionOpStart->key = mOperation->getOperationId() + 
+                  AsteriskSCF::BasicRoutingService::V1::RouteSessionOpStartKeyMod;
             routeSessionOpStart->source = mOperation->getSource();
             routeSessionOpStart->destination = mOperation->getDestination();
 
             pushState(routeSessionOpStart);
-            }
-            break;
         }
     }
 
@@ -112,8 +111,9 @@ public:
             {
             // We've obtained a result from our AMI lookup request.
             RouteSessionOpWaitLookupStatePtr routeSessionOpWaitLookup(new RouteSessionOpWaitLookupState());
-            routeSessionOpWaitLookup->transactionId =  mOperation->getTransactionId();
-            routeSessionOpWaitLookup->key = mOperation->getTransactionId() + AsteriskSCF::BasicRoutingService::V1::RouteSessionOpWaitLookupKeyMod;
+            routeSessionOpWaitLookup->operationId =  mOperation->getOperationId();
+            routeSessionOpWaitLookup->key = mOperation->getOperationId() + 
+                 AsteriskSCF::BasicRoutingService::V1::RouteSessionOpWaitLookupKeyMod;
             routeSessionOpWaitLookup->endpoints = mOperation->getLookupResult();
 
             pushState(routeSessionOpWaitLookup);
@@ -125,8 +125,9 @@ public:
             // We just completed the bridge creation.
             // Push this information to the state replicator.
             RouteSessionOpBridgingStatePtr routeSessionOpBridging(new RouteSessionOpBridgingState());
-            routeSessionOpBridging->transactionId =  mOperation->getTransactionId();
-            routeSessionOpBridging->key = mOperation->getTransactionId() + AsteriskSCF::BasicRoutingService::V1::RouteSessionOpBridgingKeyMod;
+            routeSessionOpBridging->operationId =  mOperation->getOperationId();
+            routeSessionOpBridging->key = mOperation->getOperationId() + 
+                 AsteriskSCF::BasicRoutingService::V1::RouteSessionOpBridgingKeyMod;
             routeSessionOpBridging->bridge = mOperation->getBridge();
 
             pushState(routeSessionOpBridging);
@@ -164,7 +165,8 @@ public:
     /**
      * This callback is called when a state transition is occuring. 
      */
-    void stateTransition(RouteSessionOp::OperationState oldState, RouteSessionOp::OperationState newState)
+    void stateTransition(RouteSessionOp::OperationState oldState, 
+                         RouteSessionOp::OperationState newState)
     {
     }
 
@@ -180,10 +182,14 @@ private:
  */
 void RouteSessionOperation::initStateMachine()
 {
-    mStateMachine.addState(RouteSessionOp::STATE_LOOKUP, boost::bind(&RouteSessionOperation::lookupState, this));
-    mStateMachine.addState(RouteSessionOp::STATE_WAIT_LOOKUP_RESULTS, boost::bind(&RouteSessionOperation::waitOnLookupState, this));
-    mStateMachine.addState(RouteSessionOp::STATE_BRIDGING, boost::bind(&RouteSessionOperation::establishBridgeState, this));
-    mStateMachine.addState(RouteSessionOp::STATE_SEND_RESPONSE, boost::bind(&RouteSessionOperation::sendResponseState, this));
+    mStateMachine.addState(RouteSessionOp::STATE_LOOKUP, 
+                           boost::bind(&RouteSessionOperation::lookupState, this));
+    mStateMachine.addState(RouteSessionOp::STATE_WAIT_LOOKUP_RESULTS, 
+                           boost::bind(&RouteSessionOperation::waitOnLookupState, this));
+    mStateMachine.addState(RouteSessionOp::STATE_BRIDGING, 
+                           boost::bind(&RouteSessionOperation::establishBridgeState, this));
+    mStateMachine.addState(RouteSessionOp::STATE_SEND_RESPONSE, 
+                           boost::bind(&RouteSessionOperation::sendResponseState, this));
 }
 
 /**
@@ -194,20 +200,21 @@ void RouteSessionOperation::initStateMachine()
  * it can be enqueued to a worker thread. 
  */
 RouteSessionOperation::RouteSessionOperation(const AMD_SessionRouter_routeSessionPtr& cb,
-                                                const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& source, 
-                                                const ::std::string& destination, 
-                                                const ::Ice::Current& current,
-                                                const SessionContextPtr& context,
-                                                OperationsManager*  listener,
-                                                std::string transactionId) 
-                : SessionRouterOperation<AMD_SessionRouter_routeSessionPtr, RouteSessionOp::OperationState>(cb, 
-                                                                                                            context, 
-                                                                                                            current,
-                                                                                                            listener,
-                                                                                                            RouteSessionOp::STATE_LOOKUP,
-                                                                                                            transactionId),
-                mSource(source),
-                mDestination(destination)
+                                             const std::string& operationId,
+                                             const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& source, 
+                                             const ::std::string& destination, 
+                                             const ::Ice::Current& current,
+                                             const SessionContextPtr& context,
+                                             OperationsManager*  listener) 
+        : SessionRouterOperation<AMD_SessionRouter_routeSessionPtr, 
+                                  RouteSessionOp::OperationState> (cb, 
+                                                                 context, 
+                                                                 current,
+                                                                 listener,
+                                                                 RouteSessionOp::STATE_LOOKUP,
+                                                                 operationId),
+           mSource(source),
+           mDestination(destination)
 {
     initStateMachine();
 }
@@ -216,30 +223,25 @@ RouteSessionOperation::RouteSessionOperation(const AMD_SessionRouter_routeSessio
  * This is the factory method for RouteSessionOperation.
  */
 RouteSessionOperationPtr RouteSessionOperation::create(const AMD_SessionRouter_routeSessionPtr& cb,
+                              const std::string& operationId,
                               const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& source, 
                               const ::std::string& destination, 
                               const ::Ice::Current& current,
                               const SessionContextPtr& context,
                               OperationsManager* const listener) 
 {
-    Ice::Context::const_iterator it = current.ctx.find(::AsteriskSCF::SessionCommunications::V1::TransactionKey);
-    if (it == current.ctx.end())
-    {
-         lg(Error) << "RouteSessionOperation() called with no transaction ID set in context. Unable to replicate operation.";
-         throw InvalidParamsException();
-    }
-    std::string transactionId = (it->second);
 
     RouteSessionOperationPtr op (new RouteSessionOperation(cb,
+                                                           operationId,
                                                             source,
                                                             destination,
                                                             current,
                                                             context,
-                                                            listener,
-                                                            transactionId));
+                                                            listener));
 
     // Create a listener for pushing replication data. 
-    boost::shared_ptr<SimpleStateMachine<RouteSessionOp::OperationState>::StateMachineListener> replicatingListener(new RouteSessionReplicatingListener(op, context->replicationContext));
+    boost::shared_ptr<SimpleStateMachine<RouteSessionOp::OperationState>::StateMachineListener> 
+         replicatingListener(new RouteSessionReplicatingListener(op, context->replicationContext));
     op->addStateMachineListener(replicatingListener);
 
     return op;
@@ -249,7 +251,8 @@ RouteSessionOperationPtr RouteSessionOperation::create(const AMD_SessionRouter_r
  * Alternate constructor for replicas. 
  */
 RouteSessionOperation::RouteSessionOperation(const SessionContextPtr& sessionContext) 
-                : SessionRouterOperation<AMD_SessionRouter_routeSessionPtr, RouteSessionOp::OperationState>(sessionContext, RouteSessionOp::STATE_LOOKUP)
+                : SessionRouterOperation<AMD_SessionRouter_routeSessionPtr, 
+                  RouteSessionOp::OperationState>(sessionContext, RouteSessionOp::STATE_LOOKUP)
 {
     initStateMachine();
 }
@@ -288,7 +291,7 @@ void RouteSessionOperation::reflectUpdate(AsteriskSCF::BasicRoutingService::V1::
 {
     mSource = item->source;
     mDestination = item->destination;
-    mTransactionId = item->transactionId;
+    mOperationId = item->operationId;
 
     mReplicatedStates.push_back(RouteSessionOp::STATE_LOOKUP);
 }
@@ -314,7 +317,9 @@ void RouteSessionOperation::reflectUpdate(AsteriskSCF::BasicRoutingService::V1::
  */
 bool RouteSessionOperation::fastForwardReplica()
 {
-    std::vector<RouteSessionOp::OperationState>::iterator i = find(mReplicatedStates.begin(), mReplicatedStates.end(), RouteSessionOp::STATE_LOOKUP);
+    std::vector<RouteSessionOp::OperationState>::iterator i = find(mReplicatedStates.begin(), 
+                                                                   mReplicatedStates.end(), 
+                                                                   RouteSessionOp::STATE_LOOKUP);
 
     // If we didn't receive the initial call params, this replica is of no use. 
     if (i == mReplicatedStates.end())
@@ -356,7 +361,7 @@ RouteSessionOperation::~RouteSessionOperation()
  */
 void RouteSessionOperation::lookupState()
 {
-    lg(Debug) << "routeSession() entered with destination " << mDestination ;
+    lg(Debug) <<  BOOST_CURRENT_FUNCTION << ": entered with destination " << mDestination ;
 
     if (!mSessionContext->bridgeManager.initializeOnce())
     {
@@ -378,7 +383,7 @@ void RouteSessionOperation::lookupState()
 
     // Lookup the destination. This will use AMI, and the callback will 
     // schedule us to execute again. 
-    lg(Debug) << "routeSession(): Routing destination " << mDestination;
+    lg(Debug) <<  BOOST_CURRENT_FUNCTION << ": Routing destination " << mDestination;
     lookupEndpoints(mDestination, mIceCurrent);
 }
 
@@ -414,7 +419,8 @@ void RouteSessionOperation::establishBridgeState()
         return;
     }
 
-    assert(mLookupResult.size() > 0); // This exception should have been handled in EndpointRegistry if lookup failed. 
+    assert(mLookupResult.size() > 0); // This exception should have been handled in EndpointRegistry. 
+
     if (mLookupResult.size() < 1)
     {
         finishWithException(DestinationNotFoundException(mDestination));
@@ -450,19 +456,19 @@ void RouteSessionOperation::establishBridgeState()
         bridgedSessions.reserve(bridgedSessions.size() + newSessions.size());
         bridgedSessions.insert(bridgedSessions.end(), newSessions.begin(), newSessions.end());
 
-        lg(Debug) << "routeSession(): Creating bridge.";
+        lg(Debug) <<  BOOST_CURRENT_FUNCTION << ": Creating bridge.";
         bridge = mSessionContext->bridgeManager->createBridge(bridgedSessions, 0);
     }
     catch (const Ice::Exception &e)
     {
-        lg(Debug) << "routeSession(): Exception creating bridge: " << e.what();
+        lg(Error) <<  BOOST_CURRENT_FUNCTION << ": Exception creating bridge: " << e.what();
 
         finishWithException(BridgingException(mSource->getEndpoint()->getId(), mDestination));
         return;
     }
 
     // Forward the start to all the destinations routed to.
-    lg(Debug) << "routeSession(): Sending start() to newly routed destination.";
+    lg(Debug) <<  BOOST_CURRENT_FUNCTION << ": Sending start() to newly routed destination.";
 
     try
     {
@@ -470,7 +476,7 @@ void RouteSessionOperation::establishBridgeState()
     }
     catch (const Ice::Exception &e)
     {
-        lg(Debug) << "routeSession(): Exception forwarding start: " << e.what();
+        lg(Error) << BOOST_CURRENT_FUNCTION << ": Exception forwarding start: " << e.what();
 
         finishWithException(e);
         return;
diff --git a/src/RouteSessionOperation.h b/src/RouteSessionOperation.h
index 48b5f64..2f8059c 100644
--- a/src/RouteSessionOperation.h
+++ b/src/RouteSessionOperation.h
@@ -66,6 +66,7 @@ public:
      * Factory method for the class. This method creates an active routing operation. 
      */
     static RouteSessionOperationPtr create(const AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_routeSessionPtr& cb,
+                                           const std::string& operationId,
                                            const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& source, 
                                            const ::std::string& destination, 
                                            const ::Ice::Current& current,
@@ -99,12 +100,12 @@ public:
 protected:
     // Normal constructor
     RouteSessionOperation(const AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_routeSessionPtr& cb,
+                          const std::string& operationId,                          
                           const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& source, 
                           const ::std::string& destination, 
                           const ::Ice::Current& current,
                           const SessionContextPtr& context,
-                          OperationsManager* const listener,
-                          std::string transactionId);
+                          OperationsManager* const listener);
 
    // Constructor for replicas.
    RouteSessionOperation(const SessionContextPtr& context);
diff --git a/src/RoutingStateReplicatorListener.cpp b/src/RoutingStateReplicatorListener.cpp
index f0d9e32..a1c5d64 100644
--- a/src/RoutingStateReplicatorListener.cpp
+++ b/src/RoutingStateReplicatorListener.cpp
@@ -66,7 +66,7 @@ public:
             void visitRouteSessionOpStart(const ::AsteriskSCF::BasicRoutingService::V1::RouteSessionOpStartPtr& opState)
             {
                 // The operation cache keeps all the collected state for an operation under the transaction id. 
-                mImpl->mOperationReplicaCache->getRouteSessionCache()->dropOperation(opState->transactionId);
+                mImpl->mOperationReplicaCache->getRouteSessionCache()->dropOperation(opState->operationId);
             }
 
             void visitRouteSessionOpWaitLookupState(const ::AsteriskSCF::BasicRoutingService::V1::RouteSessionOpWaitLookupStatePtr& opState)
@@ -81,7 +81,7 @@ public:
 
             void visitConnectBridgedSessionsWithDestinationOpStart(const ::AsteriskSCF::BasicRoutingService::V1::ConnectBridgedSessionsWithDestinationOpStartPtr& opState)
             {
-                mImpl->mOperationReplicaCache->getConnectBridgedSessionsWithDestCache()->dropOperation(opState->transactionId);
+                mImpl->mOperationReplicaCache->getConnectBridgedSessionsWithDestCache()->dropOperation(opState->operationId);
             }
 
             void visitConnectBridgedSessionsWithDestinationOpWaitLookupState(const ::AsteriskSCF::BasicRoutingService::V1::ConnectBridgedSessionsWithDestinationOpWaitLookupStatePtr& opState)
diff --git a/src/SessionListener.cpp b/src/SessionListener.cpp
index 484c766..2829c1b 100644
--- a/src/SessionListener.cpp
+++ b/src/SessionListener.cpp
@@ -161,7 +161,7 @@ void SessionListenerImpl::setProxy(const SessionListenerPrx& prx)
 /** 
  * Constructor for SessionListenerManager.
  */
-SessionListenerManager::SessionListenerManager(Ice::ObjectAdapterPtr adapter, const SessionPrx& session)
+SessionListenerManager::SessionListenerManager(const Ice::ObjectAdapterPtr& adapter, const SessionPrx& session)
     : mSessionListener(new SessionListenerImpl()),
       mAdapter(adapter)
 {
@@ -189,7 +189,7 @@ SessionListenerManager::SessionListenerManager(Ice::ObjectAdapterPtr adapter, co
 /** 
  * Constructor for SessionListenerManager.
  */
-SessionListenerManager::SessionListenerManager(Ice::ObjectAdapterPtr adapter, const SessionSeq& sessionSequence)
+SessionListenerManager::SessionListenerManager(const Ice::ObjectAdapterPtr& adapter, const SessionSeq& sessionSequence)
     : mSessionListener(new SessionListenerImpl()),
       mAdapter(adapter)
 {
diff --git a/src/SessionListener.h b/src/SessionListener.h
index 72e118b..ad06259 100644
--- a/src/SessionListener.h
+++ b/src/SessionListener.h
@@ -100,8 +100,8 @@ typedef IceInternal::Handle<SessionListenerImpl> SessionListenerImplPtr;
 class SessionListenerManager
 {
 public:
-    SessionListenerManager(Ice::ObjectAdapterPtr adapter, const AsteriskSCF::SessionCommunications::V1::SessionPrx& session);
-    SessionListenerManager(Ice::ObjectAdapterPtr adapter, const AsteriskSCF::SessionCommunications::V1::SessionSeq& sessionSequence);
+    SessionListenerManager(const Ice::ObjectAdapterPtr& adapter, const AsteriskSCF::SessionCommunications::V1::SessionPrx& session);
+    SessionListenerManager(const Ice::ObjectAdapterPtr& adapter, const AsteriskSCF::SessionCommunications::V1::SessionSeq& sessionSequence);
 
     ~SessionListenerManager();
     SessionListenerImpl* getListener() const;
diff --git a/src/SessionRouter.cpp b/src/SessionRouter.cpp
index 0f2b0a1..dbcb77d 100644
--- a/src/SessionRouter.cpp
+++ b/src/SessionRouter.cpp
@@ -155,34 +155,18 @@ SessionRouter::~SessionRouter()
     mImpl.reset();
 }
 
-std::string getTransactionId(const ::Ice::Current& current)
-{
-    Ice::Context::const_iterator it = current.ctx.find(::AsteriskSCF::SessionCommunications::V1::TransactionKey);
-    std::string transactionId;
-    if (it == current.ctx.end())
-    {
-         lg(Error) << "routeSession_async() called with no transaction ID set in context. ";
-    }
-    else
-    {
-        transactionId = (it->second);
-    }
-    return transactionId;
-}
-
 /**
  * Route the session by looking up the destination endpoint and configuring a complimentary session for the destination.
  */
 void SessionRouter::routeSession_async(const ::AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_routeSessionPtr& cb,
+                                       const ::std::string& operationId, 
                                        const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& source, 
                                        const ::std::string& destination, 
                                        const ::Ice::Current& current)
 {
-    std::string transactionId = getTransactionId(current);
-    
     // Check the cache for a replica with this transaction Id.
     RouteSessionOperationPtr routeSessionOp;
-    if (mImpl->mOperationReplicaCache->getRouteSessionCache()->fetchOperation(transactionId, routeSessionOp))
+    if (mImpl->mOperationReplicaCache->getRouteSessionCache()->fetchOperation(operationId, routeSessionOp))
     {
         routeSessionOp->rehostReplica(cb, current, mImpl.get());
         WorkPtr replicaOp(routeSessionOp);
@@ -192,6 +176,7 @@ void SessionRouter::routeSession_async(const ::AsteriskSCF::SessionCommunication
     }
 
     WorkPtr op(RouteSessionOperation::create(cb, 
+                                             operationId,
                                              source, 
                                              destination, 
                                              current, 
@@ -208,15 +193,14 @@ void SessionRouter::routeSession_async(const ::AsteriskSCF::SessionCommunication
  *   @param destination The address or id of the destination to be routed.
  */
 void SessionRouter::connectBridgedSessionsWithDestination_async(const ::AsteriskSCF::SessionCommunications::V1::AMD_SessionRouter_connectBridgedSessionsWithDestinationPtr& cb, 
+                                                                const ::std::string& operationId, 
                                                                 const ::AsteriskSCF::SessionCommunications::V1::SessionPrx& sessionToReplace, 
                                                                 const ::std::string& destination, 
                                                                 const ::Ice::Current& current)
 {
-    std::string transactionId = getTransactionId(current);
-
     // Check the cache for a replica with this transaction Id.
     ConnectBridgedSessionsWithDestinationOperationPtr connectBridgedSessionsWithDestOp;
-    if (mImpl->mOperationReplicaCache->getConnectBridgedSessionsWithDestCache()->fetchOperation(transactionId, connectBridgedSessionsWithDestOp))
+    if (mImpl->mOperationReplicaCache->getConnectBridgedSessionsWithDestCache()->fetchOperation(operationId, connectBridgedSessionsWithDestOp))
     {
         connectBridgedSessionsWithDestOp->rehostReplica(cb, current, mImpl.get());
         WorkPtr replicaOp(connectBridgedSessionsWithDestOp);
@@ -225,12 +209,13 @@ void SessionRouter::connectBridgedSessionsWithDestination_async(const ::Asterisk
          return;
     }
 
-    WorkPtr op( ConnectBridgedSessionsWithDestinationOperation::create(cb, 
-                                                                        sessionToReplace, 
-                                                                        destination, 
-                                                                        current, 
... 17612 lines suppressed ...


-- 
asterisk-scf/integration/routing.git



More information about the asterisk-scf-commits mailing list