RTSPServer Class Reference

#include <RTSPServer.hh>

Inheritance diagram for RTSPServer:

Inheritance graph
[legend]
Collaboration diagram for RTSPServer:

Collaboration graph
[legend]

Public Member Functions

void addServerMediaSession (ServerMediaSession *serverMediaSession)
virtual ServerMediaSessionlookupServerMediaSession (char const *streamName)
void removeServerMediaSession (ServerMediaSession *serverMediaSession)
void removeServerMediaSession (char const *streamName)
void closeAllClientSessionsForServerMediaSession (ServerMediaSession *serverMediaSession)
void closeAllClientSessionsForServerMediaSession (char const *streamName)
void deleteServerMediaSession (ServerMediaSession *serverMediaSession)
void deleteServerMediaSession (char const *streamName)
char * rtspURL (ServerMediaSession const *serverMediaSession, int clientSocket=-1) const
char * rtspURLPrefix (int clientSocket=-1) const
UserAuthenticationDatabasesetAuthenticationDatabase (UserAuthenticationDatabase *newDB)
Boolean setUpTunnelingOverHTTP (Port httpPort)
portNumBits httpServerPortNum () const
UsageEnvironmentenvir () const
char const * name () const
virtual Boolean isSource () const
virtual Boolean isSink () const
virtual Boolean isRTCPInstance () const
virtual Boolean isRTSPClient () const
virtual Boolean isMediaSession () const
virtual Boolean isServerMediaSession () const
virtual Boolean isDarwinInjector () const

Static Public Member Functions

static RTSPServercreateNew (UsageEnvironment &env, Port ourPort=554, UserAuthenticationDatabase *authDatabase=NULL, unsigned reclamationTestSeconds=65)
static Boolean lookupByName (UsageEnvironment &env, char const *name, RTSPServer *&resultServer)
static Boolean lookupByName (UsageEnvironment &env, char const *mediumName, Medium *&resultMedium)
static void close (UsageEnvironment &env, char const *mediumName)
static void close (Medium *medium)

Protected Member Functions

 RTSPServer (UsageEnvironment &env, int ourSocket, Port ourPort, UserAuthenticationDatabase *authDatabase, unsigned reclamationTestSeconds)
virtual ~RTSPServer ()
virtual Boolean specialClientAccessCheck (int clientSocket, struct sockaddr_in &clientAddr, char const *urlSuffix)
virtual Boolean specialClientUserAccessCheck (int clientSocket, struct sockaddr_in &clientAddr, char const *urlSuffix, char const *username)
virtual RTSPClientConnectioncreateNewClientConnection (int clientSocket, struct sockaddr_in clientAddr)
virtual RTSPClientSessioncreateNewClientSession (u_int32_t sessionId)
TaskTokennextTask ()

Static Protected Member Functions

static int setUpOurSocket (UsageEnvironment &env, Port &ourPort)

Private Member Functions

virtual Boolean isRTSPServer () const
void incomingConnectionHandlerRTSP1 ()
void incomingConnectionHandlerHTTP1 ()
void incomingConnectionHandler (int serverSocket)

Static Private Member Functions

static void incomingConnectionHandlerRTSP (void *, int)
static void incomingConnectionHandlerHTTP (void *, int)

Private Attributes

int fRTSPServerSocket
Port fRTSPServerPort
int fHTTPServerSocket
Port fHTTPServerPort
HashTablefServerMediaSessions
HashTablefClientConnections
HashTablefClientConnectionsForHTTPTunneling
HashTablefClientSessions
UserAuthenticationDatabasefAuthDB
unsigned fReclamationTestSeconds

Friends

class RTSPClientConnection
class RTSPClientSession
class ServerMediaSessionIterator
class MediaLookupTable

Data Structures

class  RTSPClientConnection
class  RTSPClientSession
class  ServerMediaSessionIterator

Detailed Description

Definition at line 64 of file RTSPServer.hh.


Constructor & Destructor Documentation

RTSPServer::RTSPServer ( UsageEnvironment env,
int  ourSocket,
Port  ourPort,
UserAuthenticationDatabase authDatabase,
unsigned  reclamationTestSeconds 
) [protected]

Definition at line 223 of file RTSPServer.cpp.

References env, fRTSPServerSocket, ignoreSigPipeOnSocket(), incomingConnectionHandlerRTSP(), UsageEnvironment::taskScheduler(), and TaskScheduler::turnOnBackgroundReadHandling().

Referenced by createNew().

