接受和发送的数据处理tcp 2字节头
This commit is contained in:
parent
55b5e573a9
commit
8f712d88f3
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue