接受和发送的数据处理tcp 2字节头

This commit is contained in:
宣伟 2022-11-17 17:00:43 +08:00
parent 55b5e573a9
commit 8f712d88f3
4 changed files with 20 additions and 9 deletions

View File

@ -16,8 +16,8 @@ using namespace std;
namespace mediakit {
static string getUserName(const Buffer::Ptr &buffer) {
auto buf = buffer->data();
auto len = buffer->size();
auto buf = buffer->data() + 2;
auto len = buffer->size() - 2;
if (!RTC::StunPacket::IsStun((const uint8_t *) buf, len)) {
return "";
}
@ -55,9 +55,8 @@ WebRtcSession::~WebRtcSession() {
}
void WebRtcSession::onRecv(const Buffer::Ptr &buffer) {
if (_find_transport) {
//只允许寻找一次transport
_find_transport = false;
//只允许寻找一次transport
if (!_transport) {
auto user_name = getUserName(buffer);
auto transport = WebRtcTransportManager::Instance().getItem(user_name);
//TODO fix this poller is not current thread
@ -68,7 +67,7 @@ void WebRtcSession::onRecv(const Buffer::Ptr &buffer) {
}
_ticker.resetTime();
CHECK(_transport);
_transport->inputSockData(buffer->data(), buffer->size(), (struct sockaddr *)&_peer_addr);
_transport->inputSockData(buffer->data() + 2, buffer->size() - 2, (struct sockaddr *)&_peer_addr);
}
void WebRtcSession::onError(const SockException &err) {

View File

@ -31,7 +31,6 @@ public:
static EventPoller::Ptr queryPoller(const Buffer::Ptr &buffer);
private:
bool _find_transport = true;
Ticker _ticker;
struct sockaddr_storage _peer_addr;
std::shared_ptr<WebRtcTransportImp> _transport;

View File

@ -418,6 +418,18 @@ void WebRtcTransportImp::onSendSockData(Buffer::Ptr buf, bool flush, RTC::Transp
WarnL << "send data failed:" << buf->size();
return;
}
//增加tcp两字节头
auto pkt = _packet_pool.obtain2();
int len = buf->size();
pkt->setCapacity(buf->size() + 2 + 1);
char tcp_len[2] = {0};
tcp_len[0] = ((int16_t)len >> 8)&0xff;
tcp_len[1] = (int16_t)len & 0xff;
pkt->assign2(tcp_len, 2);
pkt->assign2(buf->data(), len , 2);
pkt->setSize(len + 2);
// 一次性发送一帧的rtp数据提高网络io性能
_selected_session->setSendFlushFlag(flush);
_selected_session->send(std::move(buf));

View File

@ -127,6 +127,9 @@ protected:
void OnDtlsTransportSendData(const RTC::DtlsTransport *dtlsTransport, const uint8_t *data, size_t len) override;
void OnDtlsTransportApplicationDataReceived(const RTC::DtlsTransport *dtlsTransport, const uint8_t *data, size_t len) override;
// 循环池
ResourcePool<BufferRaw> _packet_pool;
protected:
//// ice相关的回调 ///
void OnIceServerSendStunPacket(const RTC::IceServer *iceServer, const RTC::StunPacket *packet, RTC::TransportTuple *tuple) override;
@ -179,8 +182,6 @@ private:
std::shared_ptr<RTC::SrtpSession> _srtp_session_send;
std::shared_ptr<RTC::SrtpSession> _srtp_session_recv;
Ticker _ticker;
//循环池
ResourcePool<BufferRaw> _packet_pool;
#ifdef ENABLE_SCTP
RTC::SctpAssociationImp::Ptr _sctp;