#include <DynamicRTSPServer.hh>
Inheritance diagram for DynamicRTSPServer:


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 |
| UserAuthenticationDatabase * | setAuthenticationDatabase (UserAuthenticationDatabase *newDB) |
| Boolean | setUpTunnelingOverHTTP (Port httpPort) |
| portNumBits | httpServerPortNum () const |
| UsageEnvironment & | envir () 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 DynamicRTSPServer * | createNew (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 ServerMediaSession * | lookupServerMediaSession (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) |
| TaskToken & | nextTask () |
Static Protected Member Functions | |
| static int | setUpOurSocket (UsageEnvironment &env, Port &ourPort) |
Protected Attributes | |
| Port | fRTSPServerPort |
Friends | |
| class | MediaLookupTable |
Definition at line 28 of file DynamicRTSPServer.hh.
typedef void( RTSPServer::responseHandlerForREGISTER)(RTSPServer *rtspServer, int socketNum, int resultCode, char *resultString) [inherited] |
Definition at line 105 of file RTSPServer.hh.
| 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] |
| 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 }
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().
00081 { 00082 removeServerMediaSession((ServerMediaSession*)(fServerMediaSessions->Lookup(streamName))); 00083 }
| 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().
00099 { 00100 closeAllClientSessionsForServerMediaSession((ServerMediaSession*)(fServerMediaSessions->Lookup(streamName))); 00101 }
| 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().
00110 { 00111 deleteServerMediaSession((ServerMediaSession*)(fServerMediaSessions->Lookup(streamName))); 00112 }
| 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 }
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().
| 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] |
| 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 }
friend class MediaLookupTable [friend, inherited] |
Port RTSPServer::fRTSPServerPort [protected, inherited] |
Definition at line 364 of file RTSPServer.hh.
Referenced by RTSPServer::rtspURLPrefix(), and HandlerServerForREGISTERCommand::serverPortNum().
1.5.2