OutputSocket Class Reference

#include <Groupsock.hh>

Inheritance diagram for OutputSocket:

Inheritance graph
[legend]
Collaboration diagram for OutputSocket:

Collaboration graph
[legend]

Public Member Functions

 OutputSocket (UsageEnvironment &env)
virtual ~OutputSocket ()
Boolean write (netAddressBits address, Port port, u_int8_t ttl, unsigned char *buffer, unsigned bufferSize)
int socketNum () const
Port port () const
UsageEnvironmentenv () const

Static Public Attributes

static int DebugLevel = 1
static UsageEnvironmentDefaultUsageEnvironment = NULL

Protected Member Functions

 OutputSocket (UsageEnvironment &env, Port port)
portNumBits sourcePortNum () const
Boolean changePort (Port newPort)

Private Member Functions

virtual Boolean handleRead (unsigned char *buffer, unsigned bufferMaxSize, unsigned &bytesRead, struct sockaddr_in &fromAddress)

Private Attributes

Port fSourcePort
u_int8_t fLastSentTTL

Detailed Description

Definition at line 39 of file Groupsock.hh.


Constructor & Destructor Documentation

OutputSocket::OutputSocket ( UsageEnvironment env  ) 

Definition at line 32 of file Groupsock.cpp.

00033   : Socket(env, 0 /* let kernel choose port */),
00034     fSourcePort(0), fLastSentTTL(0) {
00035 }

OutputSocket::~OutputSocket (  )  [virtual]

Definition at line 42 of file Groupsock.cpp.

00042                             {
00043 }

OutputSocket::OutputSocket ( UsageEnvironment env,
Port  port 
) [protected]

Definition at line 37 of file Groupsock.cpp.

00038   : Socket(env, port),
00039     fSourcePort(0), fLastSentTTL(0) {
00040 }


Member Function Documentation

Boolean OutputSocket::write ( netAddressBits  address,
Port  port,
u_int8_t  ttl,
unsigned char *  buffer,
unsigned  bufferSize 
)

Definition at line 45 of file Groupsock.cpp.

References Socket::DebugLevel, Socket::env(), False, fLastSentTTL, fSourcePort, UsageEnvironment::getResultMsg(), getSourcePort(), Socket::port(), Socket::socketNum(), sourcePortNum(), True, and writeSocket().

Referenced by Groupsock::output().

00046                                                                         {
00047   if (ttl == fLastSentTTL) {
00048     // Optimization: So we don't do a 'set TTL' system call again
00049     ttl = 0;
00050   } else {
00051     fLastSentTTL = ttl;
00052   }
00053   struct in_addr destAddr; destAddr.s_addr = address;
00054   if (!writeSocket(env(), socketNum(), destAddr, port, ttl,
00055                    buffer, bufferSize))
00056     return False;
00057 
00058   if (sourcePortNum() == 0) {
00059     // Now that we've sent a packet, we can find out what the
00060     // kernel chose as our ephemeral source port number:
00061     if (!getSourcePort(env(), socketNum(), fSourcePort)) {
00062       if (DebugLevel >= 1)
00063         env() << *this
00064              << ": failed to get source port: "
00065              << env().getResultMsg() << "\n";
00066       return False;
00067     }
00068   }
00069 
00070   return True;
00071 }

portNumBits OutputSocket::sourcePortNum (  )  const [inline, protected]

Definition at line 50 of file Groupsock.hh.

References fSourcePort, and Port::num().

Referenced by Groupsock::wasLoopedBackFromUs(), and write().

00050 {return fSourcePort.num();}

Boolean OutputSocket::handleRead ( unsigned char *  buffer,
unsigned  bufferMaxSize,
unsigned &  bytesRead,
struct sockaddr_in &  fromAddress 
) [private, virtual]

Implements Socket.

Reimplemented in Groupsock.

Definition at line 75 of file Groupsock.cpp.

References True.

00076                                                                            {
00077   return True;
00078 }

int Socket::socketNum (  )  const [inline, inherited]

Definition at line 89 of file NetInterface.hh.

References Socket::fSocketNum.

Referenced by GroupsockLookupTable::AddNew(), RTCPInstance::addStreamSocket(), BasicUDPSource::BasicUDPSource(), Groupsock::changeDestinationParameters(), continueAfterDESCRIBE(), BasicUDPSource::doGetNextFrame(), BasicUDPSource::doStopGettingFrames(), SocketLookupTable::Fetch(), OnDemandServerMediaSubsession::getStreamParameters(), Groupsock::Groupsock(), Groupsock::handleRead(), MediaSubsession::initiate(), SIPClient::invite1(), Groupsock::multicastSendOnly(), MultiFramedRTPSource::MultiFramedRTPSource(), operator<<(), RTPInterface::RTPInterface(), SIPClient::SIPClient(), RTPInterface::startNetworkReading(), PassiveServerMediaSubsession::startStream(), RTPInterface::stopNetworkReading(), unsetGroupsockBySocket(), write(), BasicUDPSource::~BasicUDPSource(), and Groupsock::~Groupsock().

00089 { return fSocketNum; }

Port Socket::port (  )  const [inline, inherited]

Definition at line 91 of file NetInterface.hh.

References Socket::fPort.

Referenced by Groupsock::addDestination(), PassiveServerMediaSubsession::getStreamParameters(), Groupsock::Groupsock(), operator<<(), SocketLookupTable::Remove(), GroupsockLookupTable::Remove(), Groupsock::removeDestination(), PassiveServerMediaSubsession::sdpLines(), Socket::Socket(), and write().

00091                     {
00092     return fPort;
00093   }

UsageEnvironment& Socket::env (  )  const [inline, inherited]

Definition at line 95 of file NetInterface.hh.

References Socket::fEnv.

Referenced by Groupsock::changeDestinationParameters(), getGroupsockBySocket(), getSocketTable(), Groupsock::Groupsock(), Groupsock::handleRead(), Groupsock::multicastSendOnly(), Groupsock::output(), Groupsock::outputToAllMembersExcept(), setGroupsockBySocket(), socketReadHandler(), unsetGroupsockBySocket(), Groupsock::wasLoopedBackFromUs(), write(), and Groupsock::~Groupsock().

00095 { return fEnv; }

Boolean Socket::changePort ( Port  newPort  )  [protected, inherited]

Definition at line 97 of file NetInterface.cpp.

References closeSocket, False, Socket::fEnv, Socket::fSocketNum, TaskScheduler::moveSocketHandling(), setupDatagramSocket(), UsageEnvironment::taskScheduler(), True, and TaskScheduler::turnOffBackgroundReadHandling().

Referenced by Groupsock::changeDestinationParameters().

00097                                        {
00098   int oldSocketNum = fSocketNum;
00099   closeSocket(fSocketNum);
00100   fSocketNum = setupDatagramSocket(fEnv, newPort);
00101   if (fSocketNum < 0) {
00102     fEnv.taskScheduler().turnOffBackgroundReadHandling(oldSocketNum);
00103     return False;
00104   }
00105 
00106   if (fSocketNum != oldSocketNum) { // the socket number has changed, so move any event handling for it:
00107     fEnv.taskScheduler().moveSocketHandling(oldSocketNum, fSocketNum);
00108   }
00109   return True;
00110 }


Field Documentation

Port OutputSocket::fSourcePort [private]

Definition at line 58 of file Groupsock.hh.

Referenced by sourcePortNum(), and write().

u_int8_t OutputSocket::fLastSentTTL [private]

Definition at line 59 of file Groupsock.hh.

Referenced by write().

int Socket::DebugLevel = 1 [static, inherited]

Definition at line 97 of file NetInterface.hh.

Referenced by Groupsock::Groupsock(), Groupsock::handleRead(), Groupsock::output(), Groupsock::wasLoopedBackFromUs(), write(), and Groupsock::~Groupsock().

UsageEnvironment * NetInterface::DefaultUsageEnvironment = NULL [static, inherited]

Definition at line 32 of file NetInterface.hh.


The documentation for this class was generated from the following files:
Generated on Thu Feb 2 23:55:42 2012 for live by  doxygen 1.5.2