[asterisk-scf-commits] asterisk-scf/integration/bridging.git branch "partyidhook" updated.
Commits to the Asterisk SCF project code repositories
asterisk-scf-commits at lists.digium.com
Fri Sep 23 10:12:14 CDT 2011
branch "partyidhook" has been updated
via c1d5c46d73b672cce88591a8b6920926eb27c4f6 (commit)
from 343318d7cfa8902a4f85857dfce97eaf451ab39d (commit)
Summary of changes:
.../BridgeService/BridgeReplicatorIf.ice | 20 +++++-
src/BridgeImpl.cpp | 36 ++++-----
src/BridgeImpl.h | 4 +-
src/BridgeManagerImpl.cpp | 6 +-
src/BridgePartyIdExtensionPoint.cpp | 81 ++++++++------------
src/BridgePartyIdExtensionPoint.h | 45 ++---------
src/BridgeReplicatorStateListenerI.cpp | 2 +-
7 files changed, 82 insertions(+), 112 deletions(-)
- Log -----------------------------------------------------------------
commit c1d5c46d73b672cce88591a8b6920926eb27c4f6
Author: Ken Hunt <ken.hunt at digium.com>
Date: Fri Sep 23 10:09:22 2011 -0500
Added support for replication. I removed a class that I was using previously to store a snapshot of the current hooks on bridges and now use one defined in slice. This made it relatively straightforward to add to both the BridgeManager StateItem and the Bridge StateItem so it was relatively simple to add to replication.
diff --git a/slice/AsteriskSCF/Replication/BridgeService/BridgeReplicatorIf.ice b/slice/AsteriskSCF/Replication/BridgeService/BridgeReplicatorIf.ice
index fb0b7ec..4883dd8 100644
--- a/slice/AsteriskSCF/Replication/BridgeService/BridgeReplicatorIf.ice
+++ b/slice/AsteriskSCF/Replication/BridgeService/BridgeReplicatorIf.ice
@@ -17,6 +17,7 @@
#include <Ice/BuiltinSequences.ice>
#include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.ice>
+#include <AsteriskSCF/SessionCommunications/SessionCommunicationsExtensionPointsIf.ice>
#include <AsteriskSCF/Core/Discovery/ServiceLocatorIf.ice>
#include <AsteriskSCF/Media/MediaIf.ice>
@@ -164,7 +165,17 @@ enum ServiceState
};
sequence<AsteriskSCF::SessionCommunications::V1::BridgeManagerListener*> BridgeManagerListenerSeq;
sequence<AsteriskSCF::SessionCommunications::V1::BridgeListener*> BridgeListenerSeq;
-
+
+/**
+ * Collection of party id hooks.
+ */
+class PartyIdHooks
+{
+ AsteriskSCF::SessionCommunications::ExtensionPoints::V1::ReceivedConnectedLinePartyIdHookSeq receivedConnectedLineHooks;
+ AsteriskSCF::SessionCommunications::ExtensionPoints::V1::ForwardingConnectedLinePartyIdHookSeq forwardingConnectedLineHooks;
+ AsteriskSCF::SessionCommunications::ExtensionPoints::V1::ForwardingRedirectingPartyIdHookSeq forwardingRedirectingHooks;
+};
+
/**
* The bridge manager state.
**/
@@ -173,6 +184,7 @@ class BridgeManagerStateItem extends ReplicatedStateItem
ServiceState runningState;
BridgeListenerSeq defaultBridgeListeners;
BridgeManagerListenerSeq listeners;
+ PartyIdHooks partyIdExtensionPointHooks;
};
/**
@@ -195,6 +207,12 @@ class BridgeStateItem extends ReplicatedStateItem
MediaOperationReplicationPolicy mediaReplicationPolicy;
AsteriskSCF::SessionCommunications::V1::BridgeCookieDict cookies;
+
+ /**
+ * Since the hooks can change over time, each bridge gets
+ * its own snapshot of applicable hooks.
+ */
+ PartyIdHooks partyIdHookSet;
};
class BridgeListenerStateItem extends ReplicatedStateItem
diff --git a/src/BridgeImpl.cpp b/src/BridgeImpl.cpp
index 427729b..7d00dc2 100755
--- a/src/BridgeImpl.cpp
+++ b/src/BridgeImpl.cpp
@@ -70,7 +70,6 @@ public:
BridgeImpl(const string& name, const Ice::ObjectAdapterPtr& objAdapter,
const vector<BridgeListenerPrx>& listeners,
const BridgeListenerMgrPtr& listenerMgr,
- const BridgePartyIdHooksPtr& partyIdHooks,
const ReplicatorSmartPrx& replicator,
const BridgeStateItemPtr& state,
const Logger& logger);
@@ -118,9 +117,9 @@ public:
void getAddSessionsTasks(QueuedTasks& tasks, const SessionSeq& sessions);
- BridgePartyIdHooksPtr getPartyIdHooks()
+ PartyIdHooksPtr getPartyIdHooks()
{
- return mPartyIdHooks;
+ return mState->partyIdHookSet;
}
BridgeCookies getCookies()
@@ -159,7 +158,6 @@ private:
Ice::ObjectAdapterPtr mObjAdapter;
BridgeListenerMgrPtr mListeners;
- BridgePartyIdHooksPtr mPartyIdHooks;
ReplicatorSmartPrx mReplicator;
//
@@ -302,8 +300,6 @@ protected:
{
mLogger(Debug) << FUNLOG;
- BridgePartyIdHooksPtr partyIdHooks = mBridge->getPartyIdHooks();
-
// Forward the ConnectedLine to each bridged session.
SessionSeq sessions = mBridge->getSessions()->getSessionSeq();
for(SessionSeq::iterator i = sessions.begin();
@@ -336,11 +332,11 @@ protected:
RedirectingPtr currentRedirecting = redirecting;
RedirectingPtr destSpecificRedirecting = redirecting;
- BridgePartyIdHooksPtr partyIdHooks = mBridge->getPartyIdHooks();
+ PartyIdHooksPtr partyIdHooks = mBridge->getPartyIdHooks();
// Allow the ForwardingRedirectingPartyId hooks to alter the Redirecting record.
- for(vector<ForwardingRedirectingPartyIdHookPrx>::const_iterator i = partyIdHooks->getForwardingRedirectingPartyIdHooks().begin();
- i != partyIdHooks->getForwardingRedirectingPartyIdHooks().end(); ++i)
+ for(vector<ForwardingRedirectingPartyIdHookPrx>::const_iterator i = partyIdHooks->forwardingRedirectingHooks.begin();
+ i != partyIdHooks->forwardingRedirectingHooks.end(); ++i)
{
AsteriskSCF::System::Hook::V1::HookResult hookResult = (*i)->modifyForwardingRedirecting(mSourceSession->getSession(),
destinationSession->getSession(),
@@ -441,11 +437,11 @@ protected:
ConnectedLinePtr currentConnectedLine = connectedLine;
ConnectedLinePtr destSpecificConnectedLine = connectedLine;
- BridgePartyIdHooksPtr partyIdHooks = mBridge->getPartyIdHooks();
+ PartyIdHooksPtr partyIdHooks = mBridge->getPartyIdHooks();
// Allow the ForwardingConnectedLinePartyId hooks to alter the ConnectedLine record.
- for(vector<ForwardingConnectedLinePartyIdHookPrx>::const_iterator i = partyIdHooks->getForwardingConnectedLinePartyIdHooks().begin();
- i != partyIdHooks->getForwardingConnectedLinePartyIdHooks().end(); ++i)
+ for(vector<ForwardingConnectedLinePartyIdHookPrx>::const_iterator i = partyIdHooks->forwardingConnectedLineHooks.begin();
+ i != partyIdHooks->forwardingConnectedLineHooks.end(); ++i)
{
AsteriskSCF::System::Hook::V1::HookResult hookResult = (*i)->modifyForwardingConnectedLine(mSourceSession->getSession(),
destinationSession->getSession(),
@@ -501,11 +497,11 @@ protected:
ConnectedLinePtr currentConnectedLine = mConnectedLine;
ConnectedLinePtr updatedConnectedLine = mConnectedLine;
- BridgePartyIdHooksPtr partyIdHooks = mBridge->getPartyIdHooks();
+ PartyIdHooksPtr partyIdHooks = mBridge->getPartyIdHooks();
// Allow the ReceivedConnectedLinePartyId hooks to alter the ConnectedLine record.
- for(vector<ReceivedConnectedLinePartyIdHookPrx>::const_iterator i = partyIdHooks->getReceivedConnectedLinePartyIdHooks().begin();
- i != partyIdHooks->getReceivedConnectedLinePartyIdHooks().end(); ++i)
+ for(vector<ReceivedConnectedLinePartyIdHookPrx>::const_iterator i = partyIdHooks->receivedConnectedLineHooks.begin();
+ i != partyIdHooks->receivedConnectedLineHooks.end(); ++i)
{
AsteriskSCF::System::Hook::V1::HookResult hookResult = (*i)->modifyReceivedConnectedLine(mSourceSession->getSession(),
currentConnectedLine, updatedConnectedLine);
@@ -975,7 +971,6 @@ private:
BridgeImpl::BridgeImpl(const string& name, const Ice::ObjectAdapterPtr& adapter,
const vector<BridgeListenerPrx>& listeners,
const BridgeListenerMgrPtr& listenerMgr,
- const BridgePartyIdHooksPtr& partyIdHooks,
const ReplicatorSmartPrx& replicator,
const BridgeStateItemPtr& state,
const Logger& logger) :
@@ -985,7 +980,6 @@ BridgeImpl::BridgeImpl(const string& name, const Ice::ObjectAdapterPtr& adapter,
mName(name),
mObjAdapter(adapter),
mListeners(listenerMgr),
- mPartyIdHooks(partyIdHooks),
mReplicator(replicator),
mSessionListener(createSessionListener(mSessions, logger)),
mLogger(logger)
@@ -1629,26 +1623,26 @@ IceUtil::Handle<AsteriskSCF::BridgeService::BridgeServant>
AsteriskSCF::BridgeService::BridgeServant::create(const string& name, const Ice::ObjectAdapterPtr& objectAdapter,
const vector<BridgeListenerPrx>& listeners,
const AsteriskSCF::BridgeService::BridgeListenerMgrPtr& listenerMgr,
- const BridgePartyIdHooksPtr& partyIdHooks,
+ const AsteriskSCF::Replication::BridgeService::V1::PartyIdHooksPtr& partyIdHooks,
const ReplicatorSmartPrx& replicator,
const Logger& logger)
{
BridgeStateItemPtr state(new AsteriskSCF::Replication::BridgeService::V1::BridgeStateItem);
state->runningState = Running;
state->serial = SerialCounterStart;
+ state->partyIdHookSet = partyIdHooks;
//
// TODO: "replicate" is the only replication policy currently supported by the bridge service.
// In the future it may be possible for the bridge replica to reconstruct its media operations
// allowing localized resources to be used.
//
state->mediaReplicationPolicy = Replicate;
- return new BridgeImpl(name, objectAdapter, listeners, listenerMgr, partyIdHooks, replicator, state, logger);
+ return new BridgeImpl(name, objectAdapter, listeners, listenerMgr, replicator, state, logger);
}
IceUtil::Handle<AsteriskSCF::BridgeService::BridgeServant>
AsteriskSCF::BridgeService::BridgeServant::create(const Ice::ObjectAdapterPtr& objectAdapter,
const AsteriskSCF::BridgeService::BridgeListenerMgrPtr& listenerMgr,
- const BridgePartyIdHooksPtr& partyIdHooks,
const ReplicatorSmartPrx& replicator,
const Logger& logger,
const AsteriskSCF::Replication::BridgeService::V1::BridgeStateItemPtr& state)
@@ -1656,7 +1650,7 @@ AsteriskSCF::BridgeService::BridgeServant::create(const Ice::ObjectAdapterPtr& o
logger(Debug) << FUNLOG << ": creating replica for " << state->bridgeId;
IceUtil::Handle<AsteriskSCF::BridgeService::BridgeServant> bridge(
new BridgeImpl(state->bridgeId, objectAdapter, vector<BridgeListenerPrx>(),
- listenerMgr, partyIdHooks, replicator, state, logger));
+ listenerMgr, replicator, state, logger));
return bridge;
}
diff --git a/src/BridgeImpl.h b/src/BridgeImpl.h
index 7f29bb9..8e00dfe 100644
--- a/src/BridgeImpl.h
+++ b/src/BridgeImpl.h
@@ -16,6 +16,7 @@
#pragma once
#include <AsteriskSCF/SessionCommunications/SessionCommunicationsIf.h>
+#include <AsteriskSCF/Replication/BridgeService/BridgeReplicatorIf.h>
#include <boost/thread/shared_mutex.hpp>
#include <vector>
#include "BridgePartyIdExtensionPoint.h"
@@ -137,7 +138,7 @@ public:
const Ice::ObjectAdapterPtr& objectAdapter,
const std::vector<AsteriskSCF::SessionCommunications::V1::BridgeListenerPrx>& listeners,
const AsteriskSCF::BridgeService::BridgeListenerMgrPtr& listenerMgr,
- const AsteriskSCF::BridgeService::BridgePartyIdHooksPtr& partyIdHooks,
+ const AsteriskSCF::Replication::BridgeService::V1::PartyIdHooksPtr& partyIdHooks,
const ReplicatorSmartPrx& replicator,
const AsteriskSCF::System::Logging::Logger& logger);
@@ -148,7 +149,6 @@ public:
**/
static IceUtil::Handle<BridgeServant> create(const Ice::ObjectAdapterPtr& objectAdapter,
const AsteriskSCF::BridgeService::BridgeListenerMgrPtr& listenerMgr,
- const AsteriskSCF::BridgeService::BridgePartyIdHooksPtr& partyIdHooks,
const ReplicatorSmartPrx& replicator,
const AsteriskSCF::System::Logging::Logger& logger,
const AsteriskSCF::Replication::BridgeService::V1::BridgeStateItemPtr& state);
diff --git a/src/BridgeManagerImpl.cpp b/src/BridgeManagerImpl.cpp
index b596b99..4a9fcca 100644
--- a/src/BridgeManagerImpl.cpp
+++ b/src/BridgeManagerImpl.cpp
@@ -352,6 +352,7 @@ BridgeManagerStateItemPtr BridgeManagerImpl::getState()
//
BridgeManagerStateItemPtr result(new BridgeManagerStateItem(*mState));
result->listeners = mListeners->getListeners();
+ result->partyIdExtensionPointHooks = mPartyIdExtensionPoint->getHooks();
return result;
}
@@ -365,6 +366,8 @@ void BridgeManagerImpl::updateState(const BridgeManagerStateItemPtr& state)
// safer to take the added cost of the copy.
//
*mState = *state;
+
+ mPartyIdExtensionPoint->replaceHooks(state->partyIdExtensionPointHooks);
}
vector<BridgeServantPtr> BridgeManagerImpl::getBridges()
@@ -396,8 +399,9 @@ void BridgeManagerImpl::createBridgeReplica(const BridgeStateItemPtr& state)
BridgePrx prx(BridgePrx::uncheckedCast(mAdapter->createProxy(id)));
BridgeListenerMgrPtr mgr(new BridgeListenerMgr(mAdapter->getCommunicator(), state->bridgeId, prx));
+
BridgeServantPtr bridge = BridgeServant::create(mAdapter, mgr,
- mPartyIdExtensionPoint->getHooks(), mReplicationContext->getReplicator(), mLogger, state);
+ mReplicationContext->getReplicator(), mLogger, state);
Ice::ObjectPrx obj = mAdapter->add(bridge, id);
mLogger(Info) << ": creating bridge replica " << obj->ice_toString() << "." ;
diff --git a/src/BridgePartyIdExtensionPoint.cpp b/src/BridgePartyIdExtensionPoint.cpp
index 2d168b2..bdd64c9 100644
--- a/src/BridgePartyIdExtensionPoint.cpp
+++ b/src/BridgePartyIdExtensionPoint.cpp
@@ -26,54 +26,11 @@ using namespace AsteriskSCF::System::Logging;
using namespace AsteriskSCF::SessionCommunications::V1;
using namespace AsteriskSCF::SessionCommunications::ExtensionPoints::V1;
using namespace AsteriskSCF::BridgeService;
+using namespace AsteriskSCF::Replication::BridgeService::V1;
namespace
{
-class BridgePartyIdHooksImpl : public BridgePartyIdHooks
-{
-public:
- BridgePartyIdHooksImpl(const std::vector<ReceivedConnectedLinePartyIdHookPrx>& receiveConnectedLineHooks,
- const std::vector<ForwardingConnectedLinePartyIdHookPrx>& forwardingConnectedLineHooks,
- const std::vector<ForwardingRedirectingPartyIdHookPrx>& forwardingRedirectingHooks);
-
- const std::vector<ReceivedConnectedLinePartyIdHookPrx>& getReceivedConnectedLinePartyIdHooks();
- const std::vector<ForwardingConnectedLinePartyIdHookPrx>& getForwardingConnectedLinePartyIdHooks();
- const std::vector<ForwardingRedirectingPartyIdHookPrx>& getForwardingRedirectingPartyIdHooks();
-
-private:
- std::vector<ReceivedConnectedLinePartyIdHookPrx> mReceiveConnectedLineHooks;
- std::vector<ForwardingConnectedLinePartyIdHookPrx> mForwardingConnectedLineHooks;
- std::vector<ForwardingRedirectingPartyIdHookPrx> mForwardingRedirectingHooks;
-};
-
-BridgePartyIdHooksImpl::BridgePartyIdHooksImpl(const std::vector<ReceivedConnectedLinePartyIdHookPrx>& receiveConnectedLineHooks,
- const std::vector<ForwardingConnectedLinePartyIdHookPrx>& forwardingConnectedLineHooks,
- const std::vector<ForwardingRedirectingPartyIdHookPrx>& forwardingRedirectingHooks)
- : mReceiveConnectedLineHooks(receiveConnectedLineHooks),
- mForwardingConnectedLineHooks(forwardingConnectedLineHooks),
- mForwardingRedirectingHooks(forwardingRedirectingHooks)
-{
-}
-
-const std::vector<ReceivedConnectedLinePartyIdHookPrx>&
- BridgePartyIdHooksImpl::getReceivedConnectedLinePartyIdHooks()
-{
- return mReceiveConnectedLineHooks;
-}
-
-const std::vector<ForwardingConnectedLinePartyIdHookPrx>&
- BridgePartyIdHooksImpl::getForwardingConnectedLinePartyIdHooks()
-{
- return mForwardingConnectedLineHooks;
-}
-
-const std::vector<ForwardingRedirectingPartyIdHookPrx>&
- BridgePartyIdHooksImpl::getForwardingRedirectingPartyIdHooks()
-{
- return mForwardingRedirectingHooks;
-}
-
class BridgePartyIdExtensionPointImpl :
public AsteriskSCF::BridgeService::BridgePartyIdExtensionPoint
{
@@ -104,7 +61,8 @@ public:
void clearPartyIdentificationHooks(const Ice::Current& current);
- virtual BridgePartyIdHooksPtr getHooks();
+ virtual AsteriskSCF::Replication::BridgeService::V1::PartyIdHooksPtr getHooks();
+ virtual void replaceHooks(const AsteriskSCF::Replication::BridgeService::V1::PartyIdHooksPtr& hooks);
private:
AsteriskSCF::Collections::ProxySet<ReceivedConnectedLinePartyIdHookPrx>::SetPtr mReceiveConnectedLineHooks;
@@ -174,11 +132,36 @@ void BridgePartyIdExtensionPointImpl::clearPartyIdentificationHooks(const Ice::C
mForwardingRedirectingHooks->clear();
}
-BridgePartyIdHooksPtr BridgePartyIdExtensionPointImpl::getHooks()
+AsteriskSCF::Replication::BridgeService::V1::PartyIdHooksPtr BridgePartyIdExtensionPointImpl::getHooks()
{
- return new BridgePartyIdHooksImpl(mReceiveConnectedLineHooks->getAll(),
- mForwardingConnectedLineHooks->getAll(),
- mForwardingRedirectingHooks->getAll());
+ return new AsteriskSCF::Replication::BridgeService::V1::PartyIdHooks(
+ mReceiveConnectedLineHooks->getAll(),
+ mForwardingConnectedLineHooks->getAll(),
+ mForwardingRedirectingHooks->getAll());
+}
+
+void BridgePartyIdExtensionPointImpl::replaceHooks(const PartyIdHooksPtr& hooks)
+{
+ mReceiveConnectedLineHooks->clear();
+ for(ReceivedConnectedLinePartyIdHookSeq::iterator i = hooks->receivedConnectedLineHooks.begin();
+ i != hooks->receivedConnectedLineHooks.end(); ++i)
+ {
+ mReceiveConnectedLineHooks->add(*i);
+ }
+
+ mForwardingConnectedLineHooks->clear();
+ for(ForwardingConnectedLinePartyIdHookSeq::iterator i = hooks->forwardingConnectedLineHooks.begin();
+ i != hooks->forwardingConnectedLineHooks.end(); ++i)
+ {
+ mForwardingConnectedLineHooks->add(*i);
+ }
+
+ mForwardingRedirectingHooks->clear();
+ for(ForwardingRedirectingPartyIdHookSeq::iterator i = hooks->forwardingRedirectingHooks.begin();
+ i != hooks->forwardingRedirectingHooks.end(); ++i)
+ {
+ mForwardingRedirectingHooks->add(*i);
+ }
}
AsteriskSCF::BridgeService::BridgePartyIdExtensionPointPtr
diff --git a/src/BridgePartyIdExtensionPoint.h b/src/BridgePartyIdExtensionPoint.h
index 376e0a8..affe45f 100644
--- a/src/BridgePartyIdExtensionPoint.h
+++ b/src/BridgePartyIdExtensionPoint.h
@@ -17,46 +17,13 @@
#include <AsteriskSCF/SessionCommunications/SessionCommunicationsExtensionPointsIf.h>
#include <AsteriskSCF/logger.h>
+#include <AsteriskSCF/Replication/BridgeService/BridgeReplicatorIf.h>
namespace AsteriskSCF
{
namespace BridgeService
{
-/**
- * This class is used to hold a snapshot of the party id hooks
- * at the time of bridge creation. The hook proxies are internally thread safe.
- * We provide each bridge its own copy of the hooks to alleviate
- * contention for a lock that would be required if each bridge was
- * trying to fetch the hooks directly from the BridgePartyIdExtensionPoint (which
- * has the primary cache of party id hooks).
- */
-class BridgePartyIdHooks : public IceUtil::Shared
-{
-public:
- virtual ~BridgePartyIdHooks() {}
-
- /**
- * Get the received ConnectedLine party id hooks.
- */
- virtual const std::vector<AsteriskSCF::SessionCommunications::ExtensionPoints::V1::ReceivedConnectedLinePartyIdHookPrx>&
- getReceivedConnectedLinePartyIdHooks() = 0;
-
- /**
- * Get the forwarding ConnectedLine Party Id hooks.
- */
- virtual const std::vector<AsteriskSCF::SessionCommunications::ExtensionPoints::V1::ForwardingConnectedLinePartyIdHookPrx>&
- getForwardingConnectedLinePartyIdHooks() = 0;
-
- /**
- * Get the forwarding Redirecting Party Id hooks.
- */
- virtual const std::vector<AsteriskSCF::SessionCommunications::ExtensionPoints::V1::ForwardingRedirectingPartyIdHookPrx>&
- getForwardingRedirectingPartyIdHooks() = 0;
-};
-
-typedef IceUtil::Handle<BridgePartyIdHooks> BridgePartyIdHooksPtr;
-
/**
* This is our servant for the PartyIdentificationExtensionPoint. It caches the
* hooks that are added.
@@ -94,11 +61,15 @@ public:
// Implementation
/**
- * This method provides a BridgePartyIdHooks object
- * which contains a copy of the hooks as they exist
+ * Provides a PartyIdHooks object which contains a copy of the hooks as they exist
* at the time this operation is called.
*/
- virtual BridgePartyIdHooksPtr getHooks() = 0;
+ virtual AsteriskSCF::Replication::BridgeService::V1::PartyIdHooksPtr getHooks() = 0;
+
+ /**
+ * Replaces the set of hooks with the specified set.
+ */
+ virtual void replaceHooks(const AsteriskSCF::Replication::BridgeService::V1::PartyIdHooksPtr& hooks) = 0;
};
typedef IceUtil::Handle<BridgePartyIdExtensionPoint> BridgePartyIdExtensionPointPtr;
diff --git a/src/BridgeReplicatorStateListenerI.cpp b/src/BridgeReplicatorStateListenerI.cpp
index d260135..027012e 100644
--- a/src/BridgeReplicatorStateListenerI.cpp
+++ b/src/BridgeReplicatorStateListenerI.cpp
@@ -150,7 +150,7 @@ public:
if(managerItem->key == mManager->getID())
{
//
- // There is only on bridge per listener instance by design/implementation, so this
+ // There is only one bridge manager per listener instance by design/implementation, so this
// one is pretty easy.
//
mManager->updateState(managerItem);
-----------------------------------------------------------------------
--
asterisk-scf/integration/bridging.git
More information about the asterisk-scf-commits
mailing list