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 40 of file Groupsock.cpp.

00041   : Socket(env, 0 /* let kernel choose port */),
00042     fSourcePort(0), fLastSentTTL(0) {
00043 }

OutputSocket::~OutputSocket (  )  [virtual]

Definition at line 50 of file Groupsock.cpp.

00050                             {
00051 }

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

Definition at line 45 of file Groupsock.cpp.

00046   : Socket(env, port),
00047     fSourcePort(0), fLastSentTTL(0) {
00048 }


Member Function Documentation

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

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

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

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 83 of file Groupsock.cpp.

References True.

00084                                                                            {
00085   return True;
00086 }

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

Definition at line 89 of file NetInterface.hh.

References Socket::fSocketNum.

Referenced by GroupsockLookupTable::AddNew(), BasicUDPSource::BasicUDPSource(), Groupsock::changeDestinationParameters(), BasicUDPSource::doGetNextFrame(), BasicUDPSource::doStopGettingFrames(), SocketLookupTable::Fetch(), OnDemandServerMediaSubsession::getStreamParameters(), Groupsock::Groupsock(), Groupsock::handleRead(), MediaSubsession::initiate(), SIPClient::invite1(), main(), Groupsock::multicastSendOnly(), MultiFramedRTPSource::MultiFramedRTPSource(), operator<<(), RTPInterface::RTPInterface(), SIPClient::SIPClient(), RTPInterface::startNetworkReading(), 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 104 of file NetInterface.cpp.

References closeSocket, Socket::fEnv, Socket::fSetLoopback, Socket::fSocketNum, and setupDatagramSocket().

Referenced by Groupsock::changeDestinationParameters().

00104                                        {
00105   closeSocket(fSocketNum);
00106   fSocketNum = setupDatagramSocket(fEnv, newPort, fSetLoopback);
00107   return fSocketNum >= 0;
00108 }


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 Tue Jul 22 06:41:00 2008 for live by  doxygen 1.5.2