38 #ifndef __UDPDATAPROTOCOL_H__
39 #define __UDPDATAPROTOCOL_H__
44 #include <QHostAddress>
81 int bind_port,
int peer_port,
82 unsigned int udp_redundancy_factor = 1);
93 #if defined (__WIN_32__)
118 virtual int sendPacket(
const char* buf,
const size_t n);
131 { mBindPort = port; }
136 { mPeerPort = port; mPeerAddr.sin_port = htons(mPeerPort); mPeerAddr6.sin6_port = htons(mPeerPort); }
145 virtual bool getStats(PktStat* stat);
149 void printUdpWaitedTooLong(
int wait_msec);
164 #if defined (__WIN_32__)
184 int full_redundant_packet_size,
185 int full_packet_size,
193 int full_redundant_packet_size,
194 int full_packet_size);
197 bool datagramAvailable();
204 QHostAddress mPeerAddress;
205 struct sockaddr_in mPeerAddr;
206 struct sockaddr_in6 mPeerAddr6;
207 #if defined (__WIN_32__)
215 std::vector<int8_t> mBuffer;
218 int mLastOutOfOrderCount;
221 unsigned int mUdpRedundancyFactor;
222 static QMutex sUdpMutex;
224 std::atomic<uint32_t> mTotCount;
225 std::atomic<uint32_t> mLostCount;
226 std::atomic<uint32_t> mOutOfOrderCount;
227 std::atomic<uint32_t> mRevivedCount;
231 bool mStopSignalSent;
234 double mSimulatedLossRate;
235 double mSimulatedJitterRate;
236 double mSimulatedJitterMaxDelay;
237 std::default_random_engine mRndEngine;
238 std::uniform_real_distribution<double> mUniformDist;
Base class that defines the transmission protocol.
Definition: DataProtocol.h:94
runModeT
Enum to define class modes, SENDER or RECEIVER.
Definition: DataProtocol.h:108
Main class to creates a SERVER (to listen) or a CLIENT (to connect to a listening server) to send aud...
Definition: JackTrip.h:72
UDP implementation of DataProtocol class.
Definition: UdpDataProtocol.h:68
int bindSocket()
Binds the UDP socket to the available address and specified port.
Definition: UdpDataProtocol.cpp:195
void waitForReady(int timeout_msec)
This function blocks until data is available for reading in the socket. The function will timeout aft...
Definition: UdpDataProtocol.cpp:667
void setBindPort(int port)
Sets the bind port number.
Definition: UdpDataProtocol.h:130
virtual void getPeerAddressFromFirstPacket(QHostAddress &peerHostAddress, uint16_t &port)
Obtains the peer address from the first UDP packet received. This address is used by the SERVER mode ...
Definition: UdpDataProtocol.cpp:393
virtual int receivePacket(char *buf, const size_t n)
Receives a packet. It blocks until a packet is received.
Definition: UdpDataProtocol.cpp:333
virtual void receivePacketRedundancy(int8_t *full_redundant_packet, int full_redundant_packet_size, int full_packet_size, uint16_t ¤t_seq_num, uint16_t &last_seq_num, uint16_t &newer_seq_num)
Redundancy algorythm at the receiving end.
Definition: UdpDataProtocol.cpp:707
virtual ~UdpDataProtocol()
The class destructor.
Definition: UdpDataProtocol.cpp:99
UdpDataProtocol(JackTrip *jacktrip, const runModeT runmode, int bind_port, int peer_port, unsigned int udp_redundancy_factor=1)
The class constructor.
Definition: UdpDataProtocol.cpp:70
void setSocket(int &socket)
Definition: UdpDataProtocol.cpp:170
virtual bool getStats(PktStat *stat)
Definition: UdpDataProtocol.cpp:813
virtual void sendPacketRedundancy(int8_t *full_redundant_packet, int full_redundant_packet_size, int full_packet_size)
Redundancy algorythm at the sender's end.
Definition: UdpDataProtocol.cpp:844
virtual void run()
Implements the Thread Loop. To start the thread, call start() ( DO NOT CALL run() )
Definition: UdpDataProtocol.cpp:415
virtual int sendPacket(const char *buf, const size_t n)
Sends a packet.
Definition: UdpDataProtocol.cpp:361
void signalUdpWaitingTooLong()
Definition: moc_UdpDataProtocol.cpp:157
void signalWaitingTooLong(int wait_msec)
Signals when waiting every 10 milliseconds, with the total wait on wait_msec.
Definition: moc_UdpDataProtocol.cpp:150
virtual void setIssueSimulation(double loss, double jitter, double max_delay)
Definition: UdpDataProtocol.cpp:829
void setPeerPort(int port)
Sets the peer port number.
Definition: UdpDataProtocol.h:135
void setPeerAddress(const char *peerHostOrIP)
Set the Peer address to connect to.
Definition: UdpDataProtocol.cpp:115
quint8 uint8_t
Typedef for unsigned char. This type is guaranteed to be 8-bit.
Definition: jacktrip_types.h:69
quint16 uint16_t
Typedef for unsigned short. This type is guaranteed to be 16-bit.
Definition: jacktrip_types.h:71
quint32 uint32_t
Typedef for unsigned int. This type is guaranteed to be 32-bit.
Definition: jacktrip_types.h:73
qint8 int8_t
Typedef for unsigned long long int. This type is guaranteed to be 64-bit.
Definition: jacktrip_types.h:78