00227   : Medium(env),
00228     fRTSPServerSocket(ourSocket), fRTSPServerPort(ourPort), fHTTPServerSocket(-1), fHTTPServerPort(0),
00229     fServerMediaSessions(HashTable::create(STRING_HASH_KEYS)),
00230     fClientConnections(HashTable::create(ONE_WORD_HASH_KEYS)),
00231     fClientConnectionsForHTTPTunneling(NULL), // will get created if needed
00232     fClientSessions(HashTable::create(STRING_HASH_KEYS)),
00233     fAuthDB(authDatabase), fReclamationTestSeconds(reclamationTestSeconds) {
00234   ignoreSigPipeOnSocket(ourSocket); // so that clients on the same host that are killed don't also kill us
00235 
00236   // Arrange to handle connections from others:
00237   env.taskScheduler().turnOnBackgroundReadHandling(fRTSPServerSocket,
00238                                                    (TaskScheduler::BackgroundHandlerProc*)&incomingConnectionHandlerRTSP, this);
00239 }

RTSPServer::~RTSPServer (  )  [protected, virtual]

Definition at line 241 of file RTSPServer.cpp.

References closeSocket, Medium::envir(), fClientConnections, fClientConnectionsForHTTPTunneling, fClientSessions, fHTTPServerSocket, fRTSPServerSocket, fServerMediaSessions, HashTable::getFirst(), NULL, removeServerMediaSession(), UsageEnvironment::taskScheduler(), and TaskScheduler::turnOffBackgroundReadHandling().

00241                         {
00242   // Turn off background read handling:
00243   envir().taskScheduler().turnOffBackgroundReadHandling(fRTSPServerSocket);
00244   ::closeSocket(fRTSPServerSocket);
00245 
00246   envir().taskScheduler().turnOffBackgroundReadHandling(fHTTPServerSocket);
00247   ::closeSocket(fHTTPServerSocket);
00248 
00249   // Close all client connection objects:
00250   RTSPServer::RTSPClientConnection* connection;
00251   while ((connection = (RTSPServer::RTSPClientConnection*)fClientConnections->getFirst()) != NULL) {
00252     delete connection;
00253   }
00254   delete fClientConnections;
00255   delete fClientConnectionsForHTTPTunneling; // all content was already removed as a result of the loop above
00256 
00257   // Close all client session objects:
00258   RTSPServer::RTSPClientSession* clientSession;
00259   while ((clientSession = (RTSPServer::RTSPClientSession*)fClientSessions->getFirst()) != NULL) {
00260     delete clientSession;
00261   }
00262   delete fClientSessions;
00263 
00264   // Delete all server media sessions
00265   ServerMediaSession* serverMediaSession;
00266   while ((serverMediaSession = (ServerMediaSession*)fServerMediaSessions->getFirst()) != NULL) {
00267     removeServerMediaSession(serverMediaSession); // will delete it, because it no longer has any 'client session' objects using it
00268   }
00269   delete fServerMediaSessions;
00270 }


Member Function Documentation

RTSPServer * RTSPServer::createNew ( UsageEnvironment env,
Port  ourPort = 554,
UserAuthenticationDatabase authDatabase = NULL,
unsigned  reclamationTestSeconds = 65 
) [static]

Reimplemented in RTSPServerSupportingHTTPStreaming, and DynamicRTSPServer.

Definition at line 29 of file RTSPServer.cpp.

References env, NULL, RTSPServer(), and setUpOurSocket().

Referenced by main().

00031                                                        {
00032   int ourSocket = setUpOurSocket(env, ourPort);
00033   if (ourSocket == -1) return NULL;
00034 
00035   return new RTSPServer(env, ourSocket, ourPort, authDatabase, reclamationTestSeconds);
00036 }

Boolean RTSPServer::lookupByName ( UsageEnvironment env,
char const *  name,
RTSPServer *&  resultServer 
) [static]

Definition at line 38 of file RTSPServer.cpp.

References env, False, Medium::isRTSPServer(), Medium::lookupByName(), NULL, and True.

00040                                                             {
00041   resultServer = NULL; // unless we succeed
00042 
00043   Medium* medium;
00044   if (!Medium::lookupByName(env, name, medium)) return False;
00045 
00046   if (!medium->isRTSPServer()) {
00047     env.setResultMsg(name, " is not a RTSP server");
00048     return False;
00049   }
00050 
00051   resultServer = (RTSPServer*)medium;
00052   return True;
00053 }

void RTSPServer::addServerMediaSession ( ServerMediaSession serverMediaSession  ) 

Definition at line 55 of file RTSPServer.cpp.

References HashTable::Add(), fServerMediaSessions, NULL, removeServerMediaSession(), and ServerMediaSession::streamName().

Referenced by DynamicRTSPServer::lookupServerMediaSession(), and main().

00055                                                                              {
00056   if (serverMediaSession == NULL) return;
00057 
00058   char const* sessionName = serverMediaSession->streamName();
00059   if (sessionName == NULL) sessionName = "";
00060   removeServerMediaSession(sessionName); // in case an existing "ServerMediaSession" with this name already exists
00061 
00062   fServerMediaSessions->Add(sessionName, (void*)serverMediaSession);
00063 }

