[Opalvoip-svn] SF.net SVN: opalvoip:[29598] opal/branches/v3_10
Brought to you by:
csoutheren,
rjongbloed
From: <ed...@us...> - 2013-04-29 17:22:52
|
Revision: 29598 http://sourceforge.net/p/opalvoip/code/29598 Author: ededu Date: 2013-04-29 17:22:45 +0000 (Mon, 29 Apr 2013) Log Message: ----------- Revert back commit 28967, it fixes registration for some users with symmetric nat Modified Paths: -------------- opal/branches/v3_10/include/sip/sippdu.h opal/branches/v3_10/src/opal/transports.cxx opal/branches/v3_10/src/sip/handlers.cxx opal/branches/v3_10/src/sip/sippdu.cxx Modified: opal/branches/v3_10/include/sip/sippdu.h =================================================================== --- opal/branches/v3_10/include/sip/sippdu.h 2013-04-29 14:59:31 UTC (rev 29597) +++ opal/branches/v3_10/include/sip/sippdu.h 2013-04-29 17:22:45 UTC (rev 29598) @@ -647,7 +647,8 @@ PString CreateVia( SIPEndPoint & endpoint, - const OpalTransport & transport + const OpalTransport & transport, + SIPConnection * connection = NULL ); /**Read PDU from the specified transport. Modified: opal/branches/v3_10/src/opal/transports.cxx =================================================================== --- opal/branches/v3_10/src/opal/transports.cxx 2013-04-29 14:59:31 UTC (rev 29597) +++ opal/branches/v3_10/src/opal/transports.cxx 2013-04-29 17:22:45 UTC (rev 29598) @@ -1480,7 +1480,6 @@ } } - socket->SetInterface(PString::Empty()); return ok; } Modified: opal/branches/v3_10/src/sip/handlers.cxx =================================================================== --- opal/branches/v3_10/src/sip/handlers.cxx 2013-04-29 14:59:31 UTC (rev 29597) +++ opal/branches/v3_10/src/sip/handlers.cxx 2013-04-29 17:22:45 UTC (rev 29598) @@ -419,10 +419,6 @@ case SIP_PDU::Failure_ProxyAuthenticationRequired : case SIP_PDU::Failure_IntervalTooBrief : case SIP_PDU::Failure_TemporarilyUnavailable: - // End connect mode on the transport - PString iface = transaction.GetInterface(); - PTRACE(4, "SIP\tFinalising handlers interface \"" << iface << '"'); - m_transport->SetInterface(iface); // And kill all the rest PSafePtr<SIPTransaction> transToGo; @@ -430,6 +426,9 @@ m_transactions.Remove(transToGo); transToGo->Abort(); } + + // Finally end connect mode on the transport + m_transport->SetInterface(transaction.GetInterface()); } switch (response.GetStatusCode()) { Modified: opal/branches/v3_10/src/sip/sippdu.cxx =================================================================== --- opal/branches/v3_10/src/sip/sippdu.cxx 2013-04-29 14:59:31 UTC (rev 29597) +++ opal/branches/v3_10/src/sip/sippdu.cxx 2013-04-29 17:22:45 UTC (rev 29598) @@ -1804,38 +1804,36 @@ } -PString SIP_PDU::CreateVia(SIPEndPoint & endpoint, const OpalTransport & transport) +PString SIP_PDU::CreateVia(SIPEndPoint & endpoint, const OpalTransport & transport, SIPConnection * connection) { - // construct Via - OpalTransportAddress via; + PString localPartyName; - if (transport.IsOpen()) - via = transport.GetLocalAddress(); - else { - PTRACE(3, "SIP\tCannot use transport for via, picking first compatible listener"); - const OpalListenerList & listeners = endpoint.GetListeners(); - for (OpalListenerList::const_iterator listener = listeners.begin(); listener != listeners.end(); ++listener) { - OpalTransportAddress binding = listener->GetLocalAddress(); - if (transport.IsCompatibleTransport(binding)) { - via = binding; - break; - } - } + if (connection != NULL) { + localPartyName = connection->GetLocalPartyName(); + + PINDEX pos = localPartyName.Find('@'); + if (pos != P_MAX_INDEX) + localPartyName = localPartyName.Left(pos); + + pos = localPartyName.Find(' '); + if (pos != P_MAX_INDEX) + localPartyName.Replace(" ", "_", true); } + OpalTransportAddress via = endpoint.GetLocalURL(transport, localPartyName).GetHostAddress(); + + // construct Via: PINDEX dollar = via.Find('$'); PStringStream str; str << "SIP/" << m_versionMajor << '.' << m_versionMinor << '/' << via.Left(dollar).ToUpper() << ' '; - PIPSocket::Address ip; WORD port = 5060; if (via.GetIpAndPort(ip, port)) str << ip.AsString(true) << ':' << port; else str << via.Mid(dollar+1); - str << ";branch=z9hG4bK" << OpalGloballyUniqueID() << ";rport"; return str; } @@ -2753,10 +2751,8 @@ m_state = Trying; m_retry = 0; - if (m_localInterface.IsEmpty()) { + if (m_localInterface.IsEmpty()) m_localInterface = m_transport.GetInterface(); - PTRACE(4, "SIP\tTransaction remembering interface \"" << m_localInterface << '"'); - } /* Get the address to which the request PDU should be sent, according to the RFC, for a request in a dialog. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |