+
+func (*MsgCodec) DecodeMsgContext(data []byte, msg api.Message) (uint32, error) {
+ if msg == nil {
+ return 0, errors.New("nil message passed in")
+ }
+
+ var getContext func() uint32
+
+ // check which header is expected
+ var header interface{}
+ switch msg.GetMessageType() {
+ case api.RequestMessage:
+ header = new(VppRequestHeader)
+ getContext = func() uint32 { return header.(*VppRequestHeader).Context }
+ case api.ReplyMessage:
+ header = new(VppReplyHeader)
+ getContext = func() uint32 { return header.(*VppReplyHeader).Context }
+ default:
+ return 0, nil
+ }
+
+ buf := bytes.NewReader(data)
+
+ // decode message header
+ if err := struc.Unpack(buf, header); err != nil {
+ return 0, fmt.Errorf("decoding message header failed: %v", err)
+ }
+
+ return getContext(), nil
+}