ServerMediaSession * RTSPServer::lookupServerMediaSession ( char const *  streamName  )  [virtual]

Reimplemented in DynamicRTSPServer.

Definition at line 65 of file RTSPServer.cpp.

References fServerMediaSessions, and HashTable::Lookup().

Referenced by DynamicRTSPServer::lookupServerMediaSession().

00065                                                                                {
00066   return (ServerMediaSession*)(fServerMediaSessions->Lookup(streamName));
00067 }

void RTSPServer::removeServerMediaSession ( ServerMediaSession serverMediaSession  ) 

Definition at line 69 of file RTSPServer.cpp.

References Medium::close(), ServerMediaSession::deleteWhenUnreferenced(), fServerMediaSessions, NULL, ServerMediaSession::referenceCount(), HashTable::Remove(), ServerMediaSession::streamName(), and True.

Referenced by addServerMediaSession(), deleteServerMediaSession(), DynamicRTSPServer::lookupServerMediaSession(), removeServerMediaSession(), RTSPServer::RTSPClientSession::~RTSPClientSession(), and ~RTSPServer().

00069                                                                                 {
00070   if (serverMediaSession == NULL) return;
00071 
00072   fServerMediaSessions->Remove(serverMediaSession->streamName());
00073   if (serverMediaSession->referenceCount() == 0) {
00074     Medium::close(serverMediaSession);
00075   } else {
00076     serverMediaSession->deleteWhenUnreferenced() = True;
00077   }
00078 }

void RTSPServer::removeServerMediaSession ( char const *  streamName  ) 

Definition at line 80 of file RTSPServer.cpp.

References fServerMediaSessions, HashTable::Lookup(), and removeServerMediaSession().

void RTSPServer::closeAllClientSessionsForServerMediaSession ( ServerMediaSession serverMediaSession  ) 

Definition at line 84 of file RTSPServer.cpp.

References HashTable::Iterator::create(), fClientSessions, RTSPServer::RTSPClientSession::fOurServerMediaSession, iter, MediaSubsessionIterator::next(), and NULL.

Referenced by closeAllClientSessionsForServerMediaSession(), deleteServerMediaSession(), and ProxyServerMediaSession::resetDESCRIBEState().

00084                                                                                                    {
00085   if (serverMediaSession == NULL) return;
00086 
00087   HashTable::Iterator* iter = HashTable::Iterator::create(*fClientSessions);
00088   RTSPServer::RTSPClientSession* clientSession;
00089   char const* key; // dummy
00090   while ((clientSession = (RTSPServer::RTSPClientSession*)(iter->next(key))) != NULL) {
00091     if (clientSession->fOurServerMediaSession == serverMediaSession) {
00092       delete clientSession;
00093     }
00094   }
00095   delete iter;
00096 }

void RTSPServer::closeAllClientSessionsForServerMediaSession ( char const *  streamName  ) 

Definition at line 98 of file RTSPServer.cpp.

References closeAllClientSessionsForServerMediaSession(), fServerMediaSessions, and HashTable::Lookup().

void RTSPServer::deleteServerMediaSession ( ServerMediaSession serverMediaSession  ) 

Definition at line 102 of file RTSPServer.cpp.

References closeAllClientSessionsForServerMediaSession(), NULL, and removeServerMediaSession().

Referenced by deleteServerMediaSession().

00102                                                                                 {
00103   if (serverMediaSession == NULL) return;
00104 
00105   closeAllClientSessionsForServerMediaSession(serverMediaSession);
00106   removeServerMediaSession(serverMediaSession);
00107 }

void RTSPServer::deleteServerMediaSession ( char const *  streamName  ) 

Definition at line 109 of file RTSPServer.cpp.

References deleteServerMediaSession(), fServerMediaSessions, and HashTable::Lookup().

char * RTSPServer::rtspURL ( ServerMediaSession const *  serverMediaSession,
int  clientSocket = -1 
) const

Definition at line 114 of file RTSPServer.cpp.

References rtspURLPrefix(), and ServerMediaSession::streamName().

Referenced by announceStream(), RTSPServer::RTSPClientConnection::handleCmd_DESCRIBE(), RTSPServer::RTSPClientSession::handleCmd_PLAY(), and main().

00114                                                                               {
00115   char* urlPrefix = rtspURLPrefix(clientSocket);
00116   char const* sessionName = serverMediaSession->streamName();
00117 
00118   char* resultURL = new char[strlen(urlPrefix) + strlen(sessionName) + 1];
00119   sprintf(resultURL, "%s%s", urlPrefix, sessionName);
00120 
00121   delete[] urlPrefix;
00122   return resultURL;
00123 }

