mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 09:31:30 +00:00
Fix for unreliable packets not being processed or sent correctly
This commit is contained in:
parent
edf1cfefd3
commit
a1ff12d9ab
@ -382,13 +382,8 @@ void EQ::Net::DaybreakConnection::ProcessPacket(Packet &p)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.GetInt8(0) != 0) {
|
|
||||||
LogF(Logs::Detail, Logs::Netcode, "Error parsing packet, did not start with a 0 frame, not a valid protocol packet.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto opcode = p.GetInt8(1);
|
auto opcode = p.GetInt8(1);
|
||||||
if (opcode == OP_KeepAlive || opcode == OP_OutboundPing) {
|
if (p.GetInt8(0) == 0 && (opcode == OP_KeepAlive || opcode == OP_OutboundPing)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -407,10 +402,16 @@ void EQ::Net::DaybreakConnection::ProcessPacket(Packet &p)
|
|||||||
for (int i = 1; i >= 0; --i) {
|
for (int i = 1; i >= 0; --i) {
|
||||||
switch (m_encode_passes[i]) {
|
switch (m_encode_passes[i]) {
|
||||||
case EncodeCompression:
|
case EncodeCompression:
|
||||||
|
if(temp.GetInt8(0) == 0)
|
||||||
Decompress(temp, DaybreakHeader::size(), temp.Length() - DaybreakHeader::size());
|
Decompress(temp, DaybreakHeader::size(), temp.Length() - DaybreakHeader::size());
|
||||||
|
else
|
||||||
|
Decompress(temp, 1, temp.Length() - 1);
|
||||||
break;
|
break;
|
||||||
case EncodeXOR:
|
case EncodeXOR:
|
||||||
|
if (temp.GetInt8(0) == 0)
|
||||||
Decode(temp, DaybreakHeader::size(), temp.Length() - DaybreakHeader::size());
|
Decode(temp, DaybreakHeader::size(), temp.Length() - DaybreakHeader::size());
|
||||||
|
else
|
||||||
|
Decode(temp, 1, temp.Length() - 1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -425,7 +426,10 @@ void EQ::Net::DaybreakConnection::ProcessPacket(Packet &p)
|
|||||||
for (int i = 1; i >= 0; --i) {
|
for (int i = 1; i >= 0; --i) {
|
||||||
switch (m_encode_passes[i]) {
|
switch (m_encode_passes[i]) {
|
||||||
case EncodeXOR:
|
case EncodeXOR:
|
||||||
|
if (temp.GetInt8(0) == 0)
|
||||||
Decode(temp, DaybreakHeader::size(), temp.Length() - DaybreakHeader::size());
|
Decode(temp, DaybreakHeader::size(), temp.Length() - DaybreakHeader::size());
|
||||||
|
else
|
||||||
|
Decode(temp, 1, temp.Length() - 1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1187,24 +1191,21 @@ void EQ::Net::DaybreakConnection::InternalSend(Packet &p)
|
|||||||
|
|
||||||
if (PacketCanBeEncoded(p)) {
|
if (PacketCanBeEncoded(p)) {
|
||||||
DynamicPacket out;
|
DynamicPacket out;
|
||||||
|
|
||||||
if (p.GetUInt8(0) != 0) {
|
|
||||||
out.PutUInt8(0, 0);
|
|
||||||
out.PutUInt8(1, OP_Combined);
|
|
||||||
out.PutUInt8(2, p.Length());
|
|
||||||
out.PutPacket(3, p);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
out.PutPacket(0, p);
|
out.PutPacket(0, p);
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < 2; ++i) {
|
for (int i = 0; i < 2; ++i) {
|
||||||
switch (m_encode_passes[i]) {
|
switch (m_encode_passes[i]) {
|
||||||
case EncodeCompression:
|
case EncodeCompression:
|
||||||
|
if(out.GetInt8(0) == 0)
|
||||||
Compress(out, DaybreakHeader::size(), out.Length() - DaybreakHeader::size());
|
Compress(out, DaybreakHeader::size(), out.Length() - DaybreakHeader::size());
|
||||||
|
else
|
||||||
|
Compress(out, 1, out.Length() - 1);
|
||||||
break;
|
break;
|
||||||
case EncodeXOR:
|
case EncodeXOR:
|
||||||
|
if (out.GetInt8(0) == 0)
|
||||||
Encode(out, DaybreakHeader::size(), out.Length() - DaybreakHeader::size());
|
Encode(out, DaybreakHeader::size(), out.Length() - DaybreakHeader::size());
|
||||||
|
else
|
||||||
|
Encode(out, 1, out.Length() - 1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@ -81,8 +81,13 @@ void EQ::Net::EQStream::QueuePacket(const EQApplicationPacket *p, bool ack_req)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ack_req) {
|
||||||
m_connection->QueuePacket(out);
|
m_connection->QueuePacket(out);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
m_connection->QueuePacket(out, 0, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQ::Net::EQStream::FastQueuePacket(EQApplicationPacket **p, bool ack_req) {
|
void EQ::Net::EQStream::FastQueuePacket(EQApplicationPacket **p, bool ack_req) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user