RTSPOverHTTPServer Class Reference

#include <RTSPOverHTTPServer.hh>

Inheritance diagram for RTSPOverHTTPServer:

Inheritance graph
[legend]
Collaboration diagram for RTSPOverHTTPServer:

Collaboration graph
[legend]

Public Member Functions

UsageEnvironmentenvir () const
char const * name () const
virtual Boolean isSource () const
virtual Boolean isSink () const
virtual Boolean isRTCPInstance () const
virtual Boolean isRTSPClient () const
virtual Boolean isRTSPServer () const
virtual Boolean isMediaSession () const
virtual Boolean isServerMediaSession () const
virtual Boolean isDarwinInjector () const

Static Public Member Functions

static RTSPOverHTTPServercreateNew (UsageEnvironment &env, Port ourHTTPPort=80, Port rtspServerPort=554, char const *rtspServerHostName="localhost")
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

 RTSPOverHTTPServer (UsageEnvironment &env, int ourSocket, Port rtspServerPort, char const *rtspServerHostName)
virtual ~RTSPOverHTTPServer ()
TaskTokennextTask ()

Static Protected Member Functions

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

Private Member Functions

void incomingConnectionHandler1 ()

Static Private Member Functions

static void incomingConnectionHandler (void *, int)

Private Attributes

int fServerSocket
Port fRTSPServerPort
char * fRTSPServerHostName

Friends

class RTSPOverHTTPTunnel

Data Structures

class  HTTPClientConnection

Detailed Description

Definition at line 31 of file RTSPOverHTTPServer.hh.


Constructor & Destructor Documentation

RTSPOverHTTPServer::RTSPOverHTTPServer ( UsageEnvironment env,
int  ourSocket,
Port  rtspServerPort,
char const *  rtspServerHostName 
) [protected]

Definition at line 90 of file RTSPOverHTTPServer.cpp.

References env, fServerSocket, incomingConnectionHandler(), UsageEnvironment::taskScheduler(), and TaskScheduler::turnOnBackgroundReadHandling().

Referenced by createNew().

00092   : Medium(env),
00093     fServerSocket(ourSocket),
00094     fRTSPServerPort(rtspServerPort), fRTSPServerHostName(strDup(rtspServerHostName)) {
00095 #ifdef USE_SIGNALS
00096   // Ignore the SIGPIPE signal, so that clients on the same host that are killed
00097   // don't also kill us:
00098   signal(SIGPIPE, SIG_IGN);
00099 #endif
00100 
00101   // Arrange to handle connections from others:
00102   env.taskScheduler().turnOnBackgroundReadHandling(fServerSocket,
00103            (TaskScheduler::BackgroundHandlerProc*)&incomingConnectionHandler,
00104                                                    this);
00105 }

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

Definition at line 107 of file RTSPOverHTTPServer.cpp.

References fRTSPServerHostName.

00107                                         {
00108   delete[] fRTSPServerHostName;
00109 }


Member Function Documentation

RTSPOverHTTPServer * RTSPOverHTTPServer::createNew ( UsageEnvironment env,
Port  ourHTTPPort = 80,
Port  rtspServerPort = 554,
char const *  rtspServerHostName = "localhost" 
) [static]

Definition at line 42 of file RTSPOverHTTPServer.cpp.

References closeSocket, env, NULL, RTSPOverHTTPServer(), and setUpOurSocket().

Referenced by main().

00043                                                                                    {
00044   int ourSocket = -1;
00045 
00046   do {
00047     int ourSocket = setUpOurSocket(env, ourHTTPPort);
00048     if (ourSocket == -1) break;
00049 
00050     return new RTSPOverHTTPServer(env, ourSocket, rtspServerPort, rtspServerHostName);
00051   } while (0);
00052 
00053   if (ourSocket != -1) ::closeSocket(ourSocket);
00054   return NULL;
00055 }

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

Definition at line 59 of file RTSPOverHTTPServer.cpp.

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

Referenced by createNew().

00059                                                                            {
00060   int ourSocket = -1;
00061 
00062   do {
00063     NoReuse dummy; // Don't use this socket if there's already a local server using it
00064 
00065     ourSocket = setupStreamSocket(env, ourPort);
00066     if (ourSocket < 0) break;
00067 
00068     // Make sure we have a big send buffer:
00069     if (!increaseSendBufferTo(env, ourSocket, 50*1024)) break;
00070 
00071     // Allow multiple simultaneous connections:
00072     if (listen(ourSocket, LISTEN_BACKLOG_SIZE) < 0) {
00073       env.setResultErrMsg("listen() failed: ");
00074       break;
00075     }
00076 
00077     if (ourPort.num() == 0) {
00078       // bind() will have chosen a port for us; return it also:
00079       if (!getSourcePort(env, ourSocket, ourPort)) break;
00080     }
00081 
00082     return ourSocket;
00083   } while (0);
00084 
00085   if (ourSocket != -1) ::closeSocket(ourSocket);
00086   return -1;
00087 }

