diff --git a/server/imserver/WSPListener.go b/server/imserver/WSPListener.go index 212c4e77..0ec12ea1 100644 --- a/server/imserver/WSPListener.go +++ b/server/imserver/WSPListener.go @@ -84,7 +84,7 @@ func (this *WSPListener_) socketRead(conn net.Conn) { prevOffset := 0 for { prevOffset = offset - this.decodePacket(&recvBuf, &offset, recvBufLen) + this.decodePacket(recvBuf, &offset, recvBufLen) if prevOffset >= offset || offset >= recvBufLen { break } @@ -106,43 +106,30 @@ func (this *WSPListener_) socketRead(conn net.Conn) { } } } - /* - 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(recvBuf[offset:], buf[:bufLen]) - recvBufLen += bufLen - warning := false - for recvBufLen - offset >= 12 { - packLen := int(recvBuf[0]) + int(recvBuf[1] << 16) - if recvBuf[8] == 'K' && recvBuf[9] == 'S' { - if recvBufLen - offset < 12 + packLen { - continue - } - hdr := new(q5.MsgHdr) - hdr.MsgId = int(recvBuf[2]) + int(recvBuf[3] << 16) - //hdr.SeqId = int(recvBuf[4]) + int(recvBuf[5] ) - offset += 12 + packLen - } else { - warning = true - offset++ - continue - } - } - 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_) decodePacket(buf []byte, offset *int, bufLen int) { + warning := false + for bufLen - *offset >= 20 { + packLen := int(buf[*offset + 0]) + int(buf[*offset + 1] << 16) + if buf[*offset + 8] == 'K' && buf[*offset + 9] == 'S' { + if bufLen - *offset < 12 + packLen { + continue + } + hdr := new(q5.MsgHdr) + hdr.MsgId = int(buf[*offset + 2]) + int(buf[*offset + 3] << 16) + //hdr.SeqId = int(recvBuf[4]) + int(recvBuf[5] ) + *offset += 20 + packLen + } else { + warning = true + *offset++ + continue + } + } + + if warning { + f5.SysLog().Warning("收到client非法数据包") + } } func (this *WSPListener_) parseNetPkt() {