diff --git a/README.md b/README.md index d8b90d2..c338153 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # libopal +This is a Open Source class library for the development of applications that wish to use SIP / H.323 protocols for multi-media communications over packet based networks. + diff --git a/libopal-3.10.2-ffmpeg-1.patch b/libopal-3.10.2-ffmpeg-1.patch new file mode 100644 index 0000000..1597216 --- /dev/null +++ b/libopal-3.10.2-ffmpeg-1.patch @@ -0,0 +1,29 @@ +Submitted By: Ken Moffat +Date: 2012-01-17 +Initial Package Version: 3.10.2 +Upstream Status: Not applied, supposedly fixed by a change to configure. +Origin: http://sourceforge.net/tracker/index.php?func=detail&aid=3369480&group_id=204472&atid=989750 +Description: Fixes compiling with recent releases of ffmpeg. + + From sf user gtrentalancia. + +--- opal-3.10.2.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2011-08-23 00:46:12.000000000 +0100 ++++ opal-3.10.2/plugins/video/MPEG4-ffmpeg/mpeg4.cxx 2012-01-17 23:23:06.000000000 +0000 +@@ -806,7 +806,17 @@ + } + else // No IFrame requested, let avcodec decide what to do + { ++ #if (LIBAVUTIL_VERSION_MAJOR < 51 || (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR == 0)) + m_avpicture->pict_type = 0; ++ #elif (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR > 0 && LIBAVUTIL_VERSION_MINOR <= 10) ++ // in ffmpeg git commit bebe72f4a05d338e04ae9ca1e9c6b72749b488aa the AVPictureType ++ // has been introduced along with minor version bump, so cast accordingly ++ m_avpicture->pict_type = (AVPictureType) 0; ++ #elif (LIBAVUTIL_VERSION_MAJOR > 51 || (LIBAVUTIL_VERSION_MAJOR == 51 && LIBAVUTIL_VERSION_MINOR > 10)) ++ // a new enum has been added for ffmpeg > 0.8 in git commit 512933671409f9f88cc9fdfc8f29525d32240bab ++ // with subsequent minor version bump in git commit 5a931a158fbe2ea413dcf28c43c4d6bace3514a1 ++ m_avpicture->pict_type = AV_PICTURE_TYPE_NONE; ++ #endif + } + + // Encode a frame diff --git a/libopal-3.6.1-gcc44.patch b/libopal-3.6.1-gcc44.patch new file mode 100644 index 0000000..0f880cf --- /dev/null +++ b/libopal-3.6.1-gcc44.patch @@ -0,0 +1,11 @@ +diff -Nru opal-3.6.1.orig/plugins/video/H.264/gpl/enc-ctx.cxx opal-3.6.1/plugins/video/H.264/gpl/enc-ctx.cxx +--- opal-3.6.1.orig/plugins/video/H.264/gpl/enc-ctx.cxx 2009-03-18 04:46:58.000000000 +0100 ++++ opal-3.6.1/plugins/video/H.264/gpl/enc-ctx.cxx 2009-05-16 17:11:33.000000000 +0200 +@@ -25,6 +25,7 @@ + #include "trace.h" + #include "rtpframe.h" + ++#include + #include + #include + #if defined(_WIN32) || defined(_WIN32_WCE) diff --git a/libopal-3.6.1-noilbc.patch b/libopal-3.6.1-noilbc.patch new file mode 100644 index 0000000..ff7edea --- /dev/null +++ b/libopal-3.6.1-noilbc.patch @@ -0,0 +1,11 @@ +diff -up opal-3.6.1/Makefile.in.BAD opal-3.6.1/Makefile.in +--- opal-3.6.1/Makefile.in.BAD 2009-04-21 13:47:04.000000000 -0400 ++++ opal-3.6.1/Makefile.in 2009-04-21 13:47:08.000000000 -0400 +@@ -361,7 +361,6 @@ SOURCES += $(OPAL_SRCDIR)/codec/g711code + $(OPAL_SRCDIR)/codec/g729mf.cxx \ + $(OPAL_SRCDIR)/codec/gsm0610mf.cxx \ + $(OPAL_SRCDIR)/codec/gsmamrmf.cxx \ +- $(OPAL_SRCDIR)/codec/iLBCmf.cxx \ + $(OPAL_SRCDIR)/codec/t38mf.cxx \ + $(OPAL_SRCDIR)/codec/rfc2833.cxx \ + $(OPAL_SRCDIR)/codec/opalwavfile.cxx \ diff --git a/libopal-3.6.2.patch b/libopal-3.6.2.patch new file mode 100644 index 0000000..49080b4 --- /dev/null +++ b/libopal-3.6.2.patch @@ -0,0 +1,214 @@ +--- 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 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< retryTimeoutMax) ++ if (state > Trying) + retryTimer = retryTimeoutMax; +- else ++ else { ++ PTimeInterval timeout = retryTimeoutMin*(1< 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) diff --git a/libopal.spec b/libopal.spec new file mode 100644 index 0000000..7658051 --- /dev/null +++ b/libopal.spec @@ -0,0 +1,178 @@ +#%define ekiga_ver 3.0.1 +%define majver %(echo %version | cut -d. -f 1-2) +Name: libopal +Version: 3.10.10 +Release: 1mamba +Summary: Opal Library +Group: System/Libraries +Vendor: openmamba +Distribution: openmamba +Packager: Silvan Calarco +URL: http://www.ekiga.org +Source: http://ftp.acc.umu.se/pub/GNOME/sources/opal/%{majver}/opal-%{version}.tar.xz +#http://www.ekiga.org/admin/downloads/latest/sources/ekiga_%{ekiga_ver}/opal-%{version}.tar.gz +Patch0: %{name}-3.6.1-noilbc.patch +Patch1: %{name}-3.6.2.patch +Patch2: %{name}-3.6.1-gcc44.patch +Patch3: %{name}-3.10.2-ffmpeg-1.patch +License: MPL 1.0 +## AUTOBUILDREQ-BEGIN +BuildRequires: glibc-devel +BuildRequires: libexpat-devel +BuildRequires: libgcc +BuildRequires: libodbc-devel +BuildRequires: libogg-devel +BuildRequires: libopenldap-devel +BuildRequires: libopenssl-devel +BuildRequires: libpt-devel >= 2.10.2 +BuildRequires: libsasl-devel +BuildRequires: libSDL-devel +BuildRequires: libspeexdsp-devel +BuildRequires: libstdc++6-devel +BuildRequires: libtheora-devel +BuildRequires: libx264-devel +## AUTOBUILDREQ-END +BuildRequires: libspeex-devel +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +%description +This is a Open Source class library for the development of applications that wish to use SIP / H.323 protocols for multi-media communications over packet based networks. + +%package devel +Group: Development/Libraries +Summary: Static libraries and headers for %{name} +Requires: %{name} = %{?epoch:%epoch:}%{version} + +%description devel +This is a Open Source class library for the development of applications that wish to use SIP / H.323 protocols for multi-media communications over packet based networks. +This package contains static libraries and header files need for development. + +%prep +%setup -q -n opal-%{version} +# non-free iLBC codec. +rm -rf plugins/audio/iLBC/ +rm -rf src/codec/iLBCmf.cxx +%patch0 -p1 -b .noilbc +#%patch1 -p1 -b .3.6.2 +#%patch2 -p1 +#%patch3 -p1 + +%build +# FIXME: "--enable-localspeex" has been enabled to bypass the error +# "checking Speex versions... Died at t.pl line 16." +%configure --enable-localspeex --enable-h263avcodec +%make -j1 SYSLIBS="-L/usr/share/pwlib/lib -lpt" + +%install +[ "%{buildroot}" != / ] && rm -rf %{buildroot} +%makeinstall + +rm -f %{buildroot}%{_datadir}/opal/opal_inc.mak +#rm -f %{buildroot}%{_libdir}/libopal_s.a + +%clean +[ "%{buildroot}" != / ] && rm -rf %{buildroot} + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root) +%{_libdir}/libopal.so.* +%dir %{_libdir}/opal-%{version} +%dir %{_libdir}/opal-%{version}/codecs +%dir %{_libdir}/opal-%{version}/codecs/audio +%{_libdir}/opal-%{version}/codecs/audio/*_ptplugin.so +%dir %{_libdir}/opal-%{version}/codecs/video +%{_libdir}/opal-%{version}/codecs/video/h264_video_pwplugin_helper +%{_libdir}/opal-%{version}/codecs/video/*_ptplugin.so + +%files devel +%defattr(-,root,root) +%{_libdir}/libopal_s.a +%dir %{_includedir}/opal +%{_includedir}/opal/* +%{_libdir}/libopal.so +%{_libdir}/pkgconfig/opal.pc + +%changelog +* Sun Feb 24 2013 Automatic Build System 3.10.10-1mamba +- automatic version update by autodist + +* Mon Dec 03 2012 Automatic Build System 3.10.9-1mamba +- automatic version update by autodist + +* Fri Oct 19 2012 Automatic Build System 3.10.7-1mamba +- automatic version update by autodist + +* Fri Apr 27 2012 Silvan Calarco 3.10.2-1mamba +- update to 3.10.2 + +* Fri Apr 27 2012 Silvan Calarco 3.6.8-2mamba +- rebuilt with libpt 2.10.2 + +* Wed Jun 02 2010 Automatic Build System 3.6.8-1mamba +- automatic update to 3.6.8 by autodist + +* Mon Mar 08 2010 Automatic Build System 3.6.6-5mamba +- automatic rebuild by autodist + +* Sat Oct 31 2009 Automatic Build System 3.6.6-4mamba +- automatic rebuild by autodist + +* Thu Oct 15 2009 Automatic Build System 3.6.6-3mamba +- automatic rebuild by autodist + +* Tue Oct 13 2009 Automatic Build System 3.6.6-2mamba +- automatic rebuild by autodist + +* Fri Oct 02 2009 Automatic Build System 3.6.6-1mamba +- automatic update by autodist + +* Wed Aug 19 2009 Automatic Build System 3.6.4-4mamba +- automatic rebuild by autodist + +* Wed Aug 12 2009 Automatic Build System 3.6.4-3mamba +- automatic rebuild by autodist + +* Fri Jul 10 2009 Automatic Build System 3.6.4-2mamba +- automatic rebuild by autodist + +* Thu Jul 09 2009 Automatic Build System 3.6.4-1mamba +- automatic update by autodist + +* Thu Jun 04 2009 Automatic Build System 3.6.2-1mamba +- automatic update by autodist + +* Sat May 16 2009 Silvan Calarco 3.6.1-2mamba +- rebuilt + +* Mon May 11 2009 gil 3.6.1-1mamba +- update to 3.6.1 + +* Fri Nov 14 2008 Silvan Calarco 3.4.2-2mamba +- automatic rebuild by autodist + +* Tue Oct 21 2008 Silvan Calarco 3.4.2-1mamba +- update to 3.4.2 + +* Tue Sep 30 2008 Silvan Calarco 3.4.1-1mamba +- update to 3.4.1 + +* Fri Sep 28 2007 Silvan Calarco 2.2.11-1mamba +- update to 2.2.11 + +* Mon Sep 17 2007 Silvan Calarco 2.2.8-1mamba +- update to 2.2.8 + +* Fri Jan 26 2007 Silvan Calarco 2.2.4-1qilnx +- update to version 2.2.4 by autospec + +* Tue Jul 25 2006 Silvan Calarco 2.2.2-2qilnx +- ... add a changelog entry + +* Tue Jul 25 2006 Silvan Calarco 2.2.2-1qilnx +- update to version 2.2.2 by autospec + +* Tue Mar 14 2006 Davide Madrisan 2.2.1-1qilnx +- package created by autospec