char * RTSPServer::rtspURLPrefix ( int  clientSocket = -1  )  const

Definition at line 125 of file RTSPServer.cpp.

References Medium::envir(), fRTSPServerPort, Port::num(), ourIPAddress(), ReceivingInterfaceAddr, SOCKLEN_T, and strDup().

Referenced by main(), and rtspURL().

00125                                                       {
00126   struct sockaddr_in ourAddress;
00127   if (clientSocket < 0) {
00128     // Use our default IP address in the URL:
00129     ourAddress.sin_addr.s_addr = ReceivingInterfaceAddr != 0
00130       ? ReceivingInterfaceAddr
00131       : ourIPAddress(envir()); // hack
00132   } else {
00133     SOCKLEN_T namelen = sizeof ourAddress;
00134     getsockname(clientSocket, (struct sockaddr*)&ourAddress, &namelen);
00135   }
00136 
00137   char urlBuffer[100]; // more than big enough for "rtsp://<ip-address>:<port>/"
00138 
00139   portNumBits portNumHostOrder = ntohs(fRTSPServerPort.num());
00140   if (portNumHostOrder == 554 /* the default port number */) {
00141     sprintf(urlBuffer, "rtsp://%s/", AddressString(ourAddress).val());
00142   } else {
00143     sprintf(urlBuffer, "rtsp://%s:%hu/",
00144             AddressString(ourAddress).val(), portNumHostOrder);
00145   }
00146 
00147   return strDup(urlBuffer);
00148 }

UserAuthenticationDatabase * RTSPServer::setAuthenticationDatabase ( UserAuthenticationDatabase newDB  ) 

Definition at line 150 of file RTSPServer.cpp.

References fAuthDB.

00150                                                                                                    {
00151   UserAuthenticationDatabase* oldDB = fAuthDB;
00152   fAuthDB = newDB;
00153 
00154   return oldDB;
00155 }

Boolean RTSPServer::setUpTunnelingOverHTTP ( Port  httpPort  ) 

Definition at line 157 of file RTSPServer.cpp.

References Medium::envir(), False, fHTTPServerPort, fHTTPServerSocket, incomingConnectionHandlerHTTP(), setUpOurSocket(), UsageEnvironment::taskScheduler(), True, and TaskScheduler::turnOnBackgroundReadHandling().

Referenced by main(), and RTSPServerSupportingHTTPStreaming::setHTTPPort().

00157                                                         {
00158   fHTTPServerSocket = setUpOurSocket(envir(), httpPort);
00159   if (fHTTPServerSocket >= 0) {
00160     fHTTPServerPort = httpPort;
00161     envir().taskScheduler().turnOnBackgroundReadHandling(fHTTPServerSocket,
00162                                                          (TaskScheduler::BackgroundHandlerProc*)&incomingConnectionHandlerHTTP, this);
00163     return True;
00164   }
00165 
00166   return False;
00167 }

portNumBits RTSPServer::httpServerPortNum (  )  const

Definition at line 169 of file RTSPServer.cpp.

References fHTTPServerPort, and Port::num().

Referenced by main().

00169                                                 {
00170   return ntohs(fHTTPServerPort.num());
00171 }

int RTSPServer::setUpOurSocket ( UsageEnvironment env,
Port ourPort 
) [static, protected]

Definition at line 175 of file RTSPServer.cpp.

References closeSocket, env, getSourcePort(), increaseSendBufferTo(), LISTEN_BACKLOG_SIZE, Port::num(), UsageEnvironment::setResultErrMsg(), and setupStreamSocket().

Referenced by DynamicRTSPServer::createNew(), RTSPServerSupportingHTTPStreaming::createNew(), createNew(), and setUpTunnelingOverHTTP().

00175                                                                    {
00176   int ourSocket = -1;
00177 
00178   do {
00179     // The following statement is enabled by default.
00180     // Don't disable it (by defining ALLOW_RTSP_SERVER_PORT_REUSE) unless you know what you're doing.
00181 #ifndef ALLOW_RTSP_SERVER_PORT_REUSE
00182     NoReuse dummy(env); // Don't use this socket if there's already a local server using it
00183 #endif
00184 
00185     ourSocket = setupStreamSocket(env, ourPort);
00186     if (ourSocket < 0) break;
00187 
00188     // Make sure we have a big send buffer:
00189     if (!increaseSendBufferTo(env, ourSocket, 50*1024)) break;
00190 
00191     // Allow multiple simultaneous connections:
00192     if (listen(ourSocket, LISTEN_BACKLOG_SIZE) < 0) {
00193       env.setResultErrMsg("listen() failed: ");
00194       break;
00195     }
00196 
00197     if (ourPort.num() == 0) {
00198       // bind() will have chosen a port for us; return it also:
00199       if (!getSourcePort(env, ourSocket, ourPort)) break;
00200     }
00201 
00202     return ourSocket;
00203   } while (0);
00204 
00205   if (ourSocket != -1) ::closeSocket(ourSocket);
00206   return -1;
00207 }

