DataProtocol Class Reference

Base class that defines the transmission protocol. More...

#include <DataProtocol.h>

Inheritance diagram for DataProtocol:

Inheritance graph
[legend]
Collaboration diagram for DataProtocol:

Collaboration graph
[legend]

List of all members.

Public Types

enum  packetHeaderTypeT { DEFAULT, JAMLINK, EMPTY }
 Enum to define packet header types. More...
enum  runModeT { SENDER, RECEIVER }
 Enum to define class modes, SENDER or RECEIVER. More...

Public Member Functions

 DataProtocol (JackTrip *jacktrip, const runModeT runmode, int bind_port, int peer_port)
 The class constructor.
virtual ~DataProtocol ()
 The class destructor.
virtual void run ()=0
 Implements the thread loop.
virtual void stop ()
 Stops the execution of the Thread.
void setAudioPacketSize (const size_t size_bytes)
 Sets the size of the audio part of the packets.
size_t getAudioPacketSizeInBites ()
 Get the size of the audio part of the packets.
virtual void setPeerAddress (const char *peerHostOrIP)=0
 Set the peer address.
virtual void setPeerPort (int port)=0
 Set the peer incomming (receiving) port number.

Protected Member Functions

runModeT getRunMode () const
 Get the Run Mode of the object.

Protected Attributes

volatile bool mStopped
 Boolean stop the execution of the thread.
volatile bool mHasPeerAddress
 Boolean to indicate if the RECEIVER is waiting to obtain peer address.
volatile bool mHasPacketsToReceive
 Boolean that indicates if a packet was received.
JackTripmJackTrip

Private Attributes

int mLocalPort
 Local Port number to Bind.
int mPeerPort
 Peer Port number to Bind.
const runModeT mRunMode
 Run mode, either SENDER or RECEIVER.
struct sockaddr_in mLocalIPv4Addr
 Local IPv4 Address struct.
struct sockaddr_in mPeerIPv4Addr
 Peer IPv4 Address struct.
size_t mAudioPacketSize
 Packet audio part size.

Static Private Attributes

static int sClientsRunning


Detailed Description

Base class that defines the transmission protocol.

This base class defines most of the common method to setup and connect sockets using the individual protocols (UDP, TCP, SCTP, etc).

The class has to be constructed using one of two modes (runModeT):

This has to be specified as a constructor argument. When using, create two instances of the class, one to receive and one to send packets. Each instance will run on a separate thread.

Redundancy and forward error correction should be implemented on each Transport protocol, cause they depend on the protocol itself

Todo:
This Class should contain definition of jacktrip header and basic funcionality to obtain local machine IPs and maybe functions to manipulate IPs. Redundancy and forward error correction should be implemented on each Transport protocol, cause they depend on the protocol itself
Todo:
The transport protocol itself has to be implemented subclassing this class, i.e., using a TCP or UDP protocol.
Even if the underlined transmission protocol is stream oriented (as in TCP), we send packets that are the size of the audio processing buffer. Use AudioInterface::getBufferSize to obtain this value.

Each transmission (i.e., inputs and outputs) run on its own thread.


Member Enumeration Documentation

Enum to define packet header types.

Enumerator:
DEFAULT  Default application header.
JAMLINK  Header to use with Jamlinks.
EMPTY  Empty Header.

Enum to define class modes, SENDER or RECEIVER.

Enumerator:
SENDER  Set class as a Sender (send packets).
RECEIVER  Set class as a Receiver (receives packets).


Constructor & Destructor Documentation

DataProtocol::DataProtocol ( JackTrip jacktrip,
const runModeT  runmode,
int  bind_port,
int  peer_port 
)

The class constructor.

Parameters:
jacktrip Pointer to the JackTrip class that connects all classes (mediator)
runmode Sets the run mode, use either DataProtocol::SENDER or DataProtocol::RECEIVER
headertype packetHeaderTypeT header type to use for packets
bind_port Port number to bind for this socket (this is the receive or send port depending on the runmode)
peer_port Peer port number (this is the receive or send port depending on the runmode)

DataProtocol::~DataProtocol (  )  [virtual]

The class destructor.


Member Function Documentation

virtual void DataProtocol::run (  )  [pure virtual]

Implements the thread loop.

Depending on the runmode, with will run a DataProtocol::SENDER thread or DataProtocol::RECEIVER thread

Implemented in UdpDataProtocol.

virtual void DataProtocol::stop (  )  [inline, virtual]

Stops the execution of the Thread.

void DataProtocol::setAudioPacketSize ( const size_t  size_bytes  )  [inline]

Sets the size of the audio part of the packets.

Parameters:
size_bytes Size in bytes

size_t DataProtocol::getAudioPacketSizeInBites (  )  [inline]

Get the size of the audio part of the packets.

Returns:
size_bytes Size in bytes

virtual void DataProtocol::setPeerAddress ( const char *  peerHostOrIP  )  [pure virtual]

Set the peer address.

Parameters:
peerHostOrIP IPv4 number or host name
Todo:
implement here instead of in the subclass UDP

Implemented in UdpDataProtocol.

virtual void DataProtocol::setPeerPort ( int  port  )  [pure virtual]

Set the peer incomming (receiving) port number.

Parameters:
port Port number
Todo:
implement here instead of in the subclass UDP

Implemented in UdpDataProtocol.

runModeT DataProtocol::getRunMode (  )  const [inline, protected]

Get the Run Mode of the object.

Returns:
SENDER or RECEIVER


Member Data Documentation

volatile bool DataProtocol::mStopped [protected]

Boolean stop the execution of the thread.

volatile bool DataProtocol::mHasPeerAddress [protected]

Boolean to indicate if the RECEIVER is waiting to obtain peer address.

volatile bool DataProtocol::mHasPacketsToReceive [protected]

Boolean that indicates if a packet was received.

int DataProtocol::mLocalPort [private]

Local Port number to Bind.

int DataProtocol::mPeerPort [private]

Peer Port number to Bind.

Reimplemented in UdpDataProtocol.

Run mode, either SENDER or RECEIVER.

Reimplemented in UdpDataProtocol.

struct sockaddr_in DataProtocol::mLocalIPv4Addr [read, private]

Local IPv4 Address struct.

struct sockaddr_in DataProtocol::mPeerIPv4Addr [read, private]

Peer IPv4 Address struct.

int DataProtocol::sClientsRunning [static, private]

Number of clients running to check for ports already used

Note:
Unimplemented, try to find another way to check for used ports

Packet audio part size.

Todo:
check a better way to access the header from the subclasses
JackTrip mediator class


The documentation for this class was generated from the following files: