rpms/opal/devel opal-3.6.2.patch,NONE,1.1 opal.spec,1.47,1.48

Peter Robinson pbrobinson at fedoraproject.org
Sun Apr 26 00:01:02 UTC 2009


Author: pbrobinson

Update of /cvs/pkgs/rpms/opal/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv5654

Modified Files:
	opal.spec 
Added Files:
	opal-3.6.2.patch 
Log Message:
- pull in some upstream fixes for possible crashes

opal-3.6.2.patch:

--- NEW FILE opal-3.6.2.patch ---
--- opal/src/codec/rfc2833.cxx	2009/03/18 22:44:26	22219
+++ opal/src/codec/rfc2833.cxx	2009/03/18 22:51:48	22220
@@ -156,6 +156,12 @@
     }
   }
 
+  // if transmittter is ever in this state, then stop the duration timer
+  if (m_payloadType == RTP_DataFrame::IllegalPayloadType) {
+    PTRACE(2, "RFC2833\tNo payload type, cannot send packet.");
+    return false;
+  }
+
   // convert tone to correct code
   PINDEX code = ASCIIToRFC2833(tone, m_txCapabilitySet[NSECodeBase]);
 
--- opal/src/sip/sipcon.cxx	2009/03/19 00:07:23	22223
+++ opal/src/sip/sipcon.cxx	2009/03/19 00:07:41	22224
@@ -146,6 +146,7 @@
   { SIP_PDU::Failure_RequestEntityTooLarge      , OpalConnection::EndedByQ931Cause         , 127 }, // Interworking (+)
   { SIP_PDU::Failure_RequestURITooLong          , OpalConnection::EndedByQ931Cause         , 127 }, // Interworking (+)
   { SIP_PDU::Failure_UnsupportedMediaType       , OpalConnection::EndedByCapabilityExchange,  79 }, // Service/option not implemented (+)
+  { SIP_PDU::Failure_NotAcceptableHere          , OpalConnection::EndedByCapabilityExchange,  79 }, // Service/option not implemented (+)
   { SIP_PDU::Failure_UnsupportedURIScheme       , OpalConnection::EndedByQ931Cause         , 127 }, // Interworking (+)
   { SIP_PDU::Failure_BadExtension               , OpalConnection::EndedByQ931Cause         , 127 }, // Interworking (+)
   { SIP_PDU::Failure_ExtensionRequired          , OpalConnection::EndedByQ931Cause         , 127 }, // Interworking (+)