Boolean RTSPServer::specialClientAccessCheck ( int  clientSocket,
struct sockaddr_in &  clientAddr,
char const *  urlSuffix 
) [protected, virtual]

Definition at line 210 of file RTSPServer.cpp.

References True.

00210                                                                                                               {
00211   // default implementation
00212   return True;
00213 }

Boolean RTSPServer::specialClientUserAccessCheck ( int  clientSocket,
struct sockaddr_in &  clientAddr,
char const *  urlSuffix,
char const *  username 
) [protected, virtual]

Definition at line 216 of file RTSPServer.cpp.

References True.

00217                                                                                      {
00218   // default implementation; no further access restrictions:
00219   return True;
00220 }

Boolean RTSPServer::isRTSPServer (  )  const [private, virtual]

Reimplemented from Medium.

Definition at line 272 of file RTSPServer.cpp.

References True.

00272                                        {
00273   return True;
00274 }

RTSPServer::RTSPClientConnection * RTSPServer::createNewClientConnection ( int  clientSocket,
struct sockaddr_in  clientAddr 
) [protected, virtual]

Reimplemented in RTSPServerSupportingHTTPStreaming.

Definition at line 1819 of file RTSPServer.cpp.

References RTSPClientConnection.

Referenced by incomingConnectionHandler().

01819                                                                                      {
01820   return new RTSPClientConnection(*this, clientSocket, clientAddr);
01821 }

RTSPServer::RTSPClientSession * RTSPServer::createNewClientSession ( u_int32_t  sessionId  )  [protected, virtual]

Definition at line 1824 of file RTSPServer.cpp.

References RTSPClientSession.

Referenced by RTSPServer::RTSPClientConnection::handleRequestBytes().

01824                                                       {
01825   return new RTSPClientSession(*this, sessionId);
01826 }

void RTSPServer::incomingConnectionHandlerRTSP ( void *  ,
int   
) [static, private]

Definition at line 276 of file RTSPServer.cpp.

References incomingConnectionHandlerRTSP1().

Referenced by RTSPServer().

00276                                                                            {
00277   RTSPServer* server = (RTSPServer*)instance;
00278   server->incomingConnectionHandlerRTSP1();
00279 }

void RTSPServer::incomingConnectionHandlerRTSP1 (  )  [private]

Definition at line 280 of file RTSPServer.cpp.

References fRTSPServerSocket, and incomingConnectionHandler().

Referenced by incomingConnectionHandlerRTSP().

void RTSPServer::incomingConnectionHandlerHTTP ( void *  ,
int   
) [static, private]

Definition at line 284 of file RTSPServer.cpp.

References incomingConnectionHandlerHTTP1().

Referenced by setUpTunnelingOverHTTP().

00284                                                                            {
00285   RTSPServer* server = (RTSPServer*)instance;
00286   server->incomingConnectionHandlerHTTP1();
00287 }

void RTSPServer::incomingConnectionHandlerHTTP1 (  )  [private]

Definition at line 288 of file RTSPServer.cpp.

References fHTTPServerSocket, and incomingConnectionHandler().

Referenced by incomingConnectionHandlerHTTP().

void RTSPServer::incomingConnectionHandler ( int  serverSocket  )  [private]

Definition at line 292 of file RTSPServer.cpp.

References createNewClientConnection(), Medium::envir(), UsageEnvironment::getErrno(), increaseSendBufferTo(), makeSocketNonBlocking(), UsageEnvironment::setResultErrMsg(), and SOCKLEN_T.

Referenced by incomingConnectionHandlerHTTP1(), and incomingConnectionHandlerRTSP1().

00292                                                            {
00293   struct sockaddr_in clientAddr;
00294   SOCKLEN_T clientAddrLen = sizeof clientAddr;
00295   int clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen);
00296   if (clientSocket < 0) {
00297     int err = envir().getErrno();
00298     if (err != EWOULDBLOCK) {
00299         envir().setResultErrMsg("accept() failed: ");
00300     }
00301     return;
00302   }
00303   makeSocketNonBlocking(clientSocket);
00304   increaseSendBufferTo(envir(), clientSocket, 50*1024);
00305 
00306 #ifdef DEBUG
00307   envir() << "accept()ed connection from " << AddressString(clientAddr).val() << "\n";
00308 #endif
00309 
00310   // Create a new object for handling this RTSP connection:
00311   (void)createNewClientConnection(clientSocket, clientAddr);
00312 }

Boolean Medium::lookupByName ( UsageEnvironment env,
char const *  mediumName,
Medium *&  resultMedium 
) [static, inherited]

