From 2f1f77a36d9f33bc8274e4cb0126390ccf66d1e1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 10 Aug 2023 23:25:47 +0800 Subject: [PATCH] 1 --- server/imserver/WSPListener.go | 71 +++++++++++++++++++++++++++++----- server/imserver/constant.go | 4 ++ 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/server/imserver/WSPListener.go b/server/imserver/WSPListener.go index 47bd4d78..741ea338 100644 --- a/server/imserver/WSPListener.go +++ b/server/imserver/WSPListener.go @@ -59,22 +59,71 @@ func (this *WSPListener_) accept() { */ func (this *WSPListener_) socketRead(conn net.Conn) { buf := make([]byte, 1024 * 64) + recvBufLen := 0 + recvBuf := make([]byte, 1024 * 64 * 2) + for { + bufLen, err := conn.Read(buf) + if err == nil && bufLen > 0 { + alreadyReadBytes := 0 + for { + { + readBytes := bufLen - alreadyReadBytes + if readBytes > MAX_PACKET_LEN - recvBufLen { + readBytes = MAX_PACKET_LEN - recvBufLen + } + + if readBytes > 0 { + copy(recvBuf[recvBufLen:], + buf[alreadyReadBytes:alreadyReadBytes + readBytes]) + recvBufLen += readBytes + alreadyReadBytes += readBytes + } + } + + offset := 0 + prevOffset := 0 + for { + prevOffset = offset + this.decodePacket(&recvBuf, &offset, recvBufLen) + if prevOffset > offset || offset > recvBufLen { + break + } + } + + if offset > 0 && offset < recvBufLen { + + } + recvBufLen -= offset + if recvBufLen >= MAX_PACKET_LEN { + panic("recv max packet") + } + + if alreadyReadBytes >= bufLen { + break + } + } + } + } + /* + buf := make([]byte, 1024 * 64) + recvBufLen := 0 recvBuf := make([]byte, 1024 * 64 * 2) offset := 0 for { bufLen, err := conn.Read(buf) if err == nil && bufLen > 0 { - copy(buf[:bufLen], recvBuf[offset:]) + copy(recvBuf[offset:], buf[:bufLen]) + recvBufLen += bufLen warning := false - for bufLen - offset >= 12 { - packLen := int(recvBuf[0]) >> 16 + int(recvBuf[1]) + for recvBufLen - offset >= 12 { + packLen := int(recvBuf[0]) + int(recvBuf[1] << 16) if recvBuf[8] == 'K' && recvBuf[9] == 'S' { - if bufLen - offset < 12 + packLen { + if recvBufLen - offset < 12 + packLen { continue } hdr := new(q5.MsgHdr) - hdr.MsgId = int(recvBuf[0]) >> 16 + int(recvBuf[1]) - hdr.SeqId = int(recvBuf[0]) >> 16 + int(recvBuf[1]) + hdr.MsgId = int(recvBuf[2]) + int(recvBuf[3] << 16) + //hdr.SeqId = int(recvBuf[4]) + int(recvBuf[5] ) offset += 12 + packLen } else { warning = true @@ -82,12 +131,16 @@ func (this *WSPListener_) socketRead(conn net.Conn) { continue } } - copy(recvBuf[:offset], recvBuf[:]) + copy(recvBuf[:], recvBuf[:offset]) if warning { f5.SysLog().Warning("收到client非法数据包") } } - } + }*/ +} + +func (this *WSPListener_) decodePacket(recvBuf *[]byte, offset *int, recvBufLen int) { + f5.SysLog().Warning("收到client非法数据包") } func (this *WSPListener_) parseNetPkt() { @@ -128,6 +181,6 @@ func (this *WSPListener_) sendProxyMsg(conn net.Conn, socketHandle uint16, msg p buff[3] = byte(msgId >> 16) buff[9] = byte(socketHandle & 0xFF) buff[10] = byte(socketHandle >> 16) - copy(msgData[:], buff[12:]) + copy(buff[12:], msgData[:]) conn.Write(buff) } diff --git a/server/imserver/constant.go b/server/imserver/constant.go index 3764474a..c7f4ff03 100644 --- a/server/imserver/constant.go +++ b/server/imserver/constant.go @@ -3,3 +3,7 @@ package main const ( PLAYER_MGR_HANDLER_ID = 1 ) + +const ( + MAX_PACKET_LEN = 1024 * 64 +)