1
This commit is contained in:
commit
b957ba9682
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user