check header
This commit is contained in:
parent
83e1b54acc
commit
8c832fb584
12
package.go
12
package.go
|
@ -187,6 +187,12 @@ func (p *protocolPackage) isEncrypted() bool {
|
|||
// 如果协议头标志(prefix)匹配,不断从buf中取出数据,填充到package结构体
|
||||
// 如果buf中的数据出错,无法正确提取package, 则返回(nil,true), 且已从buf中提取的数据不会退回buf
|
||||
func parsePackage(buf *bytes.Buffer) (*protocolPackage, error) {
|
||||
// 协议头标志不匹配,删除未知数据,寻找下一个package起始位置
|
||||
if !bytes.Equal(prefix[:], buf.Bytes()[headOffsetPrefix:headOffsetPrefix+headLengthPrefix]) {
|
||||
glog.Trace("[protocol_package] prefix does not match, need %v got %v", prefix, buf.Bytes()[headOffsetPrefix:headOffsetPrefix+headLengthPrefix])
|
||||
nextPackageHead(buf)
|
||||
return nil, fmt.Errorf("prefix does not match, need %v got %v", prefix, buf.Bytes()[headOffsetPrefix:headOffsetPrefix+headLengthPrefix])
|
||||
}
|
||||
// 判断package的版本
|
||||
// 暂时只处理VERSION版本的package
|
||||
if buf.Len() < headOffsetVersion+headLengthVersion {
|
||||
|
@ -205,12 +211,6 @@ func parsePackage(buf *bytes.Buffer) (*protocolPackage, error) {
|
|||
}
|
||||
head := make([]byte, packageHeadSize)
|
||||
copy(head, buf.Bytes()[:packageHeadSize])
|
||||
// 协议头标志不匹配,删除未知数据,寻找下一个package起始位置
|
||||
if !bytes.Equal(prefix[:], head[headOffsetPrefix:headOffsetPrefix+headLengthPrefix]) {
|
||||
glog.Trace("[protocol_package] prefix does not match, need %v got %v", prefix, head[headOffsetPrefix:headOffsetPrefix+headLengthPrefix])
|
||||
nextPackageHead(buf)
|
||||
return nil, fmt.Errorf("prefix does not match, need %v got %v", prefix, head[headOffsetPrefix:headOffsetPrefix+headLengthPrefix])
|
||||
}
|
||||
// 检查head是否完整,删除未知数据,寻找下一个package起始位置
|
||||
headChecksum := util.BytesSliceToUInt32(head[headOffsetCRC32Checksum : headOffsetCRC32Checksum+headLengthCRC32Checksum])
|
||||
headCrc32 := util.NewCRC32().FromBytes(head[headOffsetNeedCheck:]).Value()
|
||||
|
|
Loading…
Reference in New Issue