This commit is contained in:
azw 2023-06-05 09:50:17 +00:00
parent 70e076631c
commit 571a29eebb
3 changed files with 62 additions and 21 deletions

View File

@ -90,8 +90,20 @@ void KcpSession::UpdateInput()
void KcpSession::DecodeUserPacket(char* buf, int& offset, unsigned int buflen) void KcpSession::DecodeUserPacket(char* buf, int& offset, unsigned int buflen)
{ {
//packagelen + msgid + magiccode + msgbody if (GetSecretKeyPlace()) {
//2 + 2 + 4+ xx + \0 + xx DecodeUserPacketNew(buf, offset, buflen);
} else {
DecodeUserPacketOld(buf, offset, buflen);
}
}
int KcpSession::GetSecretKeyPlace()
{
return secret_key_place_;
}
void KcpSession::DecodeUserPacketOld(char* buf, int& offset, unsigned int buflen)
{
bool warning = false; bool warning = false;
while (buflen - offset >= sizeof(f8::PackHead) + GetSecretKeyLen()) { while (buflen - offset >= sizeof(f8::PackHead) + GetSecretKeyLen()) {
long long secret_key = KcpSession::ReadSecretKey(&buf[offset], buflen); long long secret_key = KcpSession::ReadSecretKey(&buf[offset], buflen);
@ -123,11 +135,37 @@ void KcpSession::DecodeUserPacket(char* buf, int& offset, unsigned int buflen)
} }
if (warning) { if (warning) {
f8::UdpLog::Instance()->Warning("收到kcp client非法数据包", {}); f8::UdpLog::Instance()->Warning("收到kcp client非法数据包1", {});
} }
} }
int KcpSession::GetSecretKeyPlace() void KcpSession::DecodeUserPacketNew(char* buf, int& offset, unsigned int buflen)
{ {
return secret_key_place_; bool warning = false;
while (buflen - offset >= sizeof(f8::PackHead)) {
f8::PackHead* p = (f8::PackHead*)&buf[offset];
if (p->magic_code == f8::MAGIC_CODE) {
if (buflen - offset < sizeof(f8::PackHead) + p->packlen) {
break;
}
App::Instance()->AddSocketMsg(SF_Client,
socket_handle_,
0,
//saddr,
p->msgid,
p->seqid,
&buf[offset + sizeof(f8::PackHead)],
p->packlen,
ST_Udp);
offset += sizeof(f8::PackHead) + p->packlen;
} else {
warning = true;
offset++;
continue;
}
}
if (warning) {
f8::UdpLog::Instance()->Warning("收到kcp client非法数据包2", {});
}
} }

View File

@ -32,6 +32,8 @@ public:
protected: protected:
virtual void DecodeUserPacket(char* buf, int& offset, unsigned int buflen) override; virtual void DecodeUserPacket(char* buf, int& offset, unsigned int buflen) override;
void DecodeUserPacketOld(char* buf, int& offset, unsigned int buflen);
void DecodeUserPacketNew(char* buf, int& offset, unsigned int buflen);
private: private:
void UpdateInput(); void UpdateInput();

View File

@ -133,8 +133,7 @@ void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt)
}); });
return; return;
} }
session->GetKcpSession()->OnRecvPacket(pkt); if (session->GetSecretKeyPlace()) {
#if 0
if (pkt->buf_len > IKCP_OVERHEAD + KcpSession::GetSecretKeyLen()) { if (pkt->buf_len > IKCP_OVERHEAD + KcpSession::GetSecretKeyLen()) {
long long secret_key = KcpSession::ReadSecretKey(pkt->buf + IKCP_OVERHEAD, pkt->buf_len); long long secret_key = KcpSession::ReadSecretKey(pkt->buf + IKCP_OVERHEAD, pkt->buf_len);
if (secret_key == session->GetKcpSession()->GetSecretKey()) { if (secret_key == session->GetKcpSession()->GetSecretKey()) {
@ -156,7 +155,9 @@ void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt)
pkt->buf_len pkt->buf_len
}); });
} }
#endif } else {
session->GetKcpSession()->OnRecvPacket(pkt);
}
} }
void LongSessionMgr::DelSession(int socket_handle) void LongSessionMgr::DelSession(int socket_handle)