[Opalvoip-svn] SF.net SVN: opalvoip:[28685] opal/branches/v3_12
Brought to you by:
csoutheren,
rjongbloed
From: <rjo...@us...> - 2012-12-18 06:17:30
|
Revision: 28685 http://opalvoip.svn.sourceforge.net/opalvoip/?rev=28685&view=rev Author: rjongbloed Date: 2012-12-18 06:17:23 +0000 (Tue, 18 Dec 2012) Log Message: ----------- Fixed remote transport address used for detecting existing transport link to re-use when have a dialog containing proxy router header. Modified Paths: -------------- opal/branches/v3_12/include/sip/handlers.h opal/branches/v3_12/include/sip/sipcon.h opal/branches/v3_12/include/sip/sippdu.h opal/branches/v3_12/src/sip/handlers.cxx opal/branches/v3_12/src/sip/sipcon.cxx opal/branches/v3_12/src/sip/sipep.cxx opal/branches/v3_12/src/sip/sippdu.cxx Modified: opal/branches/v3_12/include/sip/handlers.h =================================================================== --- opal/branches/v3_12/include/sip/handlers.h 2012-12-18 05:41:26 UTC (rev 28684) +++ opal/branches/v3_12/include/sip/handlers.h 2012-12-18 06:17:23 UTC (rev 28685) @@ -233,6 +233,7 @@ const SIPDialogContext & dialog ); + virtual OpalTransportAddress GetRemoteTransportAddress(PINDEX dnsEntry) const; virtual SIPURL GetTargetURI() const; virtual bool IsDuplicateCSeq(unsigned sequenceNumber); Modified: opal/branches/v3_12/include/sip/sipcon.h =================================================================== --- opal/branches/v3_12/include/sip/sipcon.h 2012-12-18 05:41:26 UTC (rev 28684) +++ opal/branches/v3_12/include/sip/sipcon.h 2012-12-18 06:17:23 UTC (rev 28685) @@ -647,8 +647,9 @@ ); // Overrides from SIPTransactionOwner - virtual SIPURL GetTargetURI() const { return m_dialog.GetRequestURI(); } - virtual PString GetAuthID() const { return m_dialog.GetLocalURI().GetUserName(); } + virtual OpalTransportAddress GetRemoteTransportAddress(PINDEX dnsEntry) const; + virtual SIPURL GetTargetURI() const; + virtual PString GetAuthID() const; virtual void OnStartTransaction(SIPTransaction & transaction); Modified: opal/branches/v3_12/include/sip/sippdu.h =================================================================== --- opal/branches/v3_12/include/sip/sippdu.h 2012-12-18 05:41:26 UTC (rev 28684) +++ opal/branches/v3_12/include/sip/sippdu.h 2012-12-18 06:17:23 UTC (rev 28685) @@ -955,6 +955,7 @@ ); virtual ~SIPTransactionOwner(); + virtual OpalTransportAddress GetRemoteTransportAddress(PINDEX dnsEntry) const; virtual SIPURL GetTargetURI() const = 0; virtual PString GetAuthID() const = 0; virtual PString GetPassword() const { return PString::Empty(); } Modified: opal/branches/v3_12/src/sip/handlers.cxx =================================================================== --- opal/branches/v3_12/src/sip/handlers.cxx 2012-12-18 05:41:26 UTC (rev 28684) +++ opal/branches/v3_12/src/sip/handlers.cxx 2012-12-18 06:17:23 UTC (rev 28685) @@ -836,6 +836,12 @@ } +OpalTransportAddress SIPHandlerWithDialog::GetRemoteTransportAddress(PINDEX dnsEntry) const +{ + return m_dialog.GetRemoteTransportAddress(dnsEntry); +} + + SIPURL SIPHandlerWithDialog::GetTargetURI() const { return m_dialog.GetRequestURI(); Modified: opal/branches/v3_12/src/sip/sipcon.cxx =================================================================== --- opal/branches/v3_12/src/sip/sipcon.cxx 2012-12-18 05:41:26 UTC (rev 28684) +++ opal/branches/v3_12/src/sip/sipcon.cxx 2012-12-18 06:17:23 UTC (rev 28685) @@ -3072,6 +3072,24 @@ } +OpalTransportAddress SIPConnection::GetRemoteTransportAddress(PINDEX dnsEntry) const +{ + return m_dialog.GetRemoteTransportAddress(dnsEntry); +} + + +SIPURL SIPConnection::GetTargetURI() const +{ + return m_dialog.GetRequestURI(); +} + + +PString SIPConnection::GetAuthID() const +{ + return m_dialog.GetLocalURI().GetUserName(); +} + + void SIPConnection::OnStartTransaction(SIPTransaction & transaction) { GetEndPoint().OnStartTransaction(*this, transaction); Modified: opal/branches/v3_12/src/sip/sipep.cxx =================================================================== --- opal/branches/v3_12/src/sip/sipep.cxx 2012-12-18 05:41:26 UTC (rev 28684) +++ opal/branches/v3_12/src/sip/sipep.cxx 2012-12-18 06:17:23 UTC (rev 28685) @@ -236,30 +236,19 @@ SIP_PDU::StatusCodes & reason) { SIPURL targetURI = transactor.GetTargetURI(); - PString domain = targetURI.GetHostPort(); - PString localInterface = transactor.GetInterface(); - PINDEX dnsEntry = transactor.GetDNSEntry(); - OpalTransportAddress remoteAddress; - SIPURL proxy = transactor.GetProxy(); - if (!proxy.IsEmpty()) - remoteAddress = proxy.GetTransportAddress(dnsEntry); - else if (!m_proxy.IsEmpty()) - remoteAddress = m_proxy.GetTransportAddress(dnsEntry); - else { - remoteAddress = targetURI.GetTransportAddress(dnsEntry); - if (remoteAddress.IsEmpty()) { - for (PSafePtr<SIPHandler> handler = activeSIPHandlers.GetFirstHandler(); ; ++handler) { - if (handler == NULL) { - reason = SIP_PDU::Local_CannotMapScheme; - PTRACE(1, "SIP\tCannot use " << targetURI.GetScheme() << " URI without phone-context or existing registration."); - return NULL; - } - if (handler->GetMethod() == SIP_PDU::Method_REGISTER) { - remoteAddress = handler->GetTargetURI().GetTransportAddress(); - break; - } + OpalTransportAddress remoteAddress = transactor.GetRemoteTransportAddress(transactor.GetDNSEntry()); + if (remoteAddress.IsEmpty()) { + for (PSafePtr<SIPHandler> handler = activeSIPHandlers.GetFirstHandler(); ; ++handler) { + if (handler == NULL) { + reason = SIP_PDU::Local_CannotMapScheme; + PTRACE(1, "SIP\tCannot use " << targetURI.GetScheme() << " URI without phone-context or existing registration."); + return NULL; } + if (handler->GetMethod() == SIP_PDU::Method_REGISTER) { + remoteAddress = handler->GetTargetURI().GetTransportAddress(); + break; + } } } @@ -273,11 +262,13 @@ if (transport == NULL) { // No link, so need to create one OpalTransportAddress localAddress; + PString localInterface = transactor.GetInterface(); if (!localInterface.IsEmpty()) { if (localInterface != "*") // Nasty kludge to get around infinite recursion in REGISTER localAddress = OpalTransportAddress(localInterface, 0, remoteAddress.GetProtoPrefix()); } else { + PString domain = targetURI.GetHostPort(); PSafePtr<SIPHandler> handler = activeSIPHandlers.FindSIPHandlerByDomain(domain, SIP_PDU::Method_REGISTER, PSafeReadOnly); if (handler != NULL) { localAddress = handler->GetInterface(); @@ -333,7 +324,7 @@ return NULL; } - if (!transport->IsAuthenticated(domain)) { + if (!transport->IsAuthenticated(targetURI.GetHostName())) { PTRACE(1, "SIP\tCould not connect to " << remoteAddress << " - " << transport->GetErrorText()); reason = SIP_PDU::Local_NotAuthenticated; transport->CloseWait(); Modified: opal/branches/v3_12/src/sip/sippdu.cxx =================================================================== --- opal/branches/v3_12/src/sip/sippdu.cxx 2012-12-18 05:41:26 UTC (rev 28684) +++ opal/branches/v3_12/src/sip/sippdu.cxx 2012-12-18 06:17:23 UTC (rev 28685) @@ -2680,6 +2680,19 @@ } +OpalTransportAddress SIPTransactionOwner::GetRemoteTransportAddress(PINDEX dnsEntry) const +{ + SIPURL proxy = GetProxy(); + if (!proxy.IsEmpty()) + return proxy.GetTransportAddress(dnsEntry); + + if (!m_proxy.IsEmpty()) + return m_proxy.GetTransportAddress(dnsEntry); + + return GetTargetURI().GetTransportAddress(dnsEntry); +} + + unsigned SIPTransactionOwner::GetAllowedMethods() const { return m_endpoint.GetAllowedMethods(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |