51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
#include "rtp-udp-transport.h"
|
|
#include "sockpair.h"
|
|
#include "ctypedef.h"
|
|
#include "port/ip-route.h"
|
|
|
|
RTPUdpTransport::RTPUdpTransport()
|
|
{
|
|
m_socket[0] = socket_invalid;
|
|
m_socket[1] = socket_invalid;
|
|
}
|
|
|
|
RTPUdpTransport::~RTPUdpTransport()
|
|
{
|
|
for (int i = 0; i < 2; i++)
|
|
{
|
|
if (socket_invalid != m_socket[i])
|
|
socket_close(m_socket[i]);
|
|
m_socket[i] = socket_invalid;
|
|
}
|
|
}
|
|
|
|
int RTPUdpTransport::Init(const char* ip, unsigned short port[2])
|
|
{
|
|
char local[SOCKET_ADDRLEN];
|
|
int r1 = socket_addr_from(&m_addr[0], &m_addrlen[0], ip, port[0]);
|
|
int r2 = socket_addr_from(&m_addr[1], &m_addrlen[1], ip, port[1]);
|
|
if (0 != r1 || 0 != r2)
|
|
return 0 != r1 ? r1 : r2;
|
|
|
|
r1 = ip_route_get(ip, local);
|
|
return sockpair_create(0==r1 ? local : NULL, m_socket, port);
|
|
}
|
|
|
|
int RTPUdpTransport::Init(socket_t socket[2], const char* peer, unsigned short port[2])
|
|
{
|
|
int r1 = socket_addr_from(&m_addr[0], &m_addrlen[0], peer, port[0]);
|
|
int r2 = socket_addr_from(&m_addr[1], &m_addrlen[1], peer, port[1]);
|
|
if (0 != r1 || 0 != r2)
|
|
return 0 != r1 ? r1 : r2;
|
|
|
|
m_socket[0] = socket[0];
|
|
m_socket[1] = socket[1];
|
|
return 0;
|
|
}
|
|
|
|
int RTPUdpTransport::Send(bool rtcp, const void* data, size_t bytes)
|
|
{
|
|
int i = rtcp ? 1 : 0;
|
|
return socket_sendto(m_socket[i], data, bytes, 0, (sockaddr*)&m_addr[i], m_addrlen[i]);
|
|
}
|