void RTSPOverHTTPServer::incomingConnectionHandler ( void *  ,
int   
) [static, private]

Definition at line 111 of file RTSPOverHTTPServer.cpp.

References incomingConnectionHandler1().

Referenced by RTSPOverHTTPServer().

00111                                                                                {
00112   RTSPOverHTTPServer* server = (RTSPOverHTTPServer*)instance;
00113   server->incomingConnectionHandler1();
00114 }

void RTSPOverHTTPServer::incomingConnectionHandler1 (  )  [private]

Definition at line 116 of file RTSPOverHTTPServer.cpp.

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

Referenced by incomingConnectionHandler().

00116                                                     {
00117   struct sockaddr_in clientAddr;
00118   SOCKLEN_T clientAddrLen = sizeof clientAddr;
00119   int clientSocket = accept(fServerSocket, (struct sockaddr*)&clientAddr,
00120                             &clientAddrLen);
00121   if (clientSocket < 0) {
00122     int err = envir().getErrno();
00123     if (err != EWOULDBLOCK) {
00124       envir().setResultErrMsg("accept() failed: ");
00125     }
00126     return;
00127   }
00128   makeSocketNonBlocking(clientSocket);
00129   increaseSendBufferTo(envir(), clientSocket, 50*1024);
00130 #if defined(DEBUG) || defined(DEBUG_CONNECTIONS)
00131   fprintf(stderr, "accept()ed connection from %s\n", our_inet_ntoa(clientAddr.sin_addr));
00132 #endif
00133 
00134   // Create a new object for handling this HTTP connection:
00135   new HTTPClientConnection(*this, clientSocket);
00136 }

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

Definition at line 65 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().

00066                                                          {
00067   resultMedium = MediaLookupTable::ourMedia(env)->lookup(mediumName);
00068   if (resultMedium == NULL) {
00069     env.setResultMsg("Medium ", mediumName, " does not exist");
00070     return False;
00071   }
00072 
00073   return True;
00074 }

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

Definition at line 76 of file Media.cpp.

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

Referenced by afterPlaying(), Medium::close(), closeMediaSinks(), OnDemandServerMediaSubsession::closeStreamSource(), WAVAudioFileSource::createNew(), QCELPAudioRTPSource::createNew(), MP3HTTPSource::createNew(), MP3FileSource::createNew(), AMRAudioRTPSource::createNew(), WAVAudioFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), MediaSubsession::deInitiate(), MediaSubsession::initiate(), MPEG1or2ProgramStreamFileDuration(), MPEG1or2Demux::noteElementaryStreamDeletion(), ByteStreamMultiFileSource::onSourceClosure1(), StreamState::reclaim(), RTSPServer::removeServerMediaSession(), OnDemandServerMediaSubsession::sdpLines(), shutdown(), H264VideoRTPSink::stopPlaying(), subsessionAfterPlaying(), ClientTrickPlayState::updateStateOnScaleChange(), AMRDeinterleaver::~AMRDeinterleaver(), ByteStreamMultiFileSource::~ByteStreamMultiFileSource(), DarwinInjector::~DarwinInjector(), FramedFilter::~FramedFilter(), H264VideoRTPSink::~H264VideoRTPSink(), InputESSourceRecord::~InputESSourceRecord(), MPEG1or2Demux::~MPEG1or2Demux(), MPEG1or2FileServerDemux::~MPEG1or2FileServerDemux(), MPEG2TransportFileServerMediaSubsession::~MPEG2TransportFileServerMediaSubsession(), MPEG2TransportStreamFromPESSource::~MPEG2TransportStreamFromPESSource(), ServerMediaSession::~ServerMediaSession(), and ServerMediaSubsession::~ServerMediaSubsession().

00076                                                           {
00077   MediaLookupTable::ourMedia(env)->remove(name);
00078 }

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

Definition at line 80 of file Media.cpp.

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

00080                                  {
00081   if (medium == NULL) return;
00082 
00083   close(medium->envir(), medium->name());
00084 }

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

Definition at line 59 of file Media.hh.

References Medium::fEnviron.

