|
@@ -324,29 +324,30 @@ bool EQProtocolPacket::combine(const EQProtocolPacket *rhs)
|
|
|
bool result=false;
|
|
|
//if(dont_combine)
|
|
|
// return false;
|
|
|
- //if (opcode==OP_Combined && size+rhs->size+5<256) {
|
|
|
- if (opcode==OP_Combined && (rhs->size+3)<=255 && (rhs->size+3+size)<512) {
|
|
|
- unsigned char *tmpbuffer=new unsigned char [size+rhs->size+3];
|
|
|
- memcpy(tmpbuffer,pBuffer,size);
|
|
|
- uint32 offset=size;
|
|
|
- tmpbuffer[offset++]=rhs->Size();
|
|
|
- offset+=rhs->serialize(tmpbuffer+offset);
|
|
|
- size=offset;
|
|
|
+ //if (opcode==OP_Combined && size+rhs->size+5<256) {
|
|
|
+ if (opcode == OP_Combined && size + rhs->size + 5 < 256) {
|
|
|
+ auto tmpbuffer = new unsigned char[size + rhs->size + 3];
|
|
|
+ memcpy(tmpbuffer, pBuffer, size);
|
|
|
+ uint32 offset = size;
|
|
|
+ tmpbuffer[offset++] = rhs->Size();
|
|
|
+ offset += rhs->serialize(tmpbuffer + offset);
|
|
|
+ size = offset;
|
|
|
delete[] pBuffer;
|
|
|
- pBuffer=tmpbuffer;
|
|
|
- result=true;
|
|
|
- } else if( ((size+3) < 255) && ((rhs->size+3)<255) ) {
|
|
|
- unsigned char *tmpbuffer=new unsigned char [size+rhs->size+6];
|
|
|
- uint32 offset=0;
|
|
|
- tmpbuffer[offset++]=Size();
|
|
|
- offset+=serialize(tmpbuffer+offset);
|
|
|
- tmpbuffer[offset++]=rhs->Size();
|
|
|
- offset+=rhs->serialize(tmpbuffer+offset);
|
|
|
- size=offset;
|
|
|
+ pBuffer = tmpbuffer;
|
|
|
+ result = true;
|
|
|
+ }
|
|
|
+ else if (size + rhs->size + 7 < 256) {
|
|
|
+ auto tmpbuffer = new unsigned char[size + rhs->size + 6];
|
|
|
+ uint32 offset = 0;
|
|
|
+ tmpbuffer[offset++] = Size();
|
|
|
+ offset += serialize(tmpbuffer + offset);
|
|
|
+ tmpbuffer[offset++] = rhs->Size();
|
|
|
+ offset += rhs->serialize(tmpbuffer + offset);
|
|
|
+ size = offset;
|
|
|
delete[] pBuffer;
|
|
|
- pBuffer=tmpbuffer;
|
|
|
- opcode=OP_Combined;
|
|
|
- result=true;
|
|
|
+ pBuffer = tmpbuffer;
|
|
|
+ opcode = OP_Combined;
|
|
|
+ result = true;
|
|
|
}
|
|
|
return result;
|
|
|
}
|