in internal/remote/codec.go [319:385]
func (c *rmqCodec) encodeHeader(command *RemotingCommand) ([]byte, error) {
extBytes, err := c.encodeMaps(command.ExtFields)
if err != nil {
return nil, err
}
buf := bytes.NewBuffer(make([]byte, headerFixedLength+len(command.Remark)+len(extBytes)))
buf.Reset()
// request code, length is 2 bytes
err = binary.Write(buf, binary.BigEndian, int16(command.Code))
if err != nil {
return nil, err
}
// language flag, length is 1 byte
err = binary.Write(buf, binary.BigEndian, _Go)
if err != nil {
return nil, err
}
// version flag, length is 2 bytes
err = binary.Write(buf, binary.BigEndian, int16(command.Version))
if err != nil {
return nil, err
}
// opaque flag, opaque is request identifier, length is 4 bytes
err = binary.Write(buf, binary.BigEndian, command.Opaque)
if err != nil {
return nil, err
}
// request flag, length is 4 bytes
err = binary.Write(buf, binary.BigEndian, command.Flag)
if err != nil {
return nil, err
}
// remark length flag, length is 4 bytes
err = binary.Write(buf, binary.BigEndian, int32(len(command.Remark)))
if err != nil {
return nil, err
}
// write remark, len(command.Remark) bytes
if len(command.Remark) > 0 {
err = binary.Write(buf, binary.BigEndian, []byte(command.Remark))
if err != nil {
return nil, err
}
}
err = binary.Write(buf, binary.BigEndian, int32(len(extBytes)))
if err != nil {
return nil, err
}
if len(extBytes) > 0 {
err = binary.Write(buf, binary.BigEndian, extBytes)
if err != nil {
return nil, err
}
}
return buf.Bytes(), nil
}