Definition at line 41 of file Media.cpp.

References env, False, MediaLookupTable::lookup(), NULL, MediaLookupTable::ourMedia(), UsageEnvironment::setResultMsg(), and True.

Referenced by ServerMediaSession::lookupByName(), lookupByName(), RTSPClient::lookupByName(), RTCPInstance::lookupByName(), MediaSource::lookupByName(), MediaSink::lookupByName(), MediaSession::lookupByName(), and DarwinInjector::lookupByName().

00042                                                          {
00043   resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName);
00044   if (resultMedium == NULL) {
00045     env.setResultMsg("Medium ", mediumName, " does not exist");
00046     return False;
00047   }
00048 
00049   return True;
00050 }

void Medium::close ( UsageEnvironment env,
char const *  mediumName 
) [static, inherited]

Definition at line 52 of file Media.cpp.

References env, MediaLookupTable::ourMedia(), and MediaLookupTable::remove().

Referenced by afterPlaying(), Medium::close(), closeMediaSinks(), OnDemandServerMediaSubsession::closeStreamSource(), continueAfterTEARDOWN(), WAVAudioFileSource::createNew(), QuickTimeFileSink::createNew(), QCELPAudioRTPSource::createNew(), MP3FileSource::createNew(), AVIFileSink::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), ServerMediaSession::deleteAllSubsessions(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), removeServerMediaSession(), ProxyServerMediaSession::resetDESCRIBEState(), OnDemandServerMediaSubsession::sdpLines(), shutdownStream(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MatroskaFileParser::~MatroskaFileParser(), MatroskaFileServerDemux::~MatroskaFileServerDemux(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::~RTSPClientConnectionSupportingHTTPStreaming(), ServerMediaSubsession::~ServerMediaSubsession(), StreamClientState::~StreamClientState(), StreamReplicator::~StreamReplicator(), and T140TextRTPSink::~T140TextRTPSink().

00052                                                           {
00053   MediaLookupTable::ourMedia(env)->remove(name);
00054 }

void Medium::close ( Medium medium  )  [static, inherited]

Definition at line 56 of file Media.cpp.

References Medium::close(), Medium::envir(), Medium::name(), and NULL.

00056                                  {
00057   if (medium == NULL) return;
00058 
00059   close(medium->envir(), medium->name());
00060 }

UsageEnvironment& Medium::envir (  )  const [inline, inherited]

Definition at line 59 of file Media.hh.

References Medium::fEnviron.

Referenced by QuickTimeFileSink::addArbitraryString(), FileSink::addData(), RTCPInstance::addStreamSocket(), MPEG2IFrameIndexFromTransportStream::addToTail(), StreamParser::afterGettingBytes1(), DummySink::afterGettingFrame(), TCPStreamSink::afterGettingFrame(), T140IdleFilter::afterGettingFrame(), FileSink::afterGettingFrame(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), H264VideoStreamDiscreteFramer::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), announceStream(), RTSPServer::RTSPClientConnection::changeClientInputSocket(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), ProxyServerMediaSubsession::closeStreamSource(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), ProxyServerMediaSession::continueAfterDESCRIBE(), ProxyRTSPClient::continueAfterLivenessCommand(), ProxyRTSPClient::continueAfterSETUP(), T140TextRTPSink::continuePlaying(), QuickTimeFileSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), VP8VideoMatroskaFileServerMediaSubsession::createNewRTPSink(), VorbisAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), T140TextMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportUDPServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), MP3AudioFileServerMediaSubsession::createNewRTPSink(), H264VideoFileServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), DVVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), AC3AudioMatroskaFileServerMediaSubsession::createNewRTPSink(), AC3AudioFileServerMediaSubsession::createNewRTPSink(), AACAudioMatroskaFileServerMediaSubsession::createNewRTPSink(), ProxyServerMediaSubsession::createNewStreamSource(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportUDPServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MP3AudioFileServerMediaSubsession::createNewStreamSource(), H264VideoMatroskaFileServerMediaSubsession::createNewStreamSource(), H264VideoFileServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), DVVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), AC3AudioFileServerMediaSubsession::createNewStreamSource(), AMRDeinterleavingBuffer::deliverIncomingFrame(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), DeviceSource::DeviceSource(), WAVAudioFileSource::doGetNextFrame(), T140IdleFilter::doGetNextFrame(), MPEG2TransportStreamMultiplexor::doGetNextFrame(), MPEG2IFrameIndexFromTransportStream::doGetNextFrame(), MP3FileSource::doGetNextFrame(), H264FUAFragmenter::doGetNextFrame(), ByteStreamMultiFileSource::doGetNextFrame(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), MP3FileSource::doGetNextFrame1(), ADUFromMP3Source::doGetNextFrame1(), SIPClient::doInviteStateMachine(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), WAVAudioFileSource::doStopGettingFrames(), T140IdleFilter::doStopGettingFrames(), MultiFramedRTPSource::doStopGettingFrames(), FramedSource::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPServer::RTSPClientConnection::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), H264VideoFileServerMediaSubsession::getAuxSDPLine(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptions(), DVVideoStreamFramer::getProfile(), SIPClient::getResponse(), SIPClient::getResponseCode(), getSDPDescription(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPClient::handleAlternativeRequestByte1(), RTSPClient::handleGET_PARAMETERResponse(), RTSPServerSupportingHTTPStreaming::RTSPClientConnectionSupportingHTTPStreaming::handleHTTPCmd_StreamingGET(), RTSPClient::handleIncomingRequest(), RTSPClient::handlePLAYResponse(), RTSPClient::handleRequestError(), RTSPClient::handleResponseBytes(), RTSPClient::handleSETUPResponse(), incomingConnectionHandler(), RTSPClient::incomingDataHandler1(), RTCPInstance::incomingReportHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MatroskaDemux::MatroskaDemux(), MatroskaFile::MatroskaFile(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), MultiFramedRTPSource::networkReadHandler1(), MatroskaDemux::newDemuxedTrack(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), T140IdleFilter::onSourceClosure(), RTSPClient::openConnection(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MatroskaFileParser::parseStartOfFile(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), TCPStreamSink::processBuffer(), SIPClient::processURL(), AC3AudioStreamParser::readAndSaveAFrame(), MPEG1or2Demux::registerReadInterest(), RTCPInstance::reschedule(), RTSPClient::resendCommand(), ProxyRTSPClient::reset(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), rtspURLPrefix(), RTCPInstance::schedule(), ProxyRTSPClient::scheduleDESCRIBECommand(), ProxyRTSPClient::scheduleLivenessCommand(), OnDemandServerMediaSubsession::sdpLines(), SIPClient::sendACK(), SIPClient::sendBYE(), SIPClient::sendINVITE(), MultiFramedRTPSink::sendPacketIfNecessary(), SIPClient::sendRequest(), RTSPClient::sendRequest(), DarwinInjector::setDestination(), RTSPClient::setupHTTPTunneling1(), setupNextSubsession(), setUpTunnelingOverHTTP(), QuickTimeFileSink::setWord(), AVIFileSink::setWord(), QuickTimeFileSink::setWord64(), shutdownStream(), SIPClient::SIPClient(), TCPStreamSink::socketWritableHandler1(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), AVIFileSink::startPlaying(), startPlayingSession(), PassiveServerMediaSubsession::startStream(), MediaSink::stopPlaying(), ProxyServerMediaSubsession::subsessionByeHandler(), tearDownSession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), DeviceSource::~DeviceSource(), ProxyServerMediaSession::~ProxyServerMediaSession(), ProxyServerMediaSubsession::~ProxyServerMediaSubsession(), ~RTSPServer(), StreamClientState::~StreamClientState(), T140IdleFilter::~T140IdleFilter(), and WAVAudioFileSource::~WAVAudioFileSource().

00059 {return fEnviron;}

char const* Medium::name (  )  const [inline, inherited]

Definition at line 61 of file Media.hh.

References Medium::fMediumName.

Referenced by QuickTimeFileSink::addAtom_hdlr2(), Medium::close(), MP3ADUTranscoder::createNew(), MP3FromADUSource::createNew(), ADUFromMP3Source::createNew(), and MP3FileSource::initializeStream().

00061 {return fMediumName;}

Boolean Medium::isSource (  )  const [virtual, inherited]

Reimplemented in MediaSource.

Definition at line 62 of file Media.cpp.

References False.

Referenced by MediaSource::lookupByName().

00062                                {
00063   return False; // default implementation
00064 }

Boolean Medium::isSink (  )  const [virtual, inherited]

Reimplemented in MediaSink.

Definition at line 66 of file Media.cpp.

References False.

Referenced by MediaSink::lookupByName().

00066                              {
00067   return False; // default implementation
00068 }

Boolean Medium::isRTCPInstance (  )  const [virtual, inherited]

Reimplemented in RTCPInstance.

Definition at line 70 of file Media.cpp.

References False.

Referenced by RTCPInstance::lookupByName().

00070                                      {
00071   return False; // default implementation
00072 }

Boolean Medium::isRTSPClient (  )  const [virtual, inherited]

Reimplemented in RTSPClient.

Definition at line 74 of file Media.cpp.

References False.

Referenced by RTSPClient::lookupByName().

00074                                    {
00075   return False; // default implementation
00076 }

Boolean Medium::isMediaSession (  )  const [virtual, inherited]

Reimplemented in MediaSession.

Definition at line 82 of file Media.cpp.

References False.

Referenced by MediaSession::lookupByName().

00082                                      {
00083   return False; // default implementation
00084 }

Boolean Medium::isServerMediaSession (  )  const [virtual, inherited]

Reimplemented in ServerMediaSession.

Definition at line 86 of file Media.cpp.

References False.

Referenced by ServerMediaSession::lookupByName().

00086                                            {
00087   return False; // default implementation
00088 }

Boolean Medium::isDarwinInjector (  )  const [virtual, inherited]

Reimplemented in DarwinInjector.

Definition at line 90 of file Media.cpp.

References False.

Referenced by DarwinInjector::lookupByName().

00090                                        {
00091   return False; // default implementation
00092 }

TaskToken& Medium::nextTask (  )  [inline, protected, inherited]

Definition at line 78 of file Media.hh.

References Medium::fNextTask.

Referenced by BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), H264VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), H264VideoFileServerMediaSubsession::checkForAuxSDPLine1(), MP3FileSource::doGetNextFrame(), AMRAudioFileSource::doGetNextFrame(), ADTSAudioFileSource::doGetNextFrame(), MultiFramedRTPSource::doGetNextFrame1(), WAVAudioFileSource::doReadFromFile(), ByteStreamFileSource::doReadFromFile(), MultiFramedRTPSource::doStopGettingFrames(), FramedSource::doStopGettingFrames(), ByteStreamFileSource::doStopGettingFrames(), RTCPInstance::reschedule(), RTCPInstance::schedule(), MultiFramedRTPSink::sendPacketIfNecessary(), and MediaSink::stopPlaying().

