[asterisk-scf-commits] asterisk-scf/integration/sip.git branch "route_replica" updated.
Commits to the Asterisk SCF project code repositories
asterisk-scf-commits at lists.digium.com
Mon Apr 25 16:25:38 CDT 2011
branch "route_replica" has been updated
via f75f0e1e052168c7553f0eab93fe8398a363d8bf (commit)
via f77fb7c654bc02c677ccfc1cdcf986d4ed49726e (commit)
via 79407522c82b6c35e6f8fbb72d0e20c656d5c2e0 (commit)
via 985367c6b9d55b0064d654984ab763647d5bf16a (commit)
via 8fcd9dc04649857437183a335565f27071b20028 (commit)
via de1c49f45105d4a62b9572f8bf4efbf8c718933c (commit)
via 0791f44ddb97bced3ded5da19580ba16966e9f63 (commit)
via 2d535b3c8813521ba060c544c80baabc2b452f76 (commit)
via 4c8c74c547955dd93c9e15d2f5c188918517aeeb (commit)
via ca95f560a6c8ccf5b3ffd2bff26249b982ecedea (commit)
via 307e2b902ca3b1466aff00951914feb31bdedfec (commit)
via 0fafee70d034c4406eb11b37817b12a70b50304e (commit)
via 1f886e1225940e228bec9a983cf4a7b844e69cb4 (commit)
via 24244fa6392253ffe2ff6c60757435be1b26da20 (commit)
via 2b68a207e8b733c5d32f7f3baa63ab743a4a4f82 (commit)
via 872dc33703f403a63e896a8b778a1e43fa7bad09 (commit)
via 929982dac23f77950f2b7ff18ec85b51a42de558 (commit)
via 95c838e77ca99e63a13721981e2aa07867c4bea1 (commit)
via d7418a0d23a8a23431e859442c782501abfc0553 (commit)
via 7a25b8073e1e0d2bb2391a3feafb61b6bdacb380 (commit)
via 6ced932f19f094541afd5c7ef8b069ea83f26438 (commit)
via 238e6bb3ddcb4d697e3ac5189c73e0683132ad5e (commit)
via 04e2c162bc7f6cd6b9bceb74089d1a9a29148b59 (commit)
via 0c1ba29dc6631ac5ce38a3d2629fe17afcd39627 (commit)
via df6502431fb6d495c88eb9a223820f063432bd7e (commit)
via 6fa0d1a69f5290d1154951965017380dc4e61825 (commit)
via 06ba07d7d56ed8447eeb188eb4bb5770a9c41adc (commit)
via a2ce7d678f3574f6f63691dacead5e2574ded080 (commit)
via 413bb6369fb40c99a952305fa924dc087da7792c (commit)
via 626ae7f220d8b0ad44820a5110eeceb61248d032 (commit)
via ab478a5684fed6d71a1169104ff9067a240b1e81 (commit)
via dd6f1be516148b8f328adf3f174c43fe949a1b61 (commit)
via 0024d93bcf841b13eec471b2d3f726cdbe686978 (commit)
via db6b6404ec286000fcb921edfe080fc6c2cc1c9d (commit)
via 148efc74ad128c054300d461fb29ae8e31392bed (commit)
via 827fc662e122ea00689893d167e77a46adf47a15 (commit)
via dc0dbb97620670914e030aab47cf1e0f90915ef1 (commit)
via c5ed0db396867362132166c17aac2a74274bb48d (commit)
via 891cedd06767489bf8e00b9c1b98318d9c09d3ef (commit)
via 0f17de699ae1b4e8f7abdb69053405a30b4b7952 (commit)
via 4c5178bacdf897e9717c93187b2bcb657f2e1871 (commit)
via d17c5711691e51a7a46e787da409c568e8dc6cfd (commit)
via e37d9494e7db63a6f9e0798020dc3de62533da91 (commit)
via 72138cabee93955fb3d648ac78c1faea422e2733 (commit)
via 01940e42606ff1b41b53778a2b5148021be8d80b (commit)
via 053aefa444ff4d34070d67d6f45809005c9c7c57 (commit)
via 8b96c2315423a29b508d1d32622b5fd28b386653 (commit)
via 116744bd3cb957d26797c50bcc63e4c673ec49ad (commit)
via 7560c60db1c62ab3b846eba93098d9e81f1be09d (commit)
via db9137c28c816f89efc2f9d69accd5e60cc7ec95 (commit)
via 1cc1ec91224cb05370e8e996433ecb7b5f8201fe (commit)
via 49098782accde3746af4857574c15ceac1ea7916 (commit)
via 475da6c6e49647d883663e3b93e443c57f415169 (commit)
via 0adc89a842ccb2893a472539fe89ffb2e032f41a (commit)
via f9be80d1e56708c2673f952d14a0a42b35cb891e (commit)
via c004843947a6e1724a08225c7791cb46eee01304 (commit)
from ae4f01805596e1d4703327ae525f00f0b20471cc (commit)
Summary of changes:
config/Configurator.py | 179 +++
config/Sip.config | 77 ++
config/SipConfigurator.py | 166 +++
local-slice/SipConfigurationIf.ice | 535 ++++++---
local-slice/SipStateReplicationIf.ice | 2 +-
src/CMakeLists.txt | 3 +
src/PJSipLoggingModule.cpp | 4 +-
src/PJSipManager.cpp | 83 ++-
src/PJSipManager.h | 30 +-
src/PJSipModule.cpp | 9 +-
src/PJSipSessionModule.cpp | 217 +++--
src/PJSipSessionModule.h | 16 +-
src/PJSipSessionModuleConstruction.cpp | 13 +-
src/SipConfiguration.cpp | 1180 ++++++++++++++++++++
src/SipConfiguration.h | 66 ++
src/SipEndpoint.cpp | 102 ++-
src/SipEndpoint.h | 48 +-
src/SipEndpointFactory.cpp | 24 +-
src/SipEndpointFactory.h | 20 +-
src/SipSession.cpp | 233 ++--
src/SipSession.h | 21 +-
src/SipSessionManagerApp.cpp | 71 +-
src/SipSessionManagerEndpointLocator.h | 3 +-
...cator.h => SipSessionManagerEndpointLocator.h~} | 8 +-
src/SipSessionManagerEventPublisher.cpp | 7 +-
src/SipSessionManagerEventPublisher.h | 2 +-
src/SipStateReplicator.h | 25 +-
src/SipStateReplicatorApp.cpp | 30 +-
src/SipStateReplicatorListener.cpp | 43 +-
29 files changed, 2680 insertions(+), 537 deletions(-)
create mode 100755 config/Configurator.py
create mode 100644 config/Sip.config
create mode 100755 config/SipConfigurator.py
create mode 100644 src/SipConfiguration.cpp
create mode 100644 src/SipConfiguration.h
copy src/{SipSessionManagerEndpointLocator.h => SipSessionManagerEndpointLocator.h~} (81%)
- Log -----------------------------------------------------------------
commit f75f0e1e052168c7553f0eab93fe8398a363d8bf
Merge: f77fb7c ae4f018
Author: Ken Hunt <ken.hunt at digium.com>
Date: Mon Apr 25 16:24:45 2011 -0500
Updates for merge with release.
Conflicts:
src/PJSipSessionModule.cpp
src/SipSessionManagerEndpointLocator.h
diff --cc src/PJSipSessionModule.cpp
index 69ad639,d48be72..7b7363e
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@@ -797,7 -753,7 +796,8 @@@ void PJSipSessionModule::handleRefer(pj
PJSipSessionModInfo *session_mod_info = (PJSipSessionModInfo*)inv->mod_data[mModule.id];
SipSessionPtr session = session_mod_info->getSessionPtr();
ConnectBridgedSessionsWithDestinationCallbackPtr cb(
- new ConnectBridgedSessionsWithDestinationCallback(inv, rdata, session, target, operationId));
+ new ConnectBridgedSessionsWithDestinationCallback(inv, rdata, session, target, operationId));
++
Ice::CallbackPtr d = Ice::newCallback(cb, &ConnectBridgedSessionsWithDestinationCallback::callback);
lg(Debug) << "handleRefer() calling router connectBridgedSessionsWithDestination(). ";
commit f77fb7c654bc02c677ccfc1cdcf986d4ed49726e
Author: Ken Hunt <ken.hunt at digium.com>
Date: Sun Apr 24 17:12:01 2011 -0500
Changed a transactionId in the Ice context to an operationId as a parameter for session router interfaces.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 61cd7bd..69ad639 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -55,8 +55,19 @@ using namespace AsteriskSCF::SIP::V1;
class RouteSessionCallback : public IceUtil::Shared
{
public:
- RouteSessionCallback(pjsip_inv_session *inv_session, pjsip_tx_data *tdata)
- : mInvSession(inv_session), mTData(tdata) { }
+ RouteSessionCallback(pjsip_inv_session *inv_session,
+ pjsip_tx_data *tdata,
+ const SipSessionPtr& session,
+ const std::string& destination,
+ const std::string& operationId)
+ : mInvSession(inv_session),
+ mTData(tdata),
+ mSession(session),
+ mDestination(destination),
+ mOperationId(operationId)
+ {
+ }
+
void callback(const Ice::AsyncResultPtr& r)
{
SessionRouterPrx router = SessionRouterPrx::uncheckedCast(r->getProxy());
@@ -78,14 +89,29 @@ public:
private:
pjsip_inv_session *mInvSession;
pjsip_tx_data *mTData;
+ SipSessionPtr mSession;
+ std::string mDestination;
+ std::string mOperationId;
};
typedef IceUtil::Handle<RouteSessionCallback> RouteSessionCallbackPtr;
class ConnectBridgedSessionsCallback : public IceUtil::Shared
{
public:
- ConnectBridgedSessionsCallback(pjsip_inv_session *inv_session, pjsip_rx_data *rdata, const SipSessionPtr& session)
- : mInvSession(inv_session), mRData(rdata), mSession(session) { }
+
+ ConnectBridgedSessionsCallback(pjsip_inv_session *inv_session,
+ pjsip_rx_data *rdata,
+ const SipSessionPtr& session,
+ const SipSessionPtr& otherSession,
+ const std::string& operationId)
+ : mInvSession(inv_session),
+ mRData(rdata),
+ mSession(session),
+ mOtherSession(otherSession),
+ mOperationId(operationId)
+
+ {
+ }
void callback(const Ice::AsyncResultPtr &r)
{
@@ -110,6 +136,8 @@ private:
pjsip_inv_session *mInvSession;
pjsip_rx_data *mRData;
SipSessionPtr mSession;
+ SipSessionPtr mOtherSession;
+ std::string mOperationId;
};
typedef IceUtil::Handle<ConnectBridgedSessionsCallback> ConnectBridgedSessionsCallbackPtr;
@@ -117,9 +145,18 @@ typedef IceUtil::Handle<ConnectBridgedSessionsCallback> ConnectBridgedSessionsCa
class ConnectBridgedSessionsWithDestinationCallback : public IceUtil::Shared
{
public:
- ConnectBridgedSessionsWithDestinationCallback(pjsip_inv_session *inv_session, pjsip_rx_data *rdata,
- const SipSessionPtr& session, const std::string& target)
- : mInvSession(inv_session), mRData(rdata), mSession(session), mTarget(target) { }
+ ConnectBridgedSessionsWithDestinationCallback(pjsip_inv_session *inv_session,
+ pjsip_rx_data *rdata,
+ SipSessionPtr session,
+ const std::string& target,
+ const std::string& operationId)
+ : mInvSession(inv_session),
+ mRData(rdata),
+ mSession(session),
+ mTarget(target),
+ mOperationId(operationId)
+ {
+ }
void callback(const Ice::AsyncResultPtr &r)
{
@@ -153,6 +190,7 @@ private:
pjsip_rx_data *mRData;
SipSessionPtr mSession;
std::string mTarget;
+ std::string mOperationId;
};
typedef IceUtil::Handle<ConnectBridgedSessionsWithDestinationCallback> ConnectBridgedSessionsWithDestinationCallbackPtr;
@@ -169,17 +207,6 @@ private:
const std::string mCallbackName;
};
-/**
- * Utility function to create an Ice context with a single entry.
- * The entry in the context is a transaction id, and it is set to a UUID.
- */
-Ice::Context nextTransactionalContext()
-{
- Ice::Context context;
- context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
- return context;
-}
-
typedef IceUtil::Handle<ListenerCallback> ListenerCallbackPtr;
PJSipSessionModInfo::PJSipSessionModInfo(pjsip_inv_session *inv_session,
@@ -603,10 +630,10 @@ void PJSipSessionModule::handleNewInvite(pjsip_rx_data *rdata)
else
{
// If this is not an attended transfer we can just route the session as normally
- RouteSessionCallbackPtr cb = new RouteSessionCallback(inv_session, tdata);
+ std::string operationId = ::IceUtil::generateUUID();
+ RouteSessionCallbackPtr cb = new RouteSessionCallback(inv_session, tdata, session, destination, operationId);
Ice::CallbackPtr d = Ice::newCallback(cb, &RouteSessionCallback::callback);
- Ice::Context context = nextTransactionalContext();
- mSessionRouter->begin_routeSession(session->getSessionProxy(), destination, context, d);
+ mSessionRouter->begin_routeSession(operationId, session->getSessionProxy(), destination, d);
}
}
catch (const Ice::CommunicatorDestroyedException &)
@@ -743,13 +770,13 @@ void PJSipSessionModule::handleRefer(pjsip_inv_session *inv, pjsip_rx_data *rdat
try
{
- ConnectBridgedSessionsCallbackPtr cb(new ConnectBridgedSessionsCallback(inv, rdata, session));
+ std::string operationId = ::IceUtil::generateUUID();
+ ConnectBridgedSessionsCallbackPtr cb(new ConnectBridgedSessionsCallback(inv, rdata, session, other_session, operationId));
Ice::CallbackPtr d = Ice::newCallback(cb, &ConnectBridgedSessionsCallback::callback);
lg(Debug) << "handleRefer() calling router connectBridgedSessions(). ";
- Ice::Context context = nextTransactionalContext();
- mSessionRouter->begin_connectBridgedSessions(session->getSessionProxy(), other_session->getSessionProxy(), context, d);
+ mSessionRouter->begin_connectBridgedSessions(operationId, session->getSessionProxy(), other_session->getSessionProxy(), d);
}
catch (const Ice::CommunicatorDestroyedException &)
{
@@ -766,15 +793,15 @@ void PJSipSessionModule::handleRefer(pjsip_inv_session *inv, pjsip_rx_data *rdat
// Now that we have the target user we can pass this into routing and go on our marry way
try
{
+ std::string operationId = ::IceUtil::generateUUID();
PJSipSessionModInfo *session_mod_info = (PJSipSessionModInfo*)inv->mod_data[mModule.id];
SipSessionPtr session = session_mod_info->getSessionPtr();
ConnectBridgedSessionsWithDestinationCallbackPtr cb(
- new ConnectBridgedSessionsWithDestinationCallback(inv, rdata, session, target));
+ new ConnectBridgedSessionsWithDestinationCallback(inv, rdata, session, target, operationId));
Ice::CallbackPtr d = Ice::newCallback(cb, &ConnectBridgedSessionsWithDestinationCallback::callback);
lg(Debug) << "handleRefer() calling router connectBridgedSessionsWithDestination(). ";
- Ice::Context context = nextTransactionalContext();
- mSessionRouter->begin_connectBridgedSessionsWithDestination(session->getSessionProxy(), target, context, d);
+ mSessionRouter->begin_connectBridgedSessionsWithDestination(operationId, session->getSessionProxy(), target, d);
}
catch (const Ice::CommunicatorDestroyedException &)
{
commit 79407522c82b6c35e6f8fbb72d0e20c656d5c2e0
Author: Ken Hunt <ken.hunt at digium.com>
Date: Tue Apr 12 20:34:04 2011 -0500
Cleanup of transaction setting on routing operations.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index ee8d528..61cd7bd 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -169,6 +169,17 @@ private:
const std::string mCallbackName;
};
+/**
+ * Utility function to create an Ice context with a single entry.
+ * The entry in the context is a transaction id, and it is set to a UUID.
+ */
+Ice::Context nextTransactionalContext()
+{
+ Ice::Context context;
+ context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
+ return context;
+}
+
typedef IceUtil::Handle<ListenerCallback> ListenerCallbackPtr;
PJSipSessionModInfo::PJSipSessionModInfo(pjsip_inv_session *inv_session,
@@ -594,8 +605,7 @@ void PJSipSessionModule::handleNewInvite(pjsip_rx_data *rdata)
// If this is not an attended transfer we can just route the session as normally
RouteSessionCallbackPtr cb = new RouteSessionCallback(inv_session, tdata);
Ice::CallbackPtr d = Ice::newCallback(cb, &RouteSessionCallback::callback);
- Ice::Context context;
- context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
+ Ice::Context context = nextTransactionalContext();
mSessionRouter->begin_routeSession(session->getSessionProxy(), destination, context, d);
}
}
@@ -738,8 +748,7 @@ void PJSipSessionModule::handleRefer(pjsip_inv_session *inv, pjsip_rx_data *rdat
lg(Debug) << "handleRefer() calling router connectBridgedSessions(). ";
- Ice::Context context;
- context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
+ Ice::Context context = nextTransactionalContext();
mSessionRouter->begin_connectBridgedSessions(session->getSessionProxy(), other_session->getSessionProxy(), context, d);
}
catch (const Ice::CommunicatorDestroyedException &)
@@ -764,8 +773,7 @@ void PJSipSessionModule::handleRefer(pjsip_inv_session *inv, pjsip_rx_data *rdat
Ice::CallbackPtr d = Ice::newCallback(cb, &ConnectBridgedSessionsWithDestinationCallback::callback);
lg(Debug) << "handleRefer() calling router connectBridgedSessionsWithDestination(). ";
- Ice::Context context;
- context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
+ Ice::Context context = nextTransactionalContext();
mSessionRouter->begin_connectBridgedSessionsWithDestination(session->getSessionProxy(), target, context, d);
}
catch (const Ice::CommunicatorDestroyedException &)
commit 985367c6b9d55b0064d654984ab763647d5bf16a
Author: Ken Hunt <ken.hunt at digium.com>
Date: Mon Mar 7 01:22:20 2011 -0600
Adds transaction id to the IceContext for all routing operations.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 0d15243..ee8d528 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -594,7 +594,9 @@ void PJSipSessionModule::handleNewInvite(pjsip_rx_data *rdata)
// If this is not an attended transfer we can just route the session as normally
RouteSessionCallbackPtr cb = new RouteSessionCallback(inv_session, tdata);
Ice::CallbackPtr d = Ice::newCallback(cb, &RouteSessionCallback::callback);
- mSessionRouter->begin_routeSession(session->getSessionProxy(), destination, d);
+ Ice::Context context;
+ context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
+ mSessionRouter->begin_routeSession(session->getSessionProxy(), destination, context, d);
}
}
catch (const Ice::CommunicatorDestroyedException &)
@@ -735,8 +737,10 @@ void PJSipSessionModule::handleRefer(pjsip_inv_session *inv, pjsip_rx_data *rdat
Ice::CallbackPtr d = Ice::newCallback(cb, &ConnectBridgedSessionsCallback::callback);
lg(Debug) << "handleRefer() calling router connectBridgedSessions(). ";
- mSessionRouter->begin_connectBridgedSessions(session->getSessionProxy(),
- other_session->getSessionProxy(), d);
+
+ Ice::Context context;
+ context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
+ mSessionRouter->begin_connectBridgedSessions(session->getSessionProxy(), other_session->getSessionProxy(), context, d);
}
catch (const Ice::CommunicatorDestroyedException &)
{
@@ -760,7 +764,9 @@ void PJSipSessionModule::handleRefer(pjsip_inv_session *inv, pjsip_rx_data *rdat
Ice::CallbackPtr d = Ice::newCallback(cb, &ConnectBridgedSessionsWithDestinationCallback::callback);
lg(Debug) << "handleRefer() calling router connectBridgedSessionsWithDestination(). ";
- mSessionRouter->begin_connectBridgedSessionsWithDestination(session->getSessionProxy(), target, d);
+ Ice::Context context;
+ context[AsteriskSCF::SessionCommunications::V1::TransactionKey] = IceUtil::generateUUID();
+ mSessionRouter->begin_connectBridgedSessionsWithDestination(session->getSessionProxy(), target, context, d);
}
catch (const Ice::CommunicatorDestroyedException &)
{
diff --git a/src/SipSessionManagerEndpointLocator.h b/src/SipSessionManagerEndpointLocator.h
index f5ce9e4..7132abc 100644
--- a/src/SipSessionManagerEndpointLocator.h
+++ b/src/SipSessionManagerEndpointLocator.h
@@ -43,12 +43,8 @@ public: // Overrides of EndpointLocator
* The Routing Service will call this method when it needs to lookup an endpoint that
* we have indicated that we are managing.
*/
-<<<<<<< HEAD
- ::AsteriskSCF::Core::Endpoint::V1::EndpointSeq lookup(const ::std::string& destination,
- const ::Ice::Current& = ::Ice::Current());
-=======
+
virtual void lookup_async(const ::AsteriskSCF::Core::Routing::V1::AMD_EndpointLocator_lookupPtr& cb, const ::std::string& destination, const ::Ice::Current& = ::Ice::Current());
->>>>>>> Changes for amd/ami tags on routing operations.
private:
/**
commit 8fcd9dc04649857437183a335565f27071b20028
Author: Ken Hunt <ken.hunt at digium.com>
Date: Mon Dec 20 21:46:04 2010 -0600
Changes for amd/ami tags on routing operations.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 18a4bfd..dc283f1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -75,7 +75,6 @@ asterisk_scf_component_add_slice(SipStateReplicator
../local-slice/SipIf.ice)
asterisk_scf_component_add_ice_libraries(SipStateReplicator IceStorm)
-asterisk_scf_component_add_boost_libraries(SipStateReplicator thread date_time)
asterisk_scf_component_build_icebox(SipStateReplicator)
target_link_libraries(SipStateReplicator logging-client)
diff --git a/src/SipSessionManagerEndpointLocator.cpp b/src/SipSessionManagerEndpointLocator.cpp
index ff2439c..3fd8679 100644
--- a/src/SipSessionManagerEndpointLocator.cpp
+++ b/src/SipSessionManagerEndpointLocator.cpp
@@ -26,7 +26,14 @@ namespace AsteriskSCF
namespace SipSessionManager
{
-AsteriskSCF::Core::Endpoint::V1::EndpointSeq SipSessionManagerEndpointLocator::lookup(const ::std::string& destination, const Ice::Current&)
+/**
+ * Provide lookup capability to the Asterisk SCF system for endpoints that this component mananges. This
+ * operation is typically invoked by the routing service.
+ *
+ * Note: This interface is shared by the Routing Service, which is why it's specified as AMD. However, we aren't currently
+ * using any asynchrounous features in forming our reply.
+ */
+void SipSessionManagerEndpointLocator::lookup_async(const ::AsteriskSCF::Core::Routing::V1::AMD_EndpointLocator_lookupPtr& cb, const ::std::string& destination, const ::Ice::Current&)
{
AsteriskSCF::Core::Endpoint::V1::EndpointSeq endpoints;
SipEndpointPtr endpoint = mEndpointFactory->findByName(destination);
@@ -34,9 +41,12 @@ AsteriskSCF::Core::Endpoint::V1::EndpointSeq SipSessionManagerEndpointLocator::l
if (endpoint != 0)
{
endpoints.push_back(endpoint->getEndpointProxy());
+ cb->ice_response(endpoints);
+ return;
}
-
- return endpoints;
+
+ cb->ice_exception(::AsteriskSCF::Core::Routing::V1::DestinationNotFoundException(destination));
+
}
}; // end SipSessionManager
diff --git a/src/SipSessionManagerEndpointLocator.h b/src/SipSessionManagerEndpointLocator.h
index c942e74..f5ce9e4 100644
--- a/src/SipSessionManagerEndpointLocator.h
+++ b/src/SipSessionManagerEndpointLocator.h
@@ -43,8 +43,12 @@ public: // Overrides of EndpointLocator
* The Routing Service will call this method when it needs to lookup an endpoint that
* we have indicated that we are managing.
*/
+<<<<<<< HEAD
::AsteriskSCF::Core::Endpoint::V1::EndpointSeq lookup(const ::std::string& destination,
const ::Ice::Current& = ::Ice::Current());
+=======
+ virtual void lookup_async(const ::AsteriskSCF::Core::Routing::V1::AMD_EndpointLocator_lookupPtr& cb, const ::std::string& destination, const ::Ice::Current& = ::Ice::Current());
+>>>>>>> Changes for amd/ami tags on routing operations.
private:
/**
diff --git a/src/SipSessionManagerEndpointLocator.h b/src/SipSessionManagerEndpointLocator.h~
similarity index 86%
copy from src/SipSessionManagerEndpointLocator.h
copy to src/SipSessionManagerEndpointLocator.h~
index c942e74..f5ce9e4 100644
--- a/src/SipSessionManagerEndpointLocator.h
+++ b/src/SipSessionManagerEndpointLocator.h~
@@ -43,8 +43,12 @@ public: // Overrides of EndpointLocator
* The Routing Service will call this method when it needs to lookup an endpoint that
* we have indicated that we are managing.
*/
+<<<<<<< HEAD
::AsteriskSCF::Core::Endpoint::V1::EndpointSeq lookup(const ::std::string& destination,
const ::Ice::Current& = ::Ice::Current());
+=======
+ virtual void lookup_async(const ::AsteriskSCF::Core::Routing::V1::AMD_EndpointLocator_lookupPtr& cb, const ::std::string& destination, const ::Ice::Current& = ::Ice::Current());
+>>>>>>> Changes for amd/ami tags on routing operations.
private:
/**
commit de1c49f45105d4a62b9572f8bf4efbf8c718933c
Author: Mark Michelson <mmichelson at digium.com>
Date: Fri Apr 22 11:14:49 2011 -0500
Get rid of shadow warnings and unused parameter warnings in SIP configuration code.
diff --git a/src/SipConfiguration.cpp b/src/SipConfiguration.cpp
index e374891..76fa596 100644
--- a/src/SipConfiguration.cpp
+++ b/src/SipConfiguration.cpp
@@ -235,7 +235,7 @@ ConfigurationGroupSeq ConfigurationServiceImpl::getConfiguration(const AsteriskS
class visitor : public SipConfigurationGroupVisitor
{
public:
- visitor(boost::shared_ptr<ConfigurationServiceImplPriv> implPriv, ConfigurationGroupSeq& groups) : mImplPriv(implPriv), mGroups(groups) { };
+ visitor(boost::shared_ptr<ConfigurationServiceImplPriv> implPriv, ConfigurationGroupSeq& visitorGroups) : mImplPriv(implPriv), mGroups(visitorGroups) { };
private:
/**
@@ -380,11 +380,11 @@ ConfigurationGroupSeq ConfigurationServiceImpl::getConfigurationAll(const Asteri
class visitor : public SipConfigurationGroupVisitor
{
public:
- visitor(boost::shared_ptr<ConfigurationServiceImplPriv> implPriv, ConfigurationGroupSeq& groups) :
- mImplPriv(implPriv), mGroups(groups) { };
+ visitor(boost::shared_ptr<ConfigurationServiceImplPriv> implPriv, ConfigurationGroupSeq& visitorGroups) :
+ mImplPriv(implPriv), mGroups(visitorGroups) { };
private:
- void visitSipGeneralGroup(const ::AsteriskSCF::SIP::V1::SipGeneralGroupPtr& group)
+ void visitSipGeneralGroup(const ::AsteriskSCF::SIP::V1::SipGeneralGroupPtr&)
{
if (!mImplPriv->mGeneralGroup)
{
@@ -649,7 +649,7 @@ void ConfigurationServiceImpl::setConfiguration(const AsteriskSCF::System::Confi
class udpTransportItemsVisitor : public SipConfigurationItemVisitor
{
public:
- udpTransportItemsVisitor(boost::shared_ptr<UDPTransportImplPriv> localTransport) : mLocalTransport(localTransport) { };
+ udpTransportItemsVisitor(boost::shared_ptr<UDPTransportImplPriv> udpLocalTransport) : mLocalTransport(udpLocalTransport) { };
void visitSipHostItem(const ::AsteriskSCF::SIP::V1::SipHostItemPtr& hostItem)
{
@@ -707,7 +707,7 @@ void ConfigurationServiceImpl::setConfiguration(const AsteriskSCF::System::Confi
class tcpTransportItemsVisitor : public SipConfigurationItemVisitor
{
public:
- tcpTransportItemsVisitor(boost::shared_ptr<TCPTransportImplPriv> localTransport) : mLocalTransport(localTransport) { };
+ tcpTransportItemsVisitor(boost::shared_ptr<TCPTransportImplPriv> tcpLocalTransport) : mLocalTransport(tcpLocalTransport) { };
void visitSipHostItem(const ::AsteriskSCF::SIP::V1::SipHostItemPtr& hostItem)
{
@@ -765,7 +765,7 @@ void ConfigurationServiceImpl::setConfiguration(const AsteriskSCF::System::Confi
class tlsTransportItemsVisitor : public SipConfigurationItemVisitor
{
public:
- tlsTransportItemsVisitor(boost::shared_ptr<TLSTransportImplPriv> localTransport) : mLocalTransport(localTransport) { };
+ tlsTransportItemsVisitor(boost::shared_ptr<TLSTransportImplPriv> tlsLocalTransport) : mLocalTransport(tlsLocalTransport) { };
void visitSipHostItem(const ::AsteriskSCF::SIP::V1::SipHostItemPtr& hostItem)
{
@@ -873,7 +873,7 @@ void ConfigurationServiceImpl::setConfiguration(const AsteriskSCF::System::Confi
class endpointItemsVisitor : public SipConfigurationItemVisitor
{
public:
- endpointItemsVisitor(SipEndpointPtr& endpoint) : mEndpoint(endpoint) { };
+ endpointItemsVisitor(SipEndpointPtr& visitedEndpoint) : mEndpoint(visitedEndpoint) { };
void visitSipAllowableCallDirectionItem(const ::AsteriskSCF::SIP::V1::SipAllowableCallDirectionItemPtr& direction)
{
@@ -1090,7 +1090,7 @@ void ConfigurationServiceImpl::removeConfigurationGroups(const AsteriskSCF::Syst
visitor(boost::shared_ptr<ConfigurationServiceImplPriv> implPriv) : mImplPriv(implPriv) { };
private:
- void visitSipGeneralGroup(const ::AsteriskSCF::SIP::V1::SipGeneralGroupPtr& group)
+ void visitSipGeneralGroup(const ::AsteriskSCF::SIP::V1::SipGeneralGroupPtr&)
{
if (!mImplPriv->mGeneralGroup)
{
commit 0791f44ddb97bced3ded5da19580ba16966e9f63
Merge: 2d535b3 413bb63
Author: Joshua Colp <jcolp at digium.com>
Date: Thu Apr 21 12:14:12 2011 -0300
Merge branch 'indicate'
commit 2d535b3c8813521ba060c544c80baabc2b452f76
Merge: 4c8c74c 04e2c16
Author: Joshua Colp <jcolp at digium.com>
Date: Wed Apr 20 19:44:02 2011 -0300
Merge branch 'configuration'
Conflicts:
src/SipEndpoint.cpp
src/SipEndpointFactory.cpp
src/SipEndpointFactory.h
src/SipSessionManagerApp.cpp
diff --cc src/SipEndpoint.cpp
index 58e4ff6,f883949..50d740e
--- a/src/SipEndpoint.cpp
+++ b/src/SipEndpoint.cpp
@@@ -118,7 -108,40 +118,40 @@@ SipEndpoint::SipEndpoint(const Ice::Obj
setConfiguration(props);
}
+ SipEndpoint::SipEndpoint(Ice::ObjectAdapterPtr adapter, boost::shared_ptr<SipEndpointFactory> factory, std::string name, PJSipManager *manager,
+ const AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx& serviceLocator, const AsteriskSCF::System::Component::V1::ReplicaPtr replica)
+ : mImplPriv(new SipEndpointImplPriv(adapter, factory, name, manager, serviceLocator, replica))
+ {
+ lg(Debug) << "Constructing SIP endpoint " << name;
+
+ mImplPriv->mEndpointProxy = AsteriskSCF::SessionCommunications::V1::SessionEndpointPrx::uncheckedCast(mImplPriv->mAdapter->addWithUUID(this));
+ }
+
+ void SipEndpoint::removeFromAdapter()
+ {
+ mImplPriv->mAdapter->remove(mImplPriv->mEndpointProxy->ice_getIdentity());
+ }
+
+ void SipEndpoint::setSourceAddress(std::string address, int port)
+ {
+ char source[64];
+ pj_ansi_snprintf(source, sizeof(source), "%s:%d", address.c_str(), port);
+ mImplPriv->mConfig.sessionConfig.sourceAddress = source;
+ }
+
+ void SipEndpoint::setTargetAddress(std::string address, int port)
+ {
+ char target[64];
+ pj_ansi_snprintf(target, sizeof(target), "%s:%d", address.c_str(), port);
+ mImplPriv->mConfig.transportConfig.address = target;
+ }
+
+ void SipEndpoint::setCallDirection(enum Direction direction)
+ {
+ mImplPriv->mConfig.sessionConfig.callDirection = direction;
+ }
+
-void SipEndpoint::setConfiguration(Ice::PropertyDict props)
+void SipEndpoint::setConfiguration(const Ice::PropertyDict& props)
{
setTransportConfiguration(props);
//setAuthConfiguration(props);
diff --cc src/SipEndpoint.h
index 994554d,3704e28..fc3aa21
--- a/src/SipEndpoint.h
+++ b/src/SipEndpoint.h
@@@ -207,11 -207,12 +207,14 @@@ class SipEndpointImplPriv
class SipEndpoint : public AsteriskSCF::SessionCommunications::V1::SessionEndpoint
{
public:
- SipEndpoint(Ice::ObjectAdapterPtr adapter, boost::shared_ptr<SipEndpointFactory> factory, std::string name, Ice::PropertyDict props, PJSipManager *manager,
- const AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx& serviceLocator, const AsteriskSCF::System::Component::V1::ReplicaPtr replica);
+ SipEndpoint(const Ice::ObjectAdapterPtr& adapter, const boost::shared_ptr<SipEndpointFactory>& factory,
+ const std::string& name, const Ice::PropertyDict& props, PJSipManager *manager,
+ const AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx& serviceLocator,
+ const AsteriskSCF::System::Component::V1::ReplicaPtr& replica);
+ SipEndpoint(Ice::ObjectAdapterPtr adapter, boost::shared_ptr<SipEndpointFactory> factory, std::string name, PJSipManager *manager,
+ const AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx& serviceLocator, const AsteriskSCF::System::Component::V1::ReplicaPtr replica);
+
bool operator==(const std::string &name) const;
/**
@@@ -231,17 -231,23 +234,26 @@@
AsteriskSCF::SessionCommunications::V1::SessionEndpointPrx getEndpointProxy();
- // TODO: Find a way to use SipSessionPtr here, right now trying to do so results in the world exploding due to dependency insanity
+ //
+ // TODO: Find a way to use SipSessionPtr here, right now trying to do so results in the world exploding due to
+ // dependency insanity
+ //
AsteriskSCF::SipSessionManager::SipSessionPtr createSession(const std::string&);
- AsteriskSCF::SipSessionManager::SipSessionPtr createSession(const std::string&, const Ice::Identity&, const Ice::Identity&,
- const AsteriskSCF::Media::V1::SessionPrx&, const AsteriskSCF::Media::V1::StreamSourceSeq&,
- const AsteriskSCF::Media::V1::StreamSinkSeq&);
+ AsteriskSCF::SipSessionManager::SipSessionPtr createSession(const std::string&, const Ice::Identity&,
+ const Ice::Identity&, const AsteriskSCF::Media::V1::SessionPrx&,
+ const AsteriskSCF::Media::V1::StreamSourceSeq&, const AsteriskSCF::Media::V1::StreamSinkSeq&);
- void removeSession(AsteriskSCF::SessionCommunications::V1::SessionPtr);
+ void removeSession(const AsteriskSCF::SessionCommunications::V1::SessionPtr&);
+ void removeFromAdapter();
+
+ /**
+ * Configuration related operations
+ */
+ void setSourceAddress(std::string, int);
+ void setTargetAddress(std::string, int);
+ void setCallDirection(enum Direction);
+
private:
/**
* Private implementation details.
diff --cc src/SipEndpointFactory.cpp
index 9016be3,c6ffc46..09c4704
--- a/src/SipEndpointFactory.cpp
+++ b/src/SipEndpointFactory.cpp
@@@ -33,13 -32,24 +33,24 @@@ SipEndpointPtr SipEndpointFactory::crea
return endpoint;
}
- void SipEndpointFactory::remove(const SipEndpointPtr&)
+ SipEndpointPtr SipEndpointFactory::createEndpoint(std::string endpointName)
{
- // TODO: Do we even need to remove sip endpoints yet?
- // mEndpoints.erase(std::remove(mEndpoints.begin(), mEndpoints.end(), endpoint), mEndpoints.end());
+ SipEndpointPtr endpoint = new SipEndpoint(mAdapter, shared_from_this(), endpointName, mManager, mServiceLocator, mReplica);
+ mEndpoints.push_back(endpoint);
+ return endpoint;
+ }
+
+ void SipEndpointFactory::remove(std::string endpointName)
+ {
+ SipEndpointPtr endpoint = findByName(endpointName);
+ if (endpoint != 0)
+ {
+ endpoint->removeFromAdapter();
+ mEndpoints.erase(std::remove(mEndpoints.begin(), mEndpoints.end(), endpoint), mEndpoints.end());
+ }
}
-SipEndpointPtr SipEndpointFactory::findByName(std::string endpointName)
+SipEndpointPtr SipEndpointFactory::findByName(const std::string& endpointName)
{
std::vector<SipEndpointPtr>::iterator iter;
for (iter = mEndpoints.begin(); iter != mEndpoints.end(); ++ iter)
diff --cc src/SipEndpointFactory.h
index 73c4d3a,2730186..6431604
--- a/src/SipEndpointFactory.h
+++ b/src/SipEndpointFactory.h
@@@ -36,16 -36,18 +36,18 @@@ namespace SipSessionManage
class SipEndpointFactory : public boost::enable_shared_from_this<SipEndpointFactory>
{
public:
- SipEndpointFactory(Ice::ObjectAdapterPtr adapter, PJSipManager *manager,
- const AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx serviceLocator,
- const AsteriskSCF::System::Component::V1::ReplicaPtr replica) :
+ SipEndpointFactory(const Ice::ObjectAdapterPtr& adapter, PJSipManager *manager,
+ const AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx& serviceLocator,
+ const AsteriskSCF::System::Component::V1::ReplicaPtr& replica) :
mAdapter(adapter), mManager(manager), mServiceLocator(serviceLocator), mReplica(replica) { };
- SipEndpointPtr createEndpoint(std::string destination, Ice::PropertiesPtr props);
+ SipEndpointPtr createEndpoint(const std::string& destination, const Ice::PropertiesPtr& props);
- void remove(const SipEndpointPtr&);
+ SipEndpointPtr createEndpoint(std::string);
+
+ void remove(std::string);
- SipEndpointPtr findByName(std::string endpointName);
+ SipEndpointPtr findByName(const std::string& endpointName);
void generateRoutingDestinations(AsteriskSCF::Core::Routing::V1::RegExSeq&);
private:
diff --cc src/SipSessionManagerApp.cpp
index ecd5338,134dca2..18b12d5
--- a/src/SipSessionManagerApp.cpp
+++ b/src/SipSessionManagerApp.cpp
@@@ -338,10 -336,7 +344,8 @@@ void SipSessionManager::registerWithRou
mEndpointFactory->generateRoutingDestinations(destinations);
- mRoutingId = mCommunicator->getProperties()->getPropertyWithDefault("Sip.RoutingId", "pjsip");
-
- EndpointLocatorPrx locator = EndpointLocatorPrx::uncheckedCast(mGlobalAdapter->createDirectProxy(mCommunicator->stringToIdentity(EndpointLocatorObjectId)));
+ EndpointLocatorPrx locator = EndpointLocatorPrx::uncheckedCast(
+ mGlobalAdapter->createDirectProxy(mCommunicator->stringToIdentity(EndpointLocatorObjectId)));
mRoutingServiceLocatorRegistry->addEndpointLocator(mRoutingId, destinations, locator);
}
commit 4c8c74c547955dd93c9e15d2f5c188918517aeeb
Merge: ca95f56 0fafee7
Author: Kevin P. Fleming <kpfleming at digium.com>
Date: Fri Apr 15 09:15:59 2011 -0500
Merge branch 'wip'
commit ca95f560a6c8ccf5b3ffd2bff26249b982ecedea
Author: Joshua Colp <jcolp at digium.com>
Date: Thu Apr 14 15:36:11 2011 -0300
Enable support for SIP session timers.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 27756f9..467a1ee 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -505,6 +505,10 @@ void PJSipSessionModule::handleNewInvite(pjsip_rx_data *rdata)
// Add our own module as a dialog usage
pjsip_dlg_add_usage(dlg, &mModule, NULL);
+ pjsip_timer_setting session_timer_settings;
+ pjsip_timer_setting_default(&session_timer_settings);
+ pjsip_timer_init_session(inv_session, &session_timer_settings);
+
if (pjsip_inv_initial_answer(inv_session, rdata, 100, NULL, NULL, &tdata) != PJ_SUCCESS)
{
lg(Warning) << "Failed to create 100 Trying response";
diff --git a/src/PJSipSessionModuleConstruction.cpp b/src/PJSipSessionModuleConstruction.cpp
index 9f7d71e..f78c59d 100644
--- a/src/PJSipSessionModuleConstruction.cpp
+++ b/src/PJSipSessionModuleConstruction.cpp
@@ -140,6 +140,7 @@ PJSipSessionModule::PJSipSessionModule(pjsip_endpoint *endpt,
pjsip_evsub_init_module(endpt);
pjsip_xfer_init_module(endpt);
pjsip_replaces_init_module(endpt);
+ pjsip_timer_init_module(endpt);
pjsip_endpt_register_module(endpt, &mModule);
}
diff --git a/src/SipSession.cpp b/src/SipSession.cpp
index e9609b6..8c0e659 100644
--- a/src/SipSession.cpp
+++ b/src/SipSession.cpp
@@ -481,6 +481,10 @@ void SipSession::start(const Ice::Current&)
pjsip_dlg_add_usage(dialog, &mImplPriv->mManager->getSessionModule()->getModule(), NULL);
+ pjsip_timer_setting session_timer_settings;
+ pjsip_timer_setting_default(&session_timer_settings);
+ pjsip_timer_init_session(inviteSession, &session_timer_settings);
+
// Record our session within the dialog so code handling pjsip events can do STUFF
SipSessionPtr session = new SipSession(*this);
PJSipSessionModInfo *session_mod_info = new PJSipSessionModInfo(inviteSession, session);
commit 307e2b902ca3b1466aff00951914feb31bdedfec
Author: Joshua Colp <jcolp at digium.com>
Date: Thu Apr 14 15:25:14 2011 -0300
Fix a bug where we would attempt to send a 405 Method Not Supported for ACKs when we really want another module to handle them.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 8717d6c..27756f9 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -772,6 +772,8 @@ pj_bool_t PJSipSessionModule::on_rx_request(pjsip_rx_data *rdata)
pjsip_dialog *dlg = pjsip_rdata_get_dlg(rdata);
switch (rdata->msg_info.msg->line.req.method.id)
{
+ case PJSIP_ACK_METHOD:
+ return PJ_FALSE;
case PJSIP_INVITE_METHOD:
if (dlg == NULL)
{
commit 0fafee70d034c4406eb11b37817b12a70b50304e
Author: Kevin P. Fleming <kpfleming at digium.com>
Date: Thu Apr 14 13:25:27 2011 -0500
Minor fixes for various code constructs that trip up GCC with new warning
options enabled (-Wextra, -Wconversion, -Wformat, and others).
diff --git a/src/PJSipLoggingModule.cpp b/src/PJSipLoggingModule.cpp
index 729aaf0..c94dec1 100644
--- a/src/PJSipLoggingModule.cpp
+++ b/src/PJSipLoggingModule.cpp
@@ -31,7 +31,7 @@ namespace AsteriskSCF
namespace SipSessionManager
{
-pj_status_t PJSipLoggingModule::load(pjsip_endpoint *endpt)
+pj_status_t PJSipLoggingModule::load(pjsip_endpoint*)
{
return PJ_SUCCESS;
}
@@ -79,7 +79,7 @@ pj_status_t PJSipLoggingModule::on_tx_response(pjsip_tx_data *tdata)
return PJ_SUCCESS;
}
-void PJSipLoggingModule::on_tsx_state(pjsip_transaction *tsx, pjsip_event *event)
+void PJSipLoggingModule::on_tsx_state(pjsip_transaction*, pjsip_event*)
{
}
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 8717d6c..f527ad9 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -406,7 +406,7 @@ void PJSipSessionModule::replicateState(PJSipDialogModInfo *dlgInfo, PJSipTransa
}
}
-pj_status_t PJSipSessionModule::load(pjsip_endpoint *endpt)
+pj_status_t PJSipSessionModule::load(pjsip_endpoint*)
{
return PJ_SUCCESS;
}
@@ -803,25 +803,25 @@ pj_bool_t PJSipSessionModule::on_rx_request(pjsip_rx_data *rdata)
*
* Linking errors abound if these member functions are not defined, though.
*/
-pj_bool_t PJSipSessionModule::on_rx_response(pjsip_rx_data *rdata)
+pj_bool_t PJSipSessionModule::on_rx_response(pjsip_rx_data*)
{
return PJ_FALSE;
}
-pj_status_t PJSipSessionModule::on_tx_request(pjsip_tx_data *tdata)
+pj_status_t PJSipSessionModule::on_tx_request(pjsip_tx_data*)
{
return PJ_SUCCESS;
}
-pj_status_t PJSipSessionModule::on_tx_response(pjsip_tx_data *tdata)
+pj_status_t PJSipSessionModule::on_tx_response(pjsip_tx_data*)
{
return PJ_SUCCESS;
}
-void PJSipSessionModule::on_tsx_state(pjsip_transaction *tsx, pjsip_event *e)
+void PJSipSessionModule::on_tsx_state(pjsip_transaction*, pjsip_event*)
{
return;
}
-void PJSipSessionModule::handleInviteResponse(pjsip_inv_session *inv,
- pjsip_rx_data *rdata, pjsip_dialog *dlg)
+void PJSipSessionModule::handleInviteResponse(pjsip_inv_session* inv,
+ pjsip_rx_data* rdata, pjsip_dialog*)
{
int respCode = rdata->msg_info.msg->line.status.code;
PJSipSessionModInfo *session_mod_info = (PJSipSessionModInfo*)inv->mod_data[mModule.id];
@@ -1017,7 +1017,7 @@ void PJSipSessionModule::invOnStateChanged(pjsip_inv_session *inv, pjsip_event *
}
}
-void PJSipSessionModule::invOnNewSession(pjsip_inv_session *inv, pjsip_event *event)
+void PJSipSessionModule::invOnNewSession(pjsip_inv_session*, pjsip_event*)
{
//stub
}
@@ -1082,13 +1082,13 @@ void PJSipSessionModule::invOnTsxStateChanged(pjsip_inv_session *inv, pjsip_tran
}
}
-void PJSipSessionModule::invOnRxOffer(pjsip_inv_session *inv, const pjmedia_sdp_session *offer)
+void PJSipSessionModule::invOnRxOffer(pjsip_inv_session* inv, const pjmedia_sdp_session*)
{
PJSipSessionModInfo *session_mod_info = (PJSipSessionModInfo*)inv->mod_data[mModule.id];
pjsip_inv_set_sdp_answer(inv, session_mod_info->getSessionPtr()->createSDPOffer());
}
-void PJSipSessionModule::invOnCreateOffer(pjsip_inv_session *inv, pjmedia_sdp_session **p_offer)
+void PJSipSessionModule::invOnCreateOffer(pjsip_inv_session*, pjmedia_sdp_session**)
{
//stub
}
@@ -1129,7 +1129,7 @@ void PJSipSessionModule::invOnMediaUpdate(pjsip_inv_session *inv, pj_status_t st
{
FormatDiscoverySDPPtr params = new FormatDiscoverySDP();
params->category = "media_format";
- params->payload = pj_strtoul(&remote_sdp->media[stream]->desc.fmt[format]);
+ std::stringstream(pj_strbuf(&remote_sdp->media[stream]->desc.fmt[format])) >> params->payload;
params->type = std::string(pj_strbuf(&remote_sdp->media[stream]->desc.media),
pj_strlen(&remote_sdp->media[stream]->desc.media));
@@ -1200,14 +1200,14 @@ void PJSipSessionModule::invOnMediaUpdate(pjsip_inv_session *inv, pj_status_t st
}
}
-pjsip_redirect_op PJSipSessionModule::invOnRedirected(pjsip_inv_session *inv, const pjsip_uri *target,
- const pjsip_event *e)
+pjsip_redirect_op PJSipSessionModule::invOnRedirected(pjsip_inv_session*, const pjsip_uri*,
+ const pjsip_event*)
{
//stub
return PJSIP_REDIRECT_REJECT;
}
-pjsip_dialog *PJSipSessionModule::uaOnDialogForked(pjsip_dialog *first_set, pjsip_rx_data *rdata)
+pjsip_dialog *PJSipSessionModule::uaOnDialogForked(pjsip_dialog*, pjsip_rx_data*)
{
//stub
return NULL;
diff --git a/src/SipEndpointFactory.cpp b/src/SipEndpointFactory.cpp
index ea072c4..9016be3 100644
--- a/src/SipEndpointFactory.cpp
+++ b/src/SipEndpointFactory.cpp
@@ -33,7 +33,7 @@ SipEndpointPtr SipEndpointFactory::createEndpoint(const std::string& destination
return endpoint;
}
-void SipEndpointFactory::remove(const SipEndpointPtr& endpoint)
+void SipEndpointFactory::remove(const SipEndpointPtr&)
{
// TODO: Do we even need to remove sip endpoints yet?
// mEndpoints.erase(std::remove(mEndpoints.begin(), mEndpoints.end(), endpoint), mEndpoints.end());
diff --git a/src/SipSession.cpp b/src/SipSession.cpp
index e9609b6..f6e312d 100644
--- a/src/SipSession.cpp
+++ b/src/SipSession.cpp
@@ -587,7 +587,7 @@ pjmedia_sdp_session *SipSession::createSDPOffer()
pj_strdup2(mImplPriv->mDialog->pool, &sdp->origin.user, "AsteriskSCF");
pj_time_val tv;
pj_gettimeofday(&tv);
- sdp->origin.version = sdp->origin.id = tv.sec + 2208988800UL;
+ sdp->origin.version = sdp->origin.id = (pj_uint32_t) (tv.sec + 2208988800UL);
pj_strdup2(mImplPriv->mDialog->pool, &sdp->origin.net_type, "IN");
pj_strdup2(mImplPriv->mDialog->pool, &sdp->origin.addr_type, "IP4");
sdp->origin.addr = *pj_gethostname();
@@ -612,7 +612,7 @@ pjmedia_sdp_session *SipSession::createSDPOffer()
static_cast<pjmedia_sdp_media*>(pj_pool_zalloc(mImplPriv->mDialog->pool, sizeof(pjmedia_sdp_media)));
sdp->media[0] = media;
pj_strdup2(mImplPriv->mDialog->pool, &media->desc.media, "audio");
- media->desc.port = stream->getLocalPort();
+ media->desc.port = (pj_uint16_t) stream->getLocalPort();
media->desc.port_count = 1;
pj_strdup2(mImplPriv->mDialog->pool, &media->desc.transport, "RTP/AVP");
diff --git a/src/SipSessionManagerApp.cpp b/src/SipSessionManagerApp.cpp
index 34d4128..ecd5338 100644
--- a/src/SipSessionManagerApp.cpp
+++ b/src/SipSessionManagerApp.cpp
@@ -569,7 +569,7 @@ void SipSessionManager::initialize(const string& appName, const Ice::Communicato
/**
* Overload of the IceBox::Service::start method.
*/
-void SipSessionManager::start(const string& name, const Ice::CommunicatorPtr& ic, const Ice::StringSeq& args)
+void SipSessionManager::start(const string& name, const Ice::CommunicatorPtr& ic, const Ice::StringSeq&)
{
// Initialize this component.
initialize(name, ic);
@@ -621,7 +621,7 @@ void SipSessionManager::stop()
extern "C"
{
-ASTERISK_SCF_ICEBOX_EXPORT IceBox::Service* create(Ice::CommunicatorPtr communicator)
+ASTERISK_SCF_ICEBOX_EXPORT IceBox::Service* create(Ice::CommunicatorPtr)
{
return new SipSessionManager;
}
diff --git a/src/SipStateReplicatorApp.cpp b/src/SipStateReplicatorApp.cpp
index fae2b3b..9ad6f2b 100644
--- a/src/SipStateReplicatorApp.cpp
+++ b/src/SipStateReplicatorApp.cpp
@@ -214,7 +214,7 @@ void SipStateReplicatorService::initialize(const std::string& appName, const Ice
mAdapter->activate();
}
-void SipStateReplicatorService::start(const string &name, const Ice::CommunicatorPtr& ic, const Ice::StringSeq& args)
+void SipStateReplicatorService::start(const string& name, const Ice::CommunicatorPtr& ic, const Ice::StringSeq&)
{
initialize(name, ic);
// Plug into the Asterisk SCF discovery system so that the interfaces we provide
@@ -230,7 +230,7 @@ void SipStateReplicatorService::stop()
extern "C"
{
-ASTERISK_SCF_ICEBOX_EXPORT IceBox::Service* create(Ice::CommunicatorPtr communicator)
+ASTERISK_SCF_ICEBOX_EXPORT IceBox::Service* create(Ice::CommunicatorPtr)
{
return new SipStateReplicatorService;
}
diff --git a/src/SipStateReplicatorListener.cpp b/src/SipStateReplicatorListener.cpp
index 36c09e4..248e9b2 100644
--- a/src/SipStateReplicatorListener.cpp
+++ b/src/SipStateReplicatorListener.cpp
@@ -162,7 +162,7 @@ public:
pjsip_ua_unregister_dlg(pjsip_ua_instance(), localDialog);
pj_strdup2(localDialog->pool, &localDialog->local.info->tag, dialog->mLocalTag.c_str());
localDialog->local.tag_hval = pj_hash_calc(0, localDialog->local.info->tag.ptr,
- localDialog->local.info->tag.slen);
+ (unsigned int) localDialog->local.info->tag.slen);
pjsip_ua_register_dlg(pjsip_ua_instance(), localDialog);
}
@@ -170,7 +170,7 @@ public:
{
pj_strdup2(localDialog->pool, &localDialog->remote.info->tag, dialog->mRemoteTag.c_str());
localDialog->remote.tag_hval = pj_hash_calc(0, localDialog->remote.info->tag.ptr,
- localDialog->remote.info->tag.slen);
+ (unsigned int) localDialog->remote.info->tag.slen);
}
// TODO: Handle mRouteSet, which is not as easy as it sounds!
commit 1f886e1225940e228bec9a983cf4a7b844e69cb4
Author: Mark Michelson <mmichelson at digium.com>
Date: Thu Apr 14 10:29:23 2011 -0500
Fix a shadowing warning.
Thanks there Mr. Fleming!
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 8d18093..8717d6c 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -558,7 +558,7 @@ void PJSipSessionModule::handleNewInvite(pjsip_rx_data *rdata)
SipSessionPtr session;
try
{
- SipSessionPtr session = caller->createSession(destination);
+ session = caller->createSession(destination);
}
catch (const Ice::Exception& ex)
{
commit 24244fa6392253ffe2ff6c60757435be1b26da20
Author: Mark Michelson <mmichelson at digium.com>
Date: Wed Apr 13 15:03:25 2011 -0500
Catch exception when attempting to release media sessions.
This was discovered by killing the media component during the middle
of a call and then trying to hang up.
diff --git a/src/SipSession.cpp b/src/SipSession.cpp
index ed8d08d..e9609b6 100644
--- a/src/SipSession.cpp
+++ b/src/SipSession.cpp
@@ -562,7 +562,14 @@ void SipSession::destroy()
for (std::vector<AsteriskSCF::Media::RTP::V1::RTPSessionPrx>::const_iterator i =
mImplPriv->mRTPSessions.begin(); i != mImplPriv->mRTPSessions.end(); ++i)
{
- (*i)->release();
+ try
+ {
+ (*i)->release();
+ }
+ catch (const Ice::Exception& ex)
+ {
+ lg(Error) << "Exception caught while trying to release a media session\n" << ex.what();
+ }
}
}
commit 2b68a207e8b733c5d32f7f3baa63ab743a4a4f82
Merge: 872dc33 929982d
Author: Mark Michelson <mmichelson at digium.com>
Date: Wed Apr 13 13:45:22 2011 -0500
Merge branch 'master' of git.asterisk.org:asterisk-scf/release/sip
commit 872dc33703f403a63e896a8b778a1e43fa7bad09
Author: Mark Michelson <mmichelson at digium.com>
Date: Wed Apr 13 13:43:58 2011 -0500
Catch exceptions thrown during session creation.
We were testing what happens when various components "die"
and what happens when we try to place a call in such a state. This
change results in it being safe to place a call if the media
component is not running.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 58a30c5..8fca880 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -535,7 +535,18 @@ void PJSipSessionModule::handleNewInvite(pjsip_rx_data *rdata)
lg(Debug) << "Call is destined for " << destination;
}
- SipSessionPtr session = caller->createSession(destination);
+ SipSessionPtr session;
+ try
+ {
+ SipSessionPtr session = caller->createSession(destination);
+ }
+ catch (const Ice::Exception& ex)
+ {
+ lg(Error) << "Exception caught while trying to create SIP session\n" << ex.what();
+ pjsip_inv_end_session(inv_session, 500, NULL, &tdata);
+ pjsip_inv_send_msg(inv_session, tdata);
+ return;
+ }
session->setInviteSession(inv_session);
session->setDialog(dlg);
PJSipSessionModInfo *session_mod_info = new PJSipSessionModInfo(inv_session, session);
commit 929982dac23f77950f2b7ff18ec85b51a42de558
Author: Joshua Colp <jcolp at digium.com>
Date: Wed Apr 13 14:41:00 2011 -0300
Respond with a 405 Method Not Allowed response for requests that we do not support.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 165f35b..7bfa199 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -779,7 +779,8 @@ pj_bool_t PJSipSessionModule::on_rx_request(pjsip_rx_data *rdata)
break;
}
default:
- return PJ_FALSE;
+ pjsip_endpt_respond_stateless(mEndpoint, rdata, 405, NULL, NULL, NULL);
+ break;
}
return PJ_TRUE;
commit 95c838e77ca99e63a13721981e2aa07867c4bea1
Author: Joshua Colp <jcolp at digium.com>
Date: Wed Apr 13 12:00:45 2011 -0300
Verify we can handle incoming INVITEs and if we can not then respond accordingly.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index c770f45..165f35b 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -441,16 +441,36 @@ void PJSipSessionModule::handleNewInvite(pjsip_rx_data *rdata)
//XXX Put caller identification code in here!
- //XXX According to pjsip docs, we should call
- //pjsip_inv_verify_request to be sure we can
- //handle the request. For now, just plunge forward.
+ pjsip_tx_data *tdata = NULL;
+ unsigned options = PJSIP_INV_SUPPORT_100REL;
+
+ // Verify we can handle this invite request and respond accordingly if we can not
+ if (pjsip_inv_verify_request(rdata, &options, NULL, NULL, mEndpoint, &tdata) != PJ_SUCCESS)
+ {
+ if (tdata)
+ {
+ pjsip_endpt_send_response2(mEndpoint, rdata, tdata, NULL, NULL);
+ }
+ else
+ {
+ pjsip_endpt_respond_stateless(mEndpoint, rdata, 500, NULL, NULL, NULL);
+ }
+ return;
+ }
pjsip_dialog *dlg, *replaced_dlg;
- pjsip_tx_data *tdata;
// If this is an attended transfer and something is amuck... respond accordingly
if (pjsip_replaces_verify_request(rdata, &replaced_dlg, PJ_FALSE, &tdata) != PJ_SUCCESS)
{
+ if (tdata)
+ {
+ pjsip_endpt_send_response2(mEndpoint, rdata, tdata, NULL, NULL);
+ }
+ else
+ {
+ pjsip_endpt_respond_stateless(mEndpoint, rdata, 500, NULL, NULL, NULL);
+ }
return;
}
diff --git a/src/PJSipSessionModule.h b/src/PJSipSessionModule.h
index a1fdde3..e22c31d 100644
--- a/src/PJSipSessionModule.h
+++ b/src/PJSipSessionModule.h
@@ -95,6 +95,7 @@ private:
AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx mServiceLocator;
AsteriskSCF::SmartProxy::SmartProxy<AsteriskSCF::SIP::V1::SipStateReplicatorPrx> mStateReplicator;
AsteriskSCF::System::Component::V1::ReplicaPtr mReplica;
+ pjsip_endpoint *mEndpoint;
};
}; //end namespace SipSessionManager
diff --git a/src/PJSipSessionModuleConstruction.cpp b/src/PJSipSessionModuleConstruction.cpp
index c1da3a7..9f7d71e 100644
--- a/src/PJSipSessionModuleConstruction.cpp
+++ b/src/PJSipSessionModuleConstruction.cpp
@@ -99,7 +99,7 @@ PJSipSessionModule::PJSipSessionModule(pjsip_endpoint *endpt,
const AsteriskSCF::System::Component::V1::ReplicaPtr& replica)
: mName(moduleName), mEndpointFactory(endpointFactoryPtr),
mSessionRouter(sessionRouter), mServiceLocator(serviceLocator),
- mStateReplicator(stateReplicator), mReplica(replica)
+ mStateReplicator(stateReplicator), mReplica(replica), mEndpoint(endpt)
{
sessionModule = this;
mModule.name = pj_str(moduleName);
commit d7418a0d23a8a23431e859442c782501abfc0553
Merge: 7a25b80 6ced932
Author: Kevin P. Fleming <kpfleming at digium.com>
Date: Tue Apr 12 16:35:43 2011 -0500
Merge branch 'master' of git.asterisk.org:asterisk-scf/release/sip
commit 7a25b8073e1e0d2bb2391a3feafb61b6bdacb380
Author: Kevin P. Fleming <kpfleming at digium.com>
Date: Tue Apr 12 16:35:37 2011 -0500
Resolve a variable shadowing warning.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 58a30c5..de17ddc 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -1151,8 +1151,7 @@ void PJSipSessionModule::invOnMediaUpdate(pjsip_inv_session *inv, pj_status_t st
// format
if (service != 0)
{
- FormatPtr format = FormatPtr::dynamicCast(service->getFormat(params));
- formats.push_back(format);
+ formats.push_back(FormatPtr::dynamicCast(service->getFormat(params)));
}
}
catch (...)
commit 6ced932f19f094541afd5c7ef8b069ea83f26438
Author: Joshua Colp <jcolp at digium.com>
Date: Tue Apr 12 18:22:42 2011 -0300
Fix a bug where attempting to send a message that would use a transport that is unavailable would cause a crash.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 58a30c5..b2884f1 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -933,13 +933,19 @@ void PJSipSessionModule::invOnStateChanged(pjsip_inv_session *inv, pjsip_event *
session_mod_info->mNeedsRemoval = true;
pjsip_dialog *dlg = inv->dlg;
PJSipDialogModInfo *dlg_mod_info = (PJSipDialogModInfo*) dlg->mod_data[mModule.id];
- dlg_mod_info->mNeedsRemoval = true;
+ if (dlg_mod_info)
+ {
+ dlg_mod_info->mNeedsRemoval = true;
+ }
lg(Debug) << "Replicating state on DISCONNECTED inv_state.";
replicateState(dlg_mod_info, NULL, session_mod_info);
delete session_mod_info;
- delete dlg_mod_info;
- dlg->mod_data[mModule.id] = 0;
- inv->mod_data[mModule.id] = 0;
+ inv->mod_data[mModule.id] = 0;
+ if (dlg_mod_info)
+ {
+ delete dlg_mod_info;
+ dlg->mod_data[mModule.id] = 0;
+ }
}
if (event->type == PJSIP_EVENT_RX_MSG && inv->state == PJSIP_INV_STATE_CONFIRMED)
{
commit 238e6bb3ddcb4d697e3ac5189c73e0683132ad5e
Author: Mark Michelson <mmichelson at digium.com>
Date: Tue Apr 12 10:52:47 2011 -0500
Make sure not to try to end a non-existent inv_session.
This was triggered by attempting to call a destination that did not
have a host and port configured. The session setup would not be able
to create a pjsip_inv_session, so when stop() was called on the session,
we were passing a NULL pointer to PJSIP, triggering an assertion.
It's perfectly valid for the pjsip_inv_session to be NULL when stopping
a session, so we just need to make sure we don't pass it on to PJSIP.
diff --git a/src/SipSession.cpp b/src/SipSession.cpp
index cd003e3..ed8d08d 100644
--- a/src/SipSession.cpp
+++ b/src/SipSession.cpp
@@ -523,7 +523,7 @@ void SipSession::stop(const AsteriskSCF::SessionCommunications::V1::ResponseCode
// On an outbound call, if we have not received a provisional response yet, then PJSIP will
// set packet NULL but still return PJ_SUCCESS. In this case, if we attempt to call pjsip_inv_send_msg,
// then we will trigger an assertion since the packet we pass in is NULL.
- if ((pjsip_inv_end_session(mImplPriv->mInviteSession, code, NULL, &packet)) == PJ_SUCCESS && packet)
+ if (mImplPriv->mInviteSession && (pjsip_inv_end_session(mImplPriv->mInviteSession, code, NULL, &packet) == PJ_SUCCESS) && packet)
{
pjsip_inv_send_msg(mImplPriv->mInviteSession, packet);
}
commit 04e2c162bc7f6cd6b9bceb74089d1a9a29148b59
Author: Joshua Colp <jcolp at digium.com>
Date: Mon Apr 11 18:20:38 2011 -0300
Fix visitor generation issue with some specific endpoint configuration items.
diff --git a/local-slice/SipConfigurationIf.ice b/local-slice/SipConfigurationIf.ice
index 5e6dc0b..58cae24 100644
--- a/local-slice/SipConfigurationIf.ice
+++ b/local-slice/SipConfigurationIf.ice
@@ -109,7 +109,7 @@ module V1
/**
* Host information configuration item
*/
- class SipHostItem extends SipConfigurationItem
+ ["visitor:SipConfigurationItemVisitor"] class SipHostItem extends SipConfigurationItem
{
/**
* String containing the IP address or string address
@@ -125,14 +125,14 @@ module V1
/**
* Source transport address configuration item
*/
- class SipSourceTransportAddressItem extends SipHostItem
+ ["visitor:SipConfigurationItemVisitor"] class SipSourceTransportAddressItem extends SipHostItem
{
};
/**
* Target destination address configuration item
*/
- class SipTargetDestinationAddressItem extends SipHostItem
+ ["visitor:SipConfigurationItemVisitor"] class SipTargetDestinationAddressItem extends SipHostItem
{
};
commit 0c1ba29dc6631ac5ce38a3d2629fe17afcd39627
Author: Joshua Colp <jcolp at digium.com>
Date: Mon Apr 11 16:13:51 2011 -0300
Fix a bug where the routing id was not present before being used.
diff --git a/src/SipSessionManagerApp.cpp b/src/SipSessionManagerApp.cpp
index c896e1c..134dca2 100644
--- a/src/SipSessionManagerApp.cpp
+++ b/src/SipSessionManagerApp.cpp
@@ -336,8 +336,6 @@ void SipSessionManager::registerWithRoutingService()
mEndpointFactory->generateRoutingDestinations(destinations);
- mRoutingId = mCommunicator->getProperties()->getPropertyWithDefault("Sip.RoutingId", "pjsip");
-
EndpointLocatorPrx locator = EndpointLocatorPrx::uncheckedCast(mGlobalAdapter->createDirectProxy(mCommunicator->stringToIdentity(EndpointLocatorObjectId)));
mRoutingServiceLocatorRegistry->addEndpointLocator(mRoutingId, destinations, locator);
}
@@ -366,6 +364,9 @@ void SipSessionManager::locateRoutingService()
AsteriskSCF::SmartProxy::SmartProxy<LocatorRegistryPrx> pw(mServiceLocator, genericparams, lg);
mRoutingServiceLocatorRegistry = pw;
+
+ // This exists here since it may need to be known before actually contacting the routing service
+ mRoutingId = mCommunicator->getProperties()->getPropertyWithDefault("Sip.RoutingId", "pjsip");
}
void SipSessionManager::locateStateReplicator()
commit df6502431fb6d495c88eb9a223820f063432bd7e
Author: Joshua Colp <jcolp at digium.com>
Date: Mon Apr 11 15:58:27 2011 -0300
Move initialization of the routing service proxy so it can be passed to the configuration service.
diff --git a/src/SipSessionManagerApp.cpp b/src/SipSessionManagerApp.cpp
index 82738d5..c896e1c 100644
--- a/src/SipSessionManagerApp.cpp
+++ b/src/SipSessionManagerApp.cpp
@@ -533,6 +533,9 @@ void SipSessionManager::initialize(const std::string appName, const Ice::Communi
mEndpointFactory.reset(new SipEndpointFactory(mGlobalAdapter, mPJSipManager, mServiceLocator, mReplicaService));
lg(Debug) << "Created SIP endpoint factory";
+ // Locate the Routing Service so that we can do routing. This is done here so it can be passed to the configuration service.
+ locateRoutingService();
+
// Create and publish our Configuration interface support.
mConfigurationService = new ConfigurationServiceImpl(mPJSipManager, mEndpointFactory, mRoutingId, mRoutingServiceLocatorRegistry);
mGlobalAdapter->add(mConfigurationService, mCommunicator->stringToIdentity(ConfigurationServiceId));
@@ -578,9 +581,6 @@ void SipSessionManager::start(const string& name, const Ice::CommunicatorPtr& ic
// can be located.
registerWithServiceLocator();
- // Locate the Routing Service so that we can do routing.
- locateRoutingService();
-
// Locate the Session Router so we can REALLY do routing.
locateSessionRouter();
commit 6fa0d1a69f5290d1154951965017380dc4e61825
Author: Joshua Colp <jcolp at digium.com>
Date: Mon Apr 11 15:30:30 2011 -0300
Do not attempt to start a TLS transport if pjsip has not been built with support for it.
diff --git a/src/PJSipManager.cpp b/src/PJSipManager.cpp
index 7571b80..2fb8f6f 100644
--- a/src/PJSipManager.cpp
+++ b/src/PJSipManager.cpp
@@ -189,7 +189,9 @@ pjsip_tpfactory *PJSipManager::createTLSTransport(std::string address, int port,
pjsip_tpfactory *tlsTransport = NULL;
+#if PJSIP_HAS_TLS_TRANSPORT
if (pjsip_tls_transport_start(mEndpoint, tlsSettings, &tlsAddr, NULL, 2, &tlsTransport) != PJ_SUCCESS)
+#endif
{
lg(Error) << "Failed to create TLS transport.";
}
commit 06ba07d7d56ed8447eeb188eb4bb5770a9c41adc
Author: Joshua Colp <jcolp at digium.com>
Date: Mon Apr 11 15:19:45 2011 -0300
Fix incompatibility with latest visitor generation code. Yay these are now in the visitor!
diff --git a/local-slice/SipConfigurationIf.ice b/local-slice/SipConfigurationIf.ice
index c89ed18..5e6dc0b 100644
--- a/local-slice/SipConfigurationIf.ice
+++ b/local-slice/SipConfigurationIf.ice
@@ -97,7 +97,7 @@ module V1
* Generic SIP transport group that others derive from, primarily created since each one has
* the requirement of a name
*/
- class SipTransportGroup extends SipConfigurationGroup
+ ["visitor:SipConfigurationGroupVisitor"] class SipTransportGroup extends SipConfigurationGroup
{
/**
* Name of the specific transport. Since each one may have multiple transports this differentiates
@@ -347,21 +347,21 @@ module V1
/**
* Group of configuration items related to a UDP transport
*/
- class SipUDPTransportGroup extends SipTransportGroup
+ ["visitor:SipConfigurationGroupVisitor"] class SipUDPTransportGroup extends SipTransportGroup
{
};
/**
* Group of configuration items related to a TCP transport
*/
- class SipTCPTransportGroup extends SipTransportGroup
+ ["visitor:SipConfigurationGroupVisitor"] class SipTCPTransportGroup extends SipTransportGroup
{
};
/**
* Group of configuration items related to a TLS transport
*/
- class SipTLSTransportGroup extends SipTransportGroup
+ ["visitor:SipConfigurationGroupVisitor"] class SipTLSTransportGroup extends SipTransportGroup
{
};
commit a2ce7d678f3574f6f63691dacead5e2574ded080
Author: Joshua Colp <jcolp at digium.com>
Date: Mon Apr 11 14:30:08 2011 -0300
Update the routing service when endpoint configurations are pushed into the SIP component.
diff --git a/src/SipConfiguration.cpp b/src/SipConfiguration.cpp
index 89e6d63..e374891 100644
--- a/src/SipConfiguration.cpp
+++ b/src/SipConfiguration.cpp
@@ -36,6 +36,7 @@ namespace SipSessionManager
using namespace AsteriskSCF::SIP::V1;
using namespace AsteriskSCF::System::Configuration::V1;
+using namespace AsteriskSCF::Core::Routing::V1;
class UDPTransportImplPriv
{
@@ -168,7 +169,9 @@ public:
/**
* Constructor for this private class
*/
- ConfigurationServiceImplPriv(PJSipManager *manager, boost::shared_ptr<SipEndpointFactory> factory) : mPJSipManager(manager), mEndpointFactory(factory) { };
+ ConfigurationServiceImplPriv(PJSipManager *manager, boost::shared_ptr<SipEndpointFactory> factory, std::string& id,
+ AsteriskSCF::SmartProxy::SmartProxy<LocatorRegistryPrx> registry) :
+ mPJSipManager(manager), mEndpointFactory(factory), mRoutingId(id), mRoutingServiceLocatorRegistry(registry) { };
/**
* Configured SIP domains
@@ -209,10 +212,21 @@ public:
* Pointer to the endpoint factory used to create endpoints
*/
boost::shared_ptr<SipEndpointFactory> mEndpointFactory;
+
+ /**
+ * Identifier for our endpoint locator.
+ */
+ std::string mRoutingId;
+
+ /**
+ * Proxy to endpoint locator registry
+ */
+ AsteriskSCF::SmartProxy::SmartProxy<LocatorRegistryPrx> mRoutingServiceLocatorRegistry;
};
-ConfigurationServiceImpl::ConfigurationServiceImpl(PJSipManager *manager, boost::shared_ptr<SipEndpointFactory> factory) :
- mImplPriv(new ConfigurationServiceImplPriv(manager, factory))
+ConfigurationServiceImpl::ConfigurationServiceImpl(PJSipManager *manager, boost::shared_ptr<SipEndpointFactory> factory,
+ std::string& id, AsteriskSCF::SmartProxy::SmartProxy<LocatorRegistryPrx> registry) :
+ mImplPriv(new ConfigurationServiceImplPriv(manager, factory, id, registry))
{
}
@@ -917,6 +931,11 @@ void ConfigurationServiceImpl::setConfiguration(const AsteriskSCF::System::Confi
{
(*group)->visit(v);
}
+
+ // Update endpoint locator with any new destinations that may have been pushed
+ RegExSeq destinations;
+ mImplPriv->mEndpointFactory->generateRoutingDestinations(destinations);
+ mImplPriv->mRoutingServiceLocatorRegistry->setEndpointLocatorDestinationIds(mImplPriv->mRoutingId, destinations);
}
void ConfigurationServiceImpl::removeConfigurationItems(const AsteriskSCF::System::Configuration::V1::ConfigurationGroupSeq& groups, const Ice::Current&)
diff --git a/src/SipConfiguration.h b/src/SipConfiguration.h
index 5444ddd..d658614 100644
--- a/src/SipConfiguration.h
+++ b/src/SipConfiguration.h
@@ -21,6 +21,9 @@
#include <boost/shared_ptr.hpp>
#include <AsteriskSCF/System/Component/ConfigurationIf.h>
+#include <AsteriskSCF/Core/Routing/RoutingIf.h>
+
+#include <AsteriskSCF/SmartProxy.h>
#include "PJSipManager.h"
#include "SipEndpointFactory.h"
@@ -43,7 +46,8 @@ class ConfigurationServiceImplPriv;
class ConfigurationServiceImpl : public AsteriskSCF::System::Configuration::V1::ConfigurationService
{
public:
- ConfigurationServiceImpl(PJSipManager*, boost::shared_ptr<SipEndpointFactory>);
+ ConfigurationServiceImpl(PJSipManager*, boost::shared_ptr<SipEndpointFactory>, std::string&,
+ AsteriskSCF::SmartProxy::SmartProxy<AsteriskSCF::Core::Routing::V1::LocatorRegistryPrx>);
AsteriskSCF::System::Configuration::V1::ConfigurationGroupSeq getConfiguration(const AsteriskSCF::System::Configuration::V1::ConfigurationGroupSeq&, const Ice::Current&);
AsteriskSCF::System::Configuration::V1::ConfigurationGroupSeq getConfigurationAll(const AsteriskSCF::System::Configuration::V1::ConfigurationGroupSeq&, const Ice::Current&);
AsteriskSCF::System::Configuration::V1::ConfigurationGroupSeq getConfigurationGroups(const Ice::Current&);
diff --git a/src/SipSessionManagerApp.cpp b/src/SipSessionManagerApp.cpp
index 9df89d0..82738d5 100644
--- a/src/SipSessionManagerApp.cpp
+++ b/src/SipSessionManagerApp.cpp
@@ -534,7 +534,7 @@ void SipSessionManager::initialize(const std::string appName, const Ice::Communi
lg(Debug) << "Created SIP endpoint factory";
// Create and publish our Configuration interface support.
- mConfigurationService = new ConfigurationServiceImpl(mPJSipManager, mEndpointFactory);
+ mConfigurationService = new ConfigurationServiceImpl(mPJSipManager, mEndpointFactory, mRoutingId, mRoutingServiceLocatorRegistry);
mGlobalAdapter->add(mConfigurationService, mCommunicator->stringToIdentity(ConfigurationServiceId));
lg(Debug) << "Created SIP Configuration Implementation";
commit 413bb6369fb40c99a952305fa924dc087da7792c
Author: Joshua Colp <jcolp at digium.com>
Date: Thu Apr 7 11:37:50 2011 -0300
Remove old code.
diff --git a/src/SipSession.cpp b/src/SipSession.cpp
index 0354394..6fb6409 100644
--- a/src/SipSession.cpp
+++ b/src/SipSession.cpp
@@ -293,29 +293,6 @@ void SipSession::indicate(const AsteriskSCF::SessionCommunications::V1::Indicati
}
/**
- * An implementation of the connect method as defined in SessionCommunications.ice which sends
- * a 200 OK with SDP to the SIP endpoint.
- */
-void SipSession::connect(const Ice::Current&)
-{
- pjmedia_sdp_session *sdp = createSDPOffer();
- pjsip_tx_data *packet;
- if ((pjsip_inv_answer(mImplPriv->mInviteSession, 200, NULL, sdp, &packet)) == PJ_SUCCESS)
- {
- pjsip_inv_send_msg(mImplPriv->mInviteSession, packet);
- }
-}
-
-/**
- * An implementation of the flash method as defined in SessionCommunications.ice which sends
- * nothing, presently, to the SIP endpoint.
- */
-void SipSession::flash(const Ice::Current&)
-{
- // This is usually transported using INFO or RFC2833, so for now just pretend it does not exist
-}
-
-/**
* An implementation of the getEndpoint method as defined in SessionCommunications.ice
*/
AsteriskSCF::SessionCommunications::V1::SessionEndpointPrx SipSession::getEndpoint(const Ice::Current&)
@@ -427,37 +404,6 @@ void SipSession::removeBridge(const AsteriskSCF::SessionCommunications::V1::Sess
}
/**
- * An implementation of the hold method as defined in SessionCommunications.ice which sends
- * a reinvite with sendonly attribute and no connection info to the SIP endpoint.
- */
-void SipSession::hold(const Ice::Current&)
-{
- // TODO: Update SDP with sendonly attribute and no IP
-
- // TODO: This is actually passing the hold through, we will need to support local generation
-
- pjsip_tx_data *packet;
- if ((pjsip_inv_reinvite(mImplPriv->mInviteSession, NULL, NULL, &packet)) == PJ_SUCCESS)
- {
- pjsip_inv_send_msg(mImplPriv->mInviteSession, packet);
- }
-}
-
-/**
- * An implementation of the progress method as defined in SessionCommunications.ice which sends
- * a 183 Session Progress with SDP to the SIP endpoint.
- */
-void SipSession::progress(const AsteriskSCF::SessionCommunications::V1::ResponseCodePtr&, const Ice::Current&)
-{
- pjmedia_sdp_session *sdp = createSDPOffer();
- pjsip_tx_data *packet;
- if ((pjsip_inv_answer(mImplPriv->mInviteSession, 183, NULL, sdp, &packet)) == PJ_SUCCESS)
- {
- pjsip_inv_send_msg(mImplPriv->mInviteSession, packet);
- }
-}
-
-/**
* An implementation of the removeListener method as defined in SessionCommunications.ice
*/
void SipSession::removeListener(const AsteriskSCF::SessionCommunications::V1::SessionListenerPrx& listener, const Ice::Current&)
@@ -477,20 +423,6 @@ void SipSession::removeListener(const AsteriskSCF::SessionCommunications::V1::Se
}
/**
- * An implementation of the ring method as defined in SessionCommunications.ice which sends
- * a 180 Ringing without SDP to the SIP endpoint.
- */
-void SipSession::ring(const Ice::Current&)
-{
- pjsip_tx_data *packet;
-
- if ((pjsip_inv_answer(mImplPriv->mInviteSession, 180, NULL, NULL, &packet)) == PJ_SUCCESS)
- {
- pjsip_inv_send_msg(mImplPriv->mInviteSession, packet);
- }
-}
-
-/**
* An implementation of the start method as defined in SessionCommunications.ice which sends
* an INVITE with SDP to the SIP endpoint.
*/
@@ -586,23 +518,6 @@ void SipSession::stop(const AsteriskSCF::SessionCommunications::V1::ResponseCode
}
/**
- * An implementation of the unhold method as defined in SessionCommunications.ice which sends
- * a reinvite with sendrecv attribute and connection information to the SIP endpoint.
- */
-void SipSession::unhold(const Ice::Current&)
-{
- // TODO: Update SDP with sendrecv and IP
-
- // TODO: This is actually passing the unhold through, we will need to support local generation
-
- pjsip_tx_data *packet;
- if ((pjsip_inv_reinvite(mImplPriv->mInviteSession, NULL, NULL, &packet)) == PJ_SUCCESS)
- {
- pjsip_inv_send_msg(mImplPriv->mInviteSession, packet);
- }
-}
-
-/**
* Internal function called to destroy an endpoint. This is controlled by signaling.
*/
void SipSession::destroy()
commit 626ae7f220d8b0ad44820a5110eeceb61248d032
Author: Joshua Colp <jcolp at digium.com>
Date: Thu Apr 7 11:20:21 2011 -0300
Finish migration to new indicate support.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index b04d252..3b818f1 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -918,6 +918,8 @@ void PJSipSessionModule::invOnStateChanged(pjsip_inv_session *inv, pjsip_event *
}
std::vector<AsteriskSCF::SessionCommunications::V1::SessionListenerPrx> listeners = session->getListeners();
lg(Debug) << "Relating stopped state to " << listeners.size() << " listeners";
+ AsteriskSCF::SessionCommunications::V1::StoppedIndicationPtr stopped(new AsteriskSCF::SessionCommunications::V1::StoppedIndication());
+ stopped->response = response;
for (std::vector<AsteriskSCF::SessionCommunications::V1::SessionListenerPrx>::iterator listener =
listeners.begin();
listener != listeners.end();
@@ -925,7 +927,7 @@ void PJSipSessionModule::invOnStateChanged(pjsip_inv_session *inv, pjsip_event *
{
try
{
- (*listener)->stopped(session->getSessionProxy(), response);
+ (*listener)->indicated(session->getSessionProxy(), stopped);
}
catch (const Ice::Exception &ex)
{
commit ab478a5684fed6d71a1169104ff9067a240b1e81
Author: Joshua Colp <jcolp at digium.com>
Date: Thu Apr 7 10:37:38 2011 -0300
Use new method to send indications.
diff --git a/src/PJSipSessionModule.cpp b/src/PJSipSessionModule.cpp
index 58a30c5..b04d252 100644
--- a/src/PJSipSessionModule.cpp
+++ b/src/PJSipSessionModule.cpp
@@ -823,9 +823,9 @@ void PJSipSessionModule::handleInviteResponse(pjsip_inv_session *inv,
try
{
ListenerCallbackPtr cb(new ListenerCallback(RingingCallbackName));
- Callback_SessionListener_ringingPtr ringingCB =
- newCallback_SessionListener_ringing(cb, &ListenerCallback::failure);
- (*listener)->begin_ringing(session->getSessionProxy(), ringingCB);
+ Callback_SessionListener_indicatedPtr ringingCB =
+ newCallback_SessionListener_indicated(cb, &ListenerCallback::failure);
+ (*listener)->begin_indicated(session->getSessionProxy(), new RingingIndication(), ringingCB);
}
catch (const Ice::Exception &ex)
{
@@ -846,9 +846,11 @@ void PJSipSessionModule::handleInviteResponse(pjsip_inv_session *inv,
try
{
ListenerCallbackPtr cb(new ListenerCallback(ProgressingCallbackName));
- Callback_SessionListener_progressingPtr progressingCB =
- newCallback_SessionListener_progressing(cb, &ListenerCallback::failure);
- (*listener)->begin_progressing(session->getSessionProxy(), response, progressingCB);
+ Callback_SessionListener_indicatedPtr progressingCB =
+ newCallback_SessionListener_indicated(cb, &ListenerCallback::failure);
+ ProgressingIndicationPtr progressing(new ProgressingIndication());
+ progressing->response = response;
+ (*listener)->begin_indicated(session->getSessionProxy(), progressing, progressingCB);
}
catch (const Ice::Exception &ex)
{
@@ -869,9 +871,9 @@ void PJSipSessionModule::handleInviteResponse(pjsip_inv_session *inv,
try
{
ListenerCallbackPtr cb(new ListenerCallback(ConnectedCallbackName));
- Callback_SessionListener_connectedPtr connectedCB =
- newCallback_SessionListener_connected(cb, &ListenerCallback::failure);
- (*listener)->begin_connected(session->getSessionProxy(), connectedCB);
+ Callback_SessionListener_indicatedPtr connectedCB =
+ newCallback_SessionListener_indicated(cb, &ListenerCallback::failure);
+ (*listener)->begin_indicated(session->getSessionProxy(), new ConnectedIndication(), connectedCB);
}
catch (const Ice::Exception &ex)
{
commit dd6f1be516148b8f328adf3f174c43fe949a1b61
Author: Joshua Colp <jcolp at digium.com>
Date: Thu Apr 7 10:18:30 2011 -0300
Add new indicate support.
diff --git a/src/SipSession.cpp b/src/SipSession.cpp
index cd003e3..0354394 100644
--- a/src/SipSession.cpp
+++ b/src/SipSession.cpp
@@ -237,6 +237,62 @@ AsteriskSCF::SessionCommunications::V1::SessionInfoPtr SipSession::addListener(
}
/**
+ * An implementation of the indicate method as defined in SessionCommunications.ice
+ */
+void SipSession::indicate(const AsteriskSCF::SessionCommunications::V1::IndicationPtr& indication, const Ice::Current&)
+{
+ AsteriskSCF::SessionCommunications::V1::ConnectIndicationPtr connect;
+ AsteriskSCF::SessionCommunications::V1::FlashIndicationPtr flash;
+ AsteriskSCF::SessionCommunications::V1::HoldIndicationPtr hold;
+ AsteriskSCF::SessionCommunications::V1::ProgressIndicationPtr progress;
+ AsteriskSCF::SessionCommunications::V1::RingIndicationPtr ring;
+ AsteriskSCF::SessionCommunications::V1::UnholdIndicationPtr unhold;
+ pjsip_tx_data *packet = NULL;
+ pj_status_t status = -1;
+
+ if ((connect = AsteriskSCF::SessionCommunications::V1::ConnectIndicationPtr::dynamicCast(indication)))
+ {
+ pjmedia_sdp_session *sdp = createSDPOffer();
+ status = pjsip_inv_answer(mImplPriv->mInviteSession, 200, NULL, sdp, &packet);
+ }
+ else if ((flash = AsteriskSCF::SessionCommunications::V1::FlashIndicationPtr::dynamicCast(indication)))
+ {
+ // This is usually transported using INFO or RFC2833, so for now just pretend it does not exist
+ }
+ else if ((hold = AsteriskSCF::SessionCommunications::V1::HoldIndicationPtr::dynamicCast(indication)))
+ {
+ // TODO: Update SDP with sendonly attribute and no IP
+
+ // TODO: This is actually passing the hold through, we will need to support local generation
+
+ status = pjsip_inv_reinvite(mImplPriv->mInviteSession, NULL, NULL, &packet);
+ }
+ else if ((progress = AsteriskSCF::SessionCommunications::V1::ProgressIndicationPtr::dynamicCast(indication)))
+ {
+ pjmedia_sdp_session *sdp = createSDPOffer();
+ status = pjsip_inv_answer(mImplPriv->mInviteSession, 183, NULL, sdp, &packet);
+ }
+ else if ((ring = AsteriskSCF::SessionCommunications::V1::RingIndicationPtr::dynamicCast(indication)))
+ {
+ status = pjsip_inv_answer(mImplPriv->mInviteSession, 180, NULL, NULL, &packet);
+ }
+ else if ((unhold = AsteriskSCF::SessionCommunications::V1::UnholdIndicationPtr::dynamicCast(indication)))
+ {
+ // TODO: Update SDP with sendrecv and IP
+
+ // TODO: This is actually passing the unhold through, we will need to support local generation
+
+ status = pjsip_inv_reinvite(mImplPriv->mInviteSession, NULL, NULL, &packet);
+ }
+
+ // If the indication produced a packet send it out
+ if (status == PJ_SUCCESS)
+ {
+ pjsip_inv_send_msg(mImplPriv->mInviteSession, packet);
+ }
+}
+
+/**
* An implementation of the connect method as defined in SessionCommunications.ice which sends
* a 200 OK with SDP to the SIP endpoint.
*/
diff --git a/src/SipSession.h b/src/SipSession.h
index 9466267..3596260 100644
--- a/src/SipSession.h
+++ b/src/SipSession.h
@@ -77,6 +77,7 @@ public:
*/
AsteriskSCF::SessionCommunications::V1::SessionInfoPtr
addListener(const AsteriskSCF::SessionCommunications::V1::SessionListenerPrx&, const Ice::Current&);
+ void indicate(const AsteriskSCF::SessionCommunications::V1::IndicationPtr&, const Ice::Current&);
void connect(const Ice::Current&);
void flash(const Ice::Current&);
AsteriskSCF::SessionCommunications::V1::SessionEndpointPrx getEndpoint(const Ice::Current&);
commit 0024d93bcf841b13eec471b2d3f726cdbe686978
Merge: db6b640 827fc66
Author: Brent Eagles <beagles at digium.com>
Date: Fri Apr 1 13:20:31 2011 -0230
Merge branch 'code-conventions'
commit db6b6404ec286000fcb921edfe080fc6c2cc1c9d
Author: Brent Eagles <beagles at digium.com>
Date: Thu Mar 31 11:08:16 2011 -0230
Add unsliceable keyword to classes deriving from an unsliceable parent.
diff --git a/local-slice/SipStateReplicationIf.ice b/local-slice/SipStateReplicationIf.ice
index 80d9fae..c7d16d9 100644
--- a/local-slice/SipStateReplicationIf.ice
+++ b/local-slice/SipStateReplicationIf.ice
@@ -31,7 +31,7 @@ module V1
const string StateReplicatorComponentCategory = "SipStateReplicatorComponent";
const string StateReplicatorDiscoveryCategory = "SipStateReplicator";
- class SipStateReplicatorParams extends AsteriskSCF::Core::Discovery::V1::ServiceLocatorParams
+ unsliceable class SipStateReplicatorParams extends AsteriskSCF::Core::Discovery::V1::ServiceLocatorParams
{
string mName;
};
commit 148efc74ad128c054300d461fb29ae8e31392bed
Author: Joshua Colp <jcolp at digium.com>
Date: Tue Mar 22 09:14:59 2011 -0300
Now that pjsip has IPv6 TLS transport support uncomment support for it in our component.
diff --git a/src/PJSipManager.cpp b/src/PJSipManager.cpp
index e13e846..7571b80 100644
--- a/src/PJSipManager.cpp
+++ b/src/PJSipManager.cpp
@@ -189,12 +189,11 @@ pjsip_tpfactory *PJSipManager::createTLSTransport(std::string address, int port,
pjsip_tpfactory *tlsTransport = NULL;
-/*
if (pjsip_tls_transport_start(mEndpoint, tlsSettings, &tlsAddr, NULL, 2, &tlsTransport) != PJ_SUCCESS)
{
lg(Error) << "Failed to create TLS transport.";
}
-*/
+
return tlsTransport;
}
commit dc0dbb97620670914e030aab47cf1e0f90915ef1
Author: Joshua Colp <jcolp at digium.com>
Date: Sun Mar 20 11:30:25 2011 -0300
Incorporate code review feedback.
diff --git a/config/SipConfigurator.py b/config/SipConfigurator.py
index 018bdc0..d04f2ac 100755
--- a/config/SipConfigurator.py
+++ b/config/SipConfigurator.py
... 5443 lines suppressed ...
--
asterisk-scf/integration/sip.git
More information about the asterisk-scf-commits
mailing list