--- opal/src/opal/call.cxx	2009/03/19 01:36:24	22227
+++ opal/src/opal/call.cxx	2009/03/19 03:16:14	22228
@@ -353,6 +353,7 @@
   PSafePtr<OpalConnection> otherConnection;
   while (EnumerateConnections(otherConnection, PSafeReadOnly, includeSpecifiedConnection ? NULL : &connection)) {
     OpalMediaFormatList possibleFormats = OpalTranscoder::GetPossibleFormats(otherConnection->GetMediaFormats());
+    otherConnection->AdjustMediaFormats(possibleFormats);
     if (first) {
       commonFormats = possibleFormats;
       first = PFalse;
--- opal/src/sip/sippdu.cxx	2009/03/24 01:30:32	22259
+++ opal/src/sip/sippdu.cxx	2009/03/24 02:19:47	22260
@@ -2706,13 +2706,11 @@
 {
   PSafeLockReadWrite lock(*this);
 
-  if (!lock.IsLocked() || (state != Trying && state != Cancelling))
+  if (!lock.IsLocked() || state > Cancelling || (state == Proceeding && method == Method_INVITE))
     return;
 
   retry++;
 
-  PTRACE(3, "SIP\tTransaction " << mime.GetCSeq() << " timeout, making retry " << retry);
-
   if (retry >= endpoint.GetMaxRetries()) {
     SetTerminated(Terminated_RetriesExceeded);
     return;
@@ -2727,11 +2725,16 @@
       return;
   }
 
-  PTimeInterval timeout = retryTimeoutMin*(1<<retry);
-  if (timeout > retryTimeoutMax)
+  if (state > Trying)
     retryTimer = retryTimeoutMax;
-  else
+  else {
+    PTimeInterval timeout = retryTimeoutMin*(1<<retry);
+    if (timeout > retryTimeoutMax)
+      timeout = retryTimeoutMax;
     retryTimer = timeout;
+  }
+
+  PTRACE(3, "SIP\tTransaction " << mime.GetCSeq() << " timeout, making retry " << retry << ", timeout " << retryTimer);
 }
 
 
--- opal/plugins/video/common/dyna.cxx	2009/03/24 04:35:50	22264
+++ opal/plugins/video/common/dyna.cxx	2009/03/24 04:36:35	22265
@@ -59,17 +59,17 @@
 bool DynaLink::InternalOpen(const char * dir, const char *name)
 {
   char path[1024];
-  memset(path, 0, sizeof(path));
+  path[0] = '\0';
 
   // Copy the directory to "path" and add a separator if necessary
-  if (strlen(path) > 0) {
+  if (dir != NULL && *dir != '\0') {
     strcpy(path, dir);
     if (path[strlen(path)-1] != DIR_SEPARATOR[0]) 
-    strcat(path, DIR_SEPARATOR);
+      strcat(path, DIR_SEPARATOR);
   }
   strcat(path, name);
 
-  if (strlen(path) == 0) {
+  if (path[0] == '\0') {
     TRACE(1, _codecString << "\tDYNA\tdir '" << (dir != NULL ? dir : "(NULL)") << "', name '" << (name != NULL ? name : "(NULL)") << "' resulted in empty path");
     return false;
   }
--- opal/src/rtp/jitter.cxx	2009/03/25 00:52:00	22271
+++ opal/src/rtp/jitter.cxx	2009/03/25 00:58:03	22272
@@ -244,6 +244,7 @@
 
 void OpalJitterBuffer::DeInit(Entry * & /*currentReadFrame*/, PBoolean & /*markerWarning*/)
 {
+  bufferMutex.Signal();
 }
 
 PBoolean OpalJitterBuffer::PreRead(OpalJitterBuffer::Entry * & currentReadFrame, PBoolean & /*markerWarning*/)
--- opal/src/sip/handlers.cxx	2009/03/10 04:27:59	22186
+++ opal/src/sip/handlers.cxx	2009/04/14 03:00:56	22421
@@ -252,7 +252,6 @@
 PBoolean SIPHandler::SendRequest(SIPHandler::State newState)
 {
   expireTimer.Stop(false); // Stop automatic retry
-  bool retryLater = false;
 
   if (expire == 0)
     newState = Unsubscribing;
@@ -275,8 +274,6 @@
     case Subscribing :
     case Refreshing :
     case Restoring :
-      if (GetTransport() == NULL) 
-        retryLater = true;
       break;
 
     default :
@@ -286,7 +283,7 @@
 
   SetState(newState);
 
-  if (!retryLater) {
+  if (GetTransport() != NULL) {
     // Restoring or first time, try every interface
     if (newState == Restoring || m_transport->GetInterface().IsEmpty()) {
       PWaitAndSignal mutex(m_transport->GetWriteMutex());
@@ -298,19 +295,21 @@
       if (WriteSIPHandler(*m_transport))
         return true;
     }
+
     OnFailed(SIP_PDU::Local_TransportError);
-    retryLater = true;
   }
 
-  if (retryLater) {
-    PTRACE(4, "SIP\tRetrying " << GetMethod() << " in " << offlineExpire << " seconds.");
-    OnFailed(SIP_PDU::Local_BadTransportAddress);
-    expireTimer.SetInterval(0, offlineExpire); // Keep trying to get it back
-    SetState(Unavailable);
+  if (newState == Unsubscribing) {
+    // Transport level error, probably never going to get the unsubscribe through
+    SetState(Unsubscribed);
     return true;
   }
 
-  return false;
+  PTRACE(4, "SIP\tRetrying " << GetMethod() << " in " << offlineExpire << " seconds.");
+  OnFailed(SIP_PDU::Local_BadTransportAddress);
+  expireTimer.SetInterval(0, offlineExpire); // Keep trying to get it back
+  SetState(Unavailable);
+  return true;
 }
 
 
--- opal/src/sip/handlers.cxx	2009/04/15 02:31:56	22427
+++ opal/src/sip/handlers.cxx	2009/04/15 02:34:55	22428
@@ -114,12 +114,21 @@
     if (remote.IsEmpty())
       m_remoteAddress = m_addressOfRecord;
     else if (remote.Find('@') != P_MAX_INDEX)
-      m_remoteAddress = remote;
-    else if (m_addressOfRecord.GetHostAddress().IsEquivalent(remote))
-      m_remoteAddress = m_addressOfRecord;
+      m_remoteAddress = remote; // For third party registrations
     else {
-      m_remoteAddress = m_proxy = remote;
-      m_remoteAddress.SetUserName(m_addressOfRecord.GetUserName());
+      SIPURL remoteURL = remote;
+      if (m_addressOfRecord.GetHostAddress().IsEquivalent(remoteURL.GetHostAddress()))
+        m_remoteAddress = m_addressOfRecord;
+      else {
+        /* Note this sets the proxy field because the user has givena full AOR
+           with a domain for "target" and then specified a specific host name
+           which as far as we are concered is the host to talk to. Setting the
+           proxy will prevent SRV lookups or other things that might stop uis
+           from going to that very specific host.
+         */
+        m_remoteAddress = m_proxy = remoteURL;
+        m_remoteAddress.SetUserName(m_addressOfRecord.GetUserName());
+      }
     }
   }
 
--- opal/src/sip/sipep.cxx.orig	2009-04-26 00:20:26.000000000 +0100
+++ opal/src/sip/sipep.cxx	2009-04-26 00:33:00.000000000 +0100
@@ -523,8 +523,17 @@
       break;
   }
 
-  if (hasFromConnection && hasToConnection)
-    token = pdu->GetMethod() != SIP_PDU::NumMethods ? fromToken : toToken;
+  if (hasFromConnection && hasToConnection) {
+    switch (pdu->GetMethod()) {
+      case SIP_PDU::Method_ACK :
+      case SIP_PDU::NumMethods :
+        token = toToken;
+        break;
+
+      default :
+        token = fromToken;
+    }
+  }
   else if (hasFromConnection)
     token = fromToken;
   else if (hasToConnection)


Index: opal.spec
===================================================================
RCS file: /cvs/pkgs/rpms/opal/devel/opal.spec,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- opal.spec	21 Apr 2009 18:03:43 -0000	1.47
+++ opal.spec	26 Apr 2009 00:00:31 -0000	1.48
@@ -1,15 +1,16 @@
 Name:		opal
 Summary:	Open Phone Abstraction Library
 Version:	3.6.1
-Release:	2%{?dist}
+Release:	3%{?dist}
 URL:		http://www.opalvoip.org/
 # We cannot use unmodified upstream source code because it contains the 
 # non-free iLBC codec.
 # rm -rf plugins/audio/iLBC/
 # rm -rf src/codec/iLBCmf.cxx
-# Source0:	ftp://ftp.gnome.org/pub/gnome/sources/%{name}/3.6/%{name}-%{version}.tar.bz2
+#Source0:	ftp://ftp.gnome.org/pub/gnome/sources/%{name}/3.6/%{name}-%{version}.tar.bz2
 Source0:	%{name}-%{version}-noilbc.tar.bz2
 Patch0:		opal-3.6.1-noilbc.patch
+Patch1:		opal-3.6.2.patch
 License:	MPLv1.0
 Group:		System Environment/Libraries
 BuildRequires:	ptlib-devel = 2.6.1
@@ -41,6 +42,7 @@
 %prep
 %setup -q 
 %patch0 -p1 -b .noilbc
+%patch1 -p1 -b .3.6.2
 
 %build
 %configure --prefix=/usr
@@ -75,6 +77,9 @@
 %{_libdir}/pkgconfig/opal.pc
 
 %changelog
+* Sun Apr 26 2009 Peter Robinson <pbrobinson at gmail.com> - 3.6.1-3
+- pull in some upstream fixes for possible crashes
+
 * Tue Apr 21 2009 Tom "spot" Callaway <tcallawa at redhat.com> - 3.6.1-2
 - pull out ilbc codec due to legal issues
 




More information about the fedora-extras-commits mailing list