DynamicRTSPServer Class Reference

#include <DynamicRTSPServer.hh>

Inheritance diagram for DynamicRTSPServer:

Inheritance graph
[legend]
Collaboration diagram for DynamicRTSPServer:

Collaboration graph
[legend]

Public Types

typedef void( responseHandlerForREGISTER )(RTSPServer *rtspServer, int socketNum, int resultCode, char *resultString)

Public Member Functions

Boolean setHTTPPort (Port httpPort)
void addServerMediaSession (ServerMediaSession *serverMediaSession)
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)
int registerStream (ServerMediaSession *serverMediaSession, char const *remoteClientNameOrAddress, Port remotePortNumber, responseHandlerForREGISTER *responseHandler)
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 DynamicRTSPServercreateNew (UsageEnvironment &env, Port ourPort, UserAuthenticationDatabase *authDatabase, 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

 DynamicRTSPServer (UsageEnvironment &env, int ourSocket, Port ourPort, UserAuthenticationDatabase *authDatabase, unsigned reclamationTestSeconds)
virtual ~DynamicRTSPServer ()
virtual ServerMediaSessionlookupServerMediaSession (char const *streamName)
virtual RTSPClientConnection * createNewClientConnection (int clientSocket, struct sockaddr_in clientAddr)
virtual char const * allowedCommandNames ()
virtual Boolean weImplementREGISTER ()
virtual void implementCmd_REGISTER (char const *url, char const *urlSuffix, int socketToRemoteServer)
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 RTSPClientSession * createNewClientSession (u_int32_t sessionId)
TaskTokennextTask ()

Static Protected Member Functions

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

Protected Attributes

Port fRTSPServerPort

Friends

class MediaLookupTable

Detailed Description

Definition at line 28 of file DynamicRTSPServer.hh.


Member Typedef Documentation

typedef void( RTSPServer::responseHandlerForREGISTER)(RTSPServer *rtspServer, int socketNum, int resultCode, char *resultString) [inherited]

Definition at line 105 of file RTSPServer.hh.


Constructor & Destructor Documentation

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

Definition at line 35 of file DynamicRTSPServer.cpp.

Referenced by createNew().

00038   : RTSPServerSupportingHTTPStreaming(env, ourSocket, ourPort, authDatabase, reclamationTestSeconds) {
00039 }

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

Definition at line 41 of file DynamicRTSPServer.cpp.

00041                                       {
00042 }


Member Function Documentation

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

Reimplemented from RTSPServerSupportingHTTPStreaming.

Definition at line 26 of file DynamicRTSPServer.cpp.

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

Referenced by main().

00028                                                               {
00029   int ourSocket = setUpOurSocket(env, ourPort);
00030   if (ourSocket == -1) return NULL;
00031 
00032   return new DynamicRTSPServer(env, ourSocket, ourPort, authDatabase, reclamationTestSeconds);
00033 }

ServerMediaSession * DynamicRTSPServer::lookupServerMediaSession ( char const *  streamName  )  [protected, virtual]

Reimplemented from RTSPServer.

Definition at line 48 of file DynamicRTSPServer.cpp.

References RTSPServer::addServerMediaSession(), createNewSMS(), Medium::envir(), RTSPServer::lookupServerMediaSession(), NULL, and RTSPServer::removeServerMediaSession().

00048                                                                   {
00049   // First, check whether the specified "streamName" exists as a local file:
00050   FILE* fid = fopen(streamName, "rb");
00051   Boolean fileExists = fid != NULL;
00052 
00053   // Next, check whether we already have a "ServerMediaSession" for this file:
00054   ServerMediaSession* sms = RTSPServer::lookupServerMediaSession(streamName);
00055   Boolean smsExists = sms != NULL;
00056 
00057   // Handle the four possibilities for "fileExists" and "smsExists":
00058   if (!fileExists) {
00059     if (smsExists) {
00060       // "sms" was created for a file that no longer exists. Remove it:
00061       removeServerMediaSession(sms);
00062     }
00063     return NULL;
00064   } else {
00065     if (!smsExists) {
00066       // Create a new "ServerMediaSession" object for streaming from the named file.
00067       sms = createNewSMS(envir(), streamName, fid);
00068       addServerMediaSession(sms);
00069     }
00070     fclose(fid);
00071     return sms;
00072   }
00073 }

Boolean RTSPServerSupportingHTTPStreaming::setHTTPPort ( Port  httpPort  )  [inline, inherited]

Definition at line 40 of file RTSPServerSupportingHTTPStreaming.hh.

References RTSPServer::setUpTunnelingOverHTTP().

00040 { return setUpTunnelingOverHTTP(httpPort); }

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

Reimplemented from RTSPServer.

Definition at line 47 of file RTSPServerSupportingHTTPStreaming.cpp.

00047                                                                                                             {
00048   return new RTSPClientConnectionSupportingHTTPStreaming(*this, clientSocket, clientAddr);
00049 }

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

Definition at line 39 of file RTSPServer.cpp.

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

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

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(), RTSPServer::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 RTSPServer::addServerMediaSession ( ServerMediaSession serverMediaSession  )  [inherited]

Definition at line 56 of file RTSPServer.cpp.

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

Referenced by RTSPServerWithREGISTERProxying::implementCmd_REGISTER(), lookupServerMediaSession(), and main().

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

void RTSPServer::removeServerMediaSession ( ServerMediaSession serverMediaSession  )  [inherited]

Definition at line 70 of file RTSPServer.cpp.

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

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

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

void RTSPServer::removeServerMediaSession ( char const *  streamName  )  [inherited]

Definition at line 81 of file RTSPServer.cpp.

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

void RTSPServer::closeAllClientSessionsForServerMediaSession ( ServerMediaSession serverMediaSession  )  [inherited]

Definition at line 85 of file RTSPServer.cpp.

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

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

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

void RTSPServer::closeAllClientSessionsForServerMediaSession ( char const *  streamName  )  [inherited]

Definition at line 99 of file RTSPServer.cpp.

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

void RTSPServer::deleteServerMediaSession ( ServerMediaSession serverMediaSession  )  [inherited]

Definition at line 103 of file RTSPServer.cpp.

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

Referenced by RTSPServer::deleteServerMediaSession().

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

void RTSPServer::deleteServerMediaSession ( char const *  streamName  )  [inherited]

Definition at line 110 of file RTSPServer.cpp.

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

int RTSPServer::registerStream ( ServerMediaSession serverMediaSession,
char const *  remoteClientNameOrAddress,
Port  remotePortNumber,
responseHandlerForREGISTER responseHandler 
) [inherited]

Definition at line 114 of file RTSPServer.cpp.

References RTSPServer::RegisterRequestRecord::callResponseHandler(), RTSPServer::RegisterRequestRecord::connectionHandler(), RTSPServer::continueRegisterStream(), NetAddress::data(), Medium::envir(), NetAddressList::firstAddress(), UsageEnvironment::getErrno(), ignoreSigPipeOnSocket(), MAKE_SOCKADDR_IN, NULL, Port::num(), NetAddressList::numAddresses(), RTSPServer::RegisterRequestRecord, RTSPServer::RegisterRequestRecord::remoteAddress(), UsageEnvironment::setResultErrMsg(), setupStreamSocket(), SOCKET_EXCEPTION, SOCKET_WRITABLE, RTSPServer::RegisterRequestRecord::socketNum(), and UsageEnvironment::taskScheduler().

00116                                                                                  {
00117   RegisterRequestRecord* registerRequest = new RegisterRequestRecord(*this, serverMediaSession, responseHandler);
00118 
00119   do {
00120     // Begin by resolving "remoteClientNameOrAddress" to an IP address (if it's not already one):
00121     NetAddressList addresses(remoteClientNameOrAddress);
00122     if (addresses.numAddresses() == 0) {
00123       envir() << "Failed to find network address for \"" << remoteClientNameOrAddress << "\"";
00124       break;
00125     }
00126     netAddressBits remoteAddress = *(unsigned*)(addresses.firstAddress()->data());
00127 
00128     // Try to connect to this address, with the specified port:
00129     int& sock = registerRequest->socketNum(); // alias
00130     sock = setupStreamSocket(envir(), 0);
00131     if (sock < 0) break;
00132     ignoreSigPipeOnSocket(sock); // so that servers on the same host that get killed don't also kill us
00133 
00134     MAKE_SOCKADDR_IN(remoteSockaddr, remoteAddress, remotePort.num());
00135     registerRequest->remoteAddress() = remoteSockaddr;
00136 #ifdef DEBUG
00137     fprintf(stderr, "REGISTER: connecting to %s (%s), port %u...\n",
00138             remoteClientNameOrAddress, AddressString(remoteAddress).val(), ntohs(remotePort.num()));
00139 #endif
00140     if (connect(sock, (struct sockaddr*) &remoteSockaddr, sizeof remoteSockaddr) != 0) {
00141       int const err = envir().getErrno();
00142       if (err == EINPROGRESS || err == EWOULDBLOCK) {
00143         // The connection is pending; we'll need to handle it later.  Wait for our socket to be 'writable', or have an exception.
00144 #ifdef DEBUG
00145         fprintf(stderr, "...pending...\n");
00146 #endif
00147         envir().taskScheduler().
00148           setBackgroundHandling(sock, SOCKET_WRITABLE|SOCKET_EXCEPTION,
00149                                 (TaskScheduler::BackgroundHandlerProc*)&RegisterRequestRecord::connectionHandler, registerRequest);
00150         return sock;
00151       }
00152 
00153       envir().setResultErrMsg("connect() failed: ");
00154 #ifdef DEBUG
00155       fprintf(stderr, "...Failed:%s\n", envir().getResultMsg());
00156 #endif
00157       break;
00158     }
00159 
00160     // Having connected to the remote site, use the socket to continue REGISTERing our stream:
00161     return continueRegisterStream(registerRequest);
00162   } while (0);
00163 
00164   // An error occurred:
00165   registerRequest->callResponseHandler(0, NULL);
00166   return -1;
00167 }

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

Definition at line 170 of file RTSPServer.cpp.

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

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

00170                                                                               {
00171   char* urlPrefix = rtspURLPrefix(clientSocket);
00172   char const* sessionName = serverMediaSession->streamName();
00173 
00174   char* resultURL = new char[strlen(urlPrefix) + strlen(sessionName) + 1];
00175   sprintf(resultURL, "%s%s", urlPrefix, sessionName);
00176 
00177   delete[] urlPrefix;
00178   return resultURL;
00179 }

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

Definition at line 181 of file RTSPServer.cpp.

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

Referenced by main(), and RTSPServer::rtspURL().

00181                                                       {
00182   struct sockaddr_in ourAddress;
00183   if (clientSocket < 0) {
00184     // Use our default IP address in the URL:
00185     ourAddress.sin_addr.s_addr = ReceivingInterfaceAddr != 0
00186       ? ReceivingInterfaceAddr
00187       : ourIPAddress(envir()); // hack
00188   } else {
00189     SOCKLEN_T namelen = sizeof ourAddress;
00190     getsockname(clientSocket, (struct sockaddr*)&ourAddress, &namelen);
00191   }
00192 
00193   char urlBuffer[100]; // more than big enough for "rtsp://<ip-address>:<port>/"
00194 
00195   portNumBits portNumHostOrder = ntohs(fRTSPServerPort.num());
00196   if (portNumHostOrder == 554 /* the default port number */) {
00197     sprintf(urlBuffer, "rtsp://%s/", AddressString(ourAddress).val());
00198   } else {
00199     sprintf(urlBuffer, "rtsp://%s:%hu/",
00200             AddressString(ourAddress).val(), portNumHostOrder);
00201   }
00202 
00203   return strDup(urlBuffer);
00204 }

UserAuthenticationDatabase * RTSPServer::setAuthenticationDatabase ( UserAuthenticationDatabase newDB  )  [inherited]

Definition at line 206 of file RTSPServer.cpp.

References RTSPServer::fAuthDB.

00206                                                                                                    {
00207   UserAuthenticationDatabase* oldDB = fAuthDB;
00208   fAuthDB = newDB;
00209 
00210   return oldDB;
00211 }

Boolean RTSPServer::setUpTunnelingOverHTTP ( Port  httpPort  )  [inherited]

Definition at line 213 of file RTSPServer.cpp.

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

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

00213                                                         {
00214   fHTTPServerSocket = setUpOurSocket(envir(), httpPort);
00215   if (fHTTPServerSocket >= 0) {
00216     fHTTPServerPort = httpPort;
00217     envir().taskScheduler().turnOnBackgroundReadHandling(fHTTPServerSocket,
00218                                                          (TaskScheduler::BackgroundHandlerProc*)&incomingConnectionHandlerHTTP, this);
00219     return True;
00220   }
00221 
00222   return False;
00223 }

portNumBits RTSPServer::httpServerPortNum (  )  const [inherited]

Definition at line 225 of file RTSPServer.cpp.

References RTSPServer::fHTTPServerPort, and Port::num().

Referenced by main().

00225                                                 {
00226   return ntohs(fHTTPServerPort.num());
00227 }

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

Definition at line 231 of file RTSPServer.cpp.

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

Referenced by createNew(), RTSPServerSupportingHTTPStreaming::createNew(), RTSPServerWithREGISTERProxying::createNew(), RTSPServer::createNew(), and RTSPServer::setUpTunnelingOverHTTP().

00231                                                                    {
00232   int ourSocket = -1;
00233 
00234   do {
00235     // The following statement is enabled by default.
00236     // Don't disable it (by defining ALLOW_RTSP_SERVER_PORT_REUSE) unless you know what you're doing.
00237 #ifndef ALLOW_RTSP_SERVER_PORT_REUSE
00238     NoReuse dummy(env); // Don't use this socket if there's already a local server using it
00239 #endif
00240 
00241     ourSocket = setupStreamSocket(env, ourPort);
00242     if (ourSocket < 0) break;
00243 
00244     // Make sure we have a big send buffer:
00245     if (!increaseSendBufferTo(env, ourSocket, 50*1024)) break;
00246 
00247     // Allow multiple simultaneous connections:
00248     if (listen(ourSocket, LISTEN_BACKLOG_SIZE) < 0) {
00249       env.setResultErrMsg("listen() failed: ");
00250       break;
00251     }
00252 
00253     if (ourPort.num() == 0) {
00254       // bind() will have chosen a port for us; return it also:
00255       if (!getSourcePort(env, ourSocket, ourPort)) break;
00256     }
00257 
00258     return ourSocket;
00259   } while (0);
00260 
00261   if (ourSocket != -1) ::closeSocket(ourSocket);
00262   return -1;
00263 }

char const * RTSPServer::allowedCommandNames (  )  [protected, virtual, inherited]

Reimplemented in HandlerServerForREGISTERCommand, and RTSPServerWithREGISTERProxying.

Definition at line 265 of file RTSPServer.cpp.

Referenced by RTSPServerWithREGISTERProxying::allowedCommandNames(), RTSPServer::RTSPClientConnection::handleCmd_bad(), RTSPServer::RTSPClientConnection::handleCmd_notSupported(), and RTSPServer::RTSPClientConnection::handleCmd_OPTIONS().

00265                                             {
00266   return "OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER";
00267 }

Boolean RTSPServer::weImplementREGISTER (  )  [protected, virtual, inherited]

Reimplemented in HandlerServerForREGISTERCommand, and RTSPServerWithREGISTERProxying.

Definition at line 269 of file RTSPServer.cpp.

References False.

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

00269                                         {
00270   // By default, servers do not implement our custom "REGISTER" command:
00271   return False;
00272 }

void RTSPServer::implementCmd_REGISTER ( char const *  url,
char const *  urlSuffix,
int  socketToRemoteServer 
) [protected, virtual, inherited]

Reimplemented in HandlerServerForREGISTERCommand, and RTSPServerWithREGISTERProxying.

Definition at line 274 of file RTSPServer.cpp.

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

00274                                                                                                                    {
00275   // By default, this function is a 'noop'
00276 }

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

Definition at line 278 of file RTSPServer.cpp.

References True.

00278                                                                                                                                 {
00279   // default implementation
00280   return True;
00281 }

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

Definition at line 283 of file RTSPServer.cpp.

References True.

00284                                                                                      {
00285   // default implementation; no further access restrictions:
00286   return True;
00287 }

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

Definition at line 1981 of file RTSPServer.cpp.

References RTSPServer::RTSPClientSession.

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

01981                                                       {
01982   return new RTSPClientSession(*this, sessionId);
01983 }

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(), continueAfterClientCreation0(), 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(), RTSPServer::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(), RTSPServer::continueRegisterStream(), 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(), HandlerServerForREGISTERCommand::createNewRTSPClient(), 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::RegisterRequestRecord::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(), RTSPServerWithREGISTERProxying::implementCmd_REGISTER(), RTSPServer::incomingConnectionHandler(), RTSPClient::incomingDataHandler1(), RTCPInstance::incomingReportHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), 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(), RTSPServer::registerStream(), RTCPInstance::reschedule(), RTSPClient::resendCommand(), ProxyRTSPClient::reset(), RTSPClient::resetTCPSockets(), RTSPClient::responseHandlerForHTTP_GET1(), RTSPClient::RTSPClient(), RTSPServer::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(), RTSPServer::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::~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 MediaLookupTable [friend, inherited]

Definition at line 74 of file Media.hh.


Field Documentation

Port RTSPServer::fRTSPServerPort [protected, inherited]

Definition at line 364 of file RTSPServer.hh.

Referenced by RTSPServer::rtspURLPrefix(), and HandlerServerForREGISTERCommand::serverPortNum().


The documentation for this class was generated from the following files:
Generated on Tue Jun 18 13:20:15 2013 for live by  doxygen 1.5.2