This commit is contained in:
aozhiwei 2023-04-24 15:27:51 +08:00
commit b957ba9682
3 changed files with 18 additions and 9 deletions

View File

@ -85,10 +85,10 @@ void KcpSession::DecodeUserPacket(char* buf, int& offset, unsigned int buflen)
//packagelen + msgid + magiccode + msgbody //packagelen + msgid + magiccode + msgbody
//2 + 2 + 4+ xx + \0 + xx //2 + 2 + 4+ xx + \0 + xx
bool warning = false; bool warning = false;
while (buflen - offset >= sizeof(f8::PackHead)) { while (buflen - offset >= sizeof(f8::PackHead) + GetSecretKeyLen()) {
f8::PackHead* p = (f8::PackHead*)&buf[offset]; f8::PackHead* p = (f8::PackHead*)&buf[offset + GetSecretKeyLen()];
if (p->magic_code == f8::MAGIC_CODE) { if (p->magic_code == f8::MAGIC_CODE) {
if (buflen - offset < sizeof(f8::PackHead) + p->packlen) { if (buflen - offset < sizeof(f8::PackHead) + p->packlen + GetSecretKeyLen()) {
break; break;
} }
//a8::XPrintf("Recv MsgId:%d\n", {p->msgid}); //a8::XPrintf("Recv MsgId:%d\n", {p->msgid});
@ -98,7 +98,7 @@ void KcpSession::DecodeUserPacket(char* buf, int& offset, unsigned int buflen)
//saddr, //saddr,
p->msgid, p->msgid,
p->seqid, p->seqid,
&buf[offset + sizeof(f8::PackHead)], &buf[offset + sizeof(f8::PackHead) + GetSecretKeyLen()],
p->packlen); p->packlen);
offset += sizeof(f8::PackHead) + p->packlen; offset += sizeof(f8::PackHead) + p->packlen;
} else { } else {

View File

@ -22,6 +22,12 @@ public:
void SendClientMsg(char* buf, int buf_len); void SendClientMsg(char* buf, int buf_len);
virtual void OnRecvPacket(a8::UdpPacket* pkt) override; virtual void OnRecvPacket(a8::UdpPacket* pkt) override;
static int GetSecretKeyLen() { return sizeof(long long) / 4; }
static long long ReadSecretKey(const char* buf, int buf_len)
{
return buf_len < GetSecretKeyLen() ? 0 : *((long long*)buf);
}
protected: protected:
virtual void DecodeUserPacket(char* buf, int& offset, unsigned int buflen) override; virtual void DecodeUserPacket(char* buf, int& offset, unsigned int buflen) override;

View File

@ -81,11 +81,14 @@ std::shared_ptr<LongSession> LongSessionMgr::GetSession(int socket_handle)
void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt) void LongSessionMgr::ProcUdpPacket(a8::UdpPacket* pkt)
{ {
int socket_handle = 0; const int IKCP_OVERHEAD = 24;
long long secret_key = 0; if (pkt->buf_len > IKCP_OVERHEAD + KcpSession::GetSecretKeyLen()) {
auto session = GetSession(socket_handle); int socket_handle = ikcp_getconv(pkt->buf);
if (session && secret_key == session->GetKcpSession()->GetSecretKey()) { long long secret_key = KcpSession::ReadSecretKey(pkt->buf, pkt->buf_len);
session->GetKcpSession()->OnRecvPacket(pkt); auto session = GetSession(socket_handle);
if (session && secret_key == session->GetKcpSession()->GetSecretKey()) {
session->GetKcpSession()->OnRecvPacket(pkt);
}
} }
} }