Import live.2013.10.16.tar.gz

2013.10.11
- Fixed a bug in the interpretation of bits in the 'video-specific header' in "MPEG1or2VideoRTPSource", when slices
  are present.  (Thanks to David Verbieren for reporting this.)
- Fixed "RTSPServerWithREGISTERProxying" to include "REGISTER_REMOTE" in the list of supported command names returned in response
  to an "OPTIONS" command.  (Thanks to Bob Bischan for noting this.)

2013.10.16
- Updated the way that "RTSPClient" sends "OPTIONS" commands.  If we are currently part of a session, then we add a
  "Session:" header to the request.
- Changed the HTTP version - used in our RTSP-over-HTTP implementation - from 1.0 to 1.1.  (I don't think this matters at all,
  but most HTTP used elsewhere is version 1.1.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.10.18.tar.gz

- Updated the implementation of the "REGISTER" command to conform with our recent IETF Internet-Draft
  ("draft-finlayson-rtsp-register-command-00").  The "RTSPServer::registerStream()" function has been modified accordingly to take
  two new optional parameters: "receiveOurStreamViaTCP" (Boolean), and "proxyURLSuffix" (string).
- Made the "RTSPServer" code's parsing of "Transport:" headers a little more robust.

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.10.22.tar.gz

- Added a new class "RTSPRegisterSender" that sends (and handles the response to) our custom RTSP "REGISTER" command.
  This class uses a "RTSPClient" to do the sending, thereby simplifying the handling of the RTSP response, and also
  handing authentication.  We also use this class to improve and simplify the implementation of "RTSPServer::registerStream()".
- Added a new demo application "registerRTSPStream" to the "testProgs" directory.  This application can be used to send
  a custom RTSP "REGISTER" command to a RTSP client or proxy server.  (Note, however, that servers that wish to register their
  own streams should continue to use the "RTSPServer::registerStream()" method to do so - not this application.)
- Updated the "LIVE555 Proxy Server" application to take an optional '-U <username> <password>' command-line option.
  This option specifies a username,password pair to use to authenticate (if necessary) incoming "REGISTER" commands.
- Added the ability to authenticate incoming RTSP "REGISTER" commands, and added a new option "-k <username> <password>"
  to "openRTSP" to allow the user (in combination with the "-R" option) to specify access control on incoming REGISTER commands.
- Added the ability for "RTSPServer" subclasses to have different 'authentication databases' for different RTSP commands.
- Moved some of the implementation of "RTSPClient::sendRequest()" into a new virtual function "setRequestFields()".
  This makes it easier for a subclass to implement a new custom RTSP command, if desired.  (We now use this to implement
  the sending of our custom "REGISTER" command.)
- Reordered the member function implementations in "RTSPClient.cpp" to better match the order that they're defined
  in "RTSPClient.hh".

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.10.25.tar.gz

2013.10.24
- Fixed a bug in "ByteStreamMemoryBufferSource":" The fLimitNumBytesToStream" member variable was not being initialized.
  (Thanks to Park Chan for reporting this.)

2013.10.25
- Updated the "TCPStreamSink" code to check for an 'EPIPE' errno if the "send()" fails, because apparently - in this case -
  the socket can still be considered 'writable' (by "select()"), even though it's no longer usable.
  (Thanks to Park Chan for suggesting this.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.11.06.tar.gz

- Changed the function "MatroskaDemux::newDemuxedTrack()" to return 'preferred' tracks
  (based on the file's language preference) only.  This mirrors the functionality of
  "MatroskaFileServerDemux::newServerMediaSubsession()", and makes it easier for applications
  to iterate through the tracks of a demultiplexed Matroska file.
- Added an optional "preferredLanguage" parameter to "MatroskaFileServerDemux::createNew()"
  (to mirror the corresponding parameter that's in "MatroskaFile::createNew()").
- Cleaned up the "MatroskaFile.hh" header file to remove some definitions that should not
  be exposed to developers.
- The "ServerMediaSession" and "ServerMediaSubsession" destructors had accidentally been made
  public.  Changed them to be protected instead.  (Thanks to Michel Promonet for noting this.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.11.10.tar.gz

- Updated the Matroska file parsing code to better handle skipping over very large tracks
  (such as embedded file attachments).  (Thanks to Michel Promonet for reporting this issue.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.11.14.tar.gz

- Added a new option "-g" to "openRTSP" and "playSIP" to allow the user to specify an
  alternative user agent in outgoing requests.  (Thanks to Marco Vlahovic for the suggestion.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.11.15.tar.gz

- Fixed a bug that might cause a "MediaSink" to incorrectly continue operating after its input
  source object has indicated that it's closed.  (Thanks to Michel Promonet for reporting this.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.11.25.tar.gz

- Made a minor change to the random retransmission interval used in "ProxyServerMediaSession".

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.11.26.tar.gz

- Fixed a serious buffer overflow bug in RTSP command parsing.  Because this bug was a security
  hole (potentially allowing an attacker to cause arbitrary code execution), all applications
  that include a RTSP server or RTSP client SHOULD UPGRADE to the latest version of the code!
  (Note that RTSP clients are affected, because they - like RTSP servers - can receive RTSP
  commands.)
  (Thanks to iSEC Partners <http://isecpartners.com/> for discovering and reporting this bug.)
- In "StreamState::endPlaying()"("OnDemandServerMediaSubsession.cpp"), removed the call to
  "RTPInterface::clearServerRequestAlternativeByteHandler()" (when streaming RTP-over-TCP)
  that we had added in version 2013.07.31.  This was preventing the "RTSPClientConnection"
  object (and its socket) from being deleted when the client closed its end of the TCP connection
  following a "TEARDOWN".
  (Thanks to Bruno Abreu for reporting this problem.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.11.29.tar.gz

- Updated the previous bug fix to close another vulnerability.  All applications that include
  RTSP server or RTSP client SHOULD UPGRADE to the latest version of the code!
  (Thanks to iSEC Partners <http://isecpartners.com/> for discovering and reporting this bug.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.03.tar.gz

- Made a minor change to the "ProxyRTSPClient" code to prevent a potential divide-by-zero
  error.

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.04.tar.gz

- Updated the "sendDataOverTCP()" function (in "RTPInterface.cpp") to allow for the possibility of
  one of the "send()" calls partially succeeding - i.e., writing some, but not all, of its data.
- Fixed a couple of minor bugs.  (Thanks to "maksqwe1@ukr.net".)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.05.tar.gz

- Fixed a line of code in "RTPInterface.cpp" that was breaking 'Win64' compilers.
  (Thanks to the VLC developers for noting this.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.15.tar.gz

- Updated the "ProxyServerMediaSession" code to change the way in which the code can create
  an instance of your subclass of "ProxyRTSPClient" (if you've defined one).
  Previously, this was done by calling a virtual function - but that didn't work, because it was
  being called from the "ProxyServerMediaSession" constructor.  Now, instead, you will
  define a (non-member) function that returns a new object of your "ProxyRTSPClient" subclass,
  and then (in the constructor of your "ProxyServerMediaSession" subclass) pass this function
  as a parameter to the constructor of the parent class (i.e., "ProxyServerMediaSession").
  (Thanks to Craig Matsuura for bringing this problem to our attention.)
- Fixed a bug in "QuickTimeFileSink" and "AVIFileSink": When closing the object, we need to call
  "stopGettingFrames()" on each input source.
- Added a new option "-P <interval-in-seconds>" to "openRTSP".  This option tells "openRTSP"
  to write a new output file periodically.
- Updated "RTSPServer" to add an optional "timeout=" parameter to the end of the "Session:" header
  in each "SETUP" response (unless "fReclamationTestSeconds" was 0).  (Note that compliant
  RTSP/RTP clients are still expected to send RTCP "RR" packets, which the server uses to note
  client liveness.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.16.tar.gz

- Fixed a bug in the "RTSPServer" code that was causing it not to handle pipelined
  Base64-encoded requests (sent over a RTSP-over-HTTP connection) properly.  Also updated the
  "parseRTSPRequestString()" code to make it more tolerant of whitespace (or NULL) characters
  at the start of requests; we now skip over them.
  (Thanks to Bob Bischan for providing an example that illustrated this problem.)

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.18.tar.gz

2013.12.17
- Removed a stray #define DEBUG from "RTSPServer.cpp"

2013.12.18
- Added an implementation of a new class "TheoraVideoRTPSink" - for Theora video.
  (This was developed using the "VorbisAudioRTPSink" code as a base;
  thanks to Gilles Chanteperdrix.)
- Updated the new "openRTSP -P <interval-in-seconds>" option to work with the
  "-F <filename-prefix>" option, if you also specified "-q", "-4", or "-i".

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.21.tar.gz

- Fixed a potential 'double free' issue in "MediaSession.cpp".
  (Thanks to ChanMin Kim for noticing this.)
- Updated "RTSPClient" to move the code that sends short 'dummy' UDP packets (to improve the
  chances of receiving packets from a server that's behind a NAT) into its own member function.
  Also, we now call this before sending a "PLAY" command, rather than after receiving the response
  to a "SETUP" command.  (This is so that the packets will also be sent when resuming after
  a "PAUSE"; thanks to Gilles Chanteperdrix for this suggestion.)
- Added a Windows-specific definition to one file to compensate for the fact that the "fileno()"
  function is deprecated in recent versions of Windows.

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.29.tar.gz

- Rewrote our MD5 implementation (and, in particular, the "our_MD5Data()" function) in C++.
- Updated the years in the copyright notice on each file.

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>
Import live.2013.12.31.tar.gz

- In "BasicUsageEnvironment", moved the implementation of the constants "DELAY_MINUTE",
  "DELAY_HOUR", and "DELAY_DAY" from "DelayQueue.hh" to "DelayQueue.cpp", because of a report
  that some compilers were allegedly having problems with the previous code.
- In "groupsock/GroupsockHelper.cpp", changed a couple of "#ifdef ANDROID"s
  to "#ifdef __ANDROID__", because the latter definition is allegedly what 'Android' uses.

Signed-off-by: Ray Lehtiniemi <rayl@mail.com>