00078                         {
00079         return fNextTask;
00080   }


Friends And Related Function Documentation

friend class RTSPClientConnection [friend]

Definition at line 291 of file RTSPServer.hh.

Referenced by createNewClientConnection().

friend class RTSPClientSession [friend]

Definition at line 292 of file RTSPServer.hh.

Referenced by createNewClientSession().

friend class ServerMediaSessionIterator [friend]

Definition at line 293 of file RTSPServer.hh.

friend class MediaLookupTable [friend, inherited]

Definition at line 74 of file Media.hh.


Field Documentation

int RTSPServer::fRTSPServerSocket [private]

Definition at line 294 of file RTSPServer.hh.

Referenced by incomingConnectionHandlerRTSP1(), RTSPServer(), and ~RTSPServer().

Port RTSPServer::fRTSPServerPort [private]

Definition at line 295 of file RTSPServer.hh.

Referenced by rtspURLPrefix().

int RTSPServer::fHTTPServerSocket [private]

Definition at line 296 of file RTSPServer.hh.

Referenced by incomingConnectionHandlerHTTP1(), setUpTunnelingOverHTTP(), and ~RTSPServer().

Port RTSPServer::fHTTPServerPort [private]

Definition at line 297 of file RTSPServer.hh.

Referenced by httpServerPortNum(), and setUpTunnelingOverHTTP().