Referenced by QuickTimeFileSink::addArbitraryString(), FileSink::addData(), MPEG2IFrameIndexFromTransportStream::addToTail(), StreamParser::afterGettingBytes(), MultiFramedRTPSink::afterGettingFrame1(), InputESSourceRecord::afterGettingFrame1(), MPEG2TransportStreamFramer::afterGettingFrame1(), MPEG2IFrameIndexFromTransportStream::afterGettingFrame1(), HTTPSink::afterGettingFrame1(), BasicUDPSink::afterGettingFrame1(), MPEG4VideoFileServerMediaSubsession::afterPlayingDummy1(), MPEG4VideoStreamParser::analyzeVOLHeader(), RTSPClient::announceSDPDescription(), announceStream(), MPEG4VideoFileServerMediaSubsession::checkForAuxSDPLine1(), Medium::close(), MPEG2IFrameIndexFromTransportStream::compactParseBuffer(), QuickTimeFileSink::continuePlaying(), HTTPSink::continuePlaying(), H264VideoRTPSink::continuePlaying(), AVIFileSink::continuePlaying(), MPEG4VideoFileServerMediaSubsession::createNewRTPSink(), MPEG2TransportFileServerMediaSubsession::createNewRTPSink(), MPEG1or2VideoFileServerMediaSubsession::createNewRTPSink(), MPEG1or2DemuxedServerMediaSubsession::createNewRTPSink(), H263plusVideoFileServerMediaSubsession::createNewRTPSink(), AMRAudioFileServerMediaSubsession::createNewRTPSink(), ADTSAudioFileServerMediaSubsession::createNewRTPSink(), MPEG4VideoFileServerMediaSubsession::createNewStreamSource(), MPEG2TransportFileServerMediaSubsession::createNewStreamSource(), MPEG1or2VideoFileServerMediaSubsession::createNewStreamSource(), MPEG1or2DemuxedServerMediaSubsession::createNewStreamSource(), H263plusVideoFileServerMediaSubsession::createNewStreamSource(), AMRAudioFileServerMediaSubsession::createNewStreamSource(), ADTSAudioFileServerMediaSubsession::createNewStreamSource(), MPEG2IFrameIndexFromTransportStream::deliverIndexRecord(), SegmentQueue::dequeue(), RTSPClient::describeURL(), WAVAudioFileSource::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(), ByteStreamFileSource::doReadFromFile(), MPEG1or2VideoRTPSink::doSpecialFrameHandling(), MP3ADURTPSink::doSpecialFrameHandling(), H263plusVideoRTPSink::doSpecialFrameHandling(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SegmentQueue::enqueueNewSegment(), StreamParser::ensureValidBytes1(), MediaSubsession::env(), SubsessionIOState::envir(), RTSPServer::RTSPClientSession::envir(), RTSPOverHTTPServer::HTTPClientConnection::envir(), RTPInterface::envir(), AVISubsessionIOState::envir(), ServerMediaSession::generateSDPDescription(), RTPSource::getAttributes(), MP3FileSource::getAttributes(), MP3ADUTranscoder::getAttributes(), MediaSource::getAttributes(), MPEG4VideoFileServerMediaSubsession::getAuxSDPLine(), RTSPClient::getMediaSessionParameter(), getMPEG1or2TimeCode(), FramedSource::getNextFrame(), getOptionsResponse(), SIPClient::getResponse(), RTSPClient::getResponse(), RTSPClient::getResponse1(), SIPClient::getResponseCode(), getSDPDescriptionFromURL(), OnDemandServerMediaSubsession::getStreamParameters(), RTSPServer::incomingConnectionHandler1(), incomingConnectionHandler1(), RTCPInstance::incomingReportHandler1(), RTSPClient::incomingRequestHandler1(), MP3FileSource::initializeStream(), MediaSession::initializeWithSDP(), MediaSession::initiateByMediaType(), SIPClient::invite1(), DynamicRTSPServer::lookupServerMediaSession(), MPEG4GenericRTPSource::MPEG4GenericRTPSource(), MPEG1or2FileServerDemux::newElementaryStream(), MPEG1or2Demux::newElementaryStream(), MPEG4GenericBufferedPacket::nextEnclosedFrameSize(), AMRBufferedPacket::nextEnclosedFrameSize(), RTSPClient::openConnectionFromURL(), MPEG2TransportStreamIndexFile::openFid(), MPEG2IFrameIndexFromTransportStream::parseFrame(), AC3AudioStreamParser::parseFrame(), RTSPClient::parseGetParameterHeader(), MPEGProgramStreamParser::parsePackHeader(), MPEGProgramStreamParser::parsePESPacket(), SIPClient::parseResponseCode(), RTSPClient::parseResponseCode(), MediaSession::parseSDPLine(), MPEG1or2VideoStreamParser::parseSlice(), MPEGProgramStreamParser::parseSystemHeader(), MPEG4VideoStreamParser::parseVideoObjectLayer(), MPEG4VideoStreamParser::parseVideoObjectPlane(), MPEG4VideoStreamParser::parseVisualObject(), RTSPClient::pauseMediaSession(), RTSPClient::pauseMediaSubsession(), RTSPClient::playMediaSession(), RTSPClient::playMediaSubsession(), AC3AudioRTPSource::processSpecialHeader(), SIPClient::processURL(), AC3AudioStreamParser::readAndSaveAFrame(), RTSPClient::recordMediaSubsession(), MPEG1or2Demux::registerReadInterest(), RTCPInstance::reschedule(), RTSPServer::rtspURLPrefix(), RTCPInstance::schedule(), OnDemandServerMediaSubsession::sdpLines(), SIPClient::sendACK(), SIPClient::sendBYE(), SIPClient::sendINVITE(), RTSPClient::sendOptionsCmd(), MultiFramedRTPSink::sendPacketIfNecessary(), SIPClient::sendRequest(), RTSPClient::sendRequest(), DarwinInjector::setDestination(), RTSPClient::setMediaSessionParameter(), RTSPClient::setupHTTPTunneling(), RTSPClient::setupMediaSubsession(), QuickTimeFileSink::setWord(), AVIFileSink::setWord(), SIPClient::SIPClient(), AMRAudioRTPSink::sourceIsCompatibleWithUs(), QuickTimeFileSink::startPlaying(), StreamState::startPlaying(), MediaSink::startPlaying(), AVIFileSink::startPlaying(), MediaSink::stopPlaying(), RTSPClient::teardownMediaSession(), RTSPClient::teardownMediaSubsession(), SIPClient::timerAHandler(), SIPClient::timerBHandler(), SIPClient::timerDHandler(), ClientTrickPlayState::updateStateOnScaleChange(), MPEG2TransportStreamFramer::updateTSPacketDurationEstimate(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), RTSPOverHTTPServer::HTTPClientConnection::~HTTPClientConnection(), RTSPClient::~RTSPClient(), and RTSPServer::~RTSPServer().

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 86 of file Media.cpp.

References False.

Referenced by MediaSource::lookupByName().

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

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

Reimplemented in MediaSink.

Definition at line 90 of file Media.cpp.

References False.

Referenced by MediaSink::lookupByName().

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

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

Reimplemented in RTCPInstance.

Definition at line 94 of file Media.cpp.

References False.

Referenced by RTCPInstance::lookupByName().

00094                                      {
00095   return False; // default implementation
00096 }

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

Reimplemented in RTSPClient.

Definition at line 98 of file Media.cpp.

References False.

Referenced by RTSPClient::lookupByName().

00098                                    {
00099   return False; // default implementation
00100 }

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

Reimplemented in RTSPServer.

Definition at line 102 of file Media.cpp.

References False.

Referenced by RTSPServer::lookupByName().

00102                                    {
00103   return False; // default implementation
00104 }

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

Reimplemented in MediaSession.

Definition at line 106 of file Media.cpp.

References False.

Referenced by MediaSession::lookupByName().

00106                                      {
00107   return False; // default implementation
00108 }

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

Reimplemented in ServerMediaSession.

Definition at line 110 of file Media.cpp.

References False.

Referenced by ServerMediaSession::lookupByName().

00110                                            {
00111   return False; // default implementation
00112 }

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

Reimplemented in DarwinInjector.

Definition at line 114 of file Media.cpp.

References False.

Referenced by DarwinInjector::lookupByName().

00114                                        {
00115   return False; // default implementation
00116 }

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

Definition at line 77 of file Media.hh.

References Medium::fNextTask.

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

00077                         {
00078         return fNextTask;
00079   }


Friends And Related Function Documentation

friend class RTSPOverHTTPTunnel [friend]

Definition at line 125 of file RTSPOverHTTPServer.hh.


Field Documentation

int RTSPOverHTTPServer::fServerSocket [private]

Definition at line 126 of file RTSPOverHTTPServer.hh.

Referenced by incomingConnectionHandler1(), and RTSPOverHTTPServer().

Port RTSPOverHTTPServer::fRTSPServerPort [private]

Definition at line 127 of file RTSPOverHTTPServer.hh.

char* RTSPOverHTTPServer::fRTSPServerHostName [private]

Definition at line 128 of file RTSPOverHTTPServer.hh.

Referenced by ~RTSPOverHTTPServer().


The documentation for this class was generated from the following files:
Generated on Tue Jul 22 06:41:06 2008 for live by  doxygen 1.5.2