in proxy/protocol/dubbo/dubbo/codec.go [72:131]
func (p *DubboCodec) EncodeDubboRsp(rsp *DubboRsp, buffer *util.WriteBuffer) int {
// set Magic number.
header := make([]byte, HeaderLength)
// set Magic number.
util.Short2bytes(Magic, header, 0)
// set request and serialization flag.
header[2] = p.GetContentTypeID()
if rsp.IsHeartbeat() {
header[2] |= FlagEvent
}
// set response status.
status := rsp.GetStatus()
header[3] = status
// set request id.
util.Long2bytes(rsp.GetID(), header, 4)
buffer.WriteIndex(HeaderLength)
if status == Ok {
if rsp.IsHeartbeat() {
//encodeHeartbeatData
ret := rsp.GetValue()
buffer.WriteObject(ret)
} else {
//encodeResponseData
except := rsp.GetException()
if except == nil {
ret := rsp.GetValue()
if ret == nil {
buffer.WriteByte(ResponseNullValue)
} else {
//buffer.WriteByte(ResponseValue)
if v, ok := ret.([]byte); ok {
buffer.WriteBytes(v)
} else {
buffer.WriteObject(ret)
}
}
} else {
buffer.WriteByte(ResponseWithException)
buffer.WriteObject(except)
}
}
} else {
if rsp.GetErrorMsg() == "" {
buffer.WriteByte(ResponseNullValue)
} else {
buffer.WriteObject(rsp.GetErrorMsg())
}
}
len := buffer.WrittenBytes() - HeaderLength
util.Int2bytes(len, header, 12)
buffer.WriteIndex(0)
buffer.WriteBytes(header)
buffer.WriteIndex(HeaderLength + len)
return 0
}