HashTable* RTSPServer::fServerMediaSessions [private]

Definition at line 298 of file RTSPServer.hh.

Referenced by addServerMediaSession(), closeAllClientSessionsForServerMediaSession(), deleteServerMediaSession(), lookupServerMediaSession(), removeServerMediaSession(), and ~RTSPServer().

HashTable* RTSPServer::fClientConnections [private]

Definition at line 299 of file RTSPServer.hh.

Referenced by RTSPServer::RTSPClientConnection::RTSPClientConnection(), RTSPServer::RTSPClientConnection::~RTSPClientConnection(), and ~RTSPServer().

HashTable* RTSPServer::fClientConnectionsForHTTPTunneling [private]

Definition at line 300 of file RTSPServer.hh.

Referenced by RTSPServer::RTSPClientConnection::handleHTTPCmd_TunnelingGET(), RTSPServer::RTSPClientConnection::~RTSPClientConnection(), and ~RTSPServer().

HashTable* RTSPServer::fClientSessions [private]

Definition at line 302 of file RTSPServer.hh.

Referenced by closeAllClientSessionsForServerMediaSession(), RTSPServer::RTSPClientConnection::handleRequestBytes(), RTSPServer::RTSPClientSession::~RTSPClientSession(), and ~RTSPServer().

UserAuthenticationDatabase* RTSPServer::fAuthDB [private]

Definition at line 303 of file RTSPServer.hh.

Referenced by setAuthenticationDatabase().

unsigned RTSPServer::fReclamationTestSeconds [private]

Definition at line 304 of file RTSPServer.hh.

Referenced by RTSPServer::RTSPClientSession::noteLiveness().


The documentation for this class was generated from the following files:
Generated on Mon Apr 29 13:32:34 2013 for live by  doxygen 1.5.2