in nmxact/omp/omp.go [47:94]
func DecodeOmp(m coap.Message, rxFilter nmcoap.RxMsgFilter) (nmp.NmpRsp, error) {
// Ignore non-responses.
if m.Code() == coap.GET || m.Code() == coap.PUT || m.Code() == coap.POST ||
m.Code() == coap.DELETE {
return nil, nil
}
if rxFilter != nil {
var err error
m, err = rxFilter.Filter(m)
if err != nil {
return nil, err
}
}
if m.Code() != coap.Created && m.Code() != coap.Deleted &&
m.Code() != coap.Valid && m.Code() != coap.Changed &&
m.Code() != coap.Content {
return nil, fmt.Errorf(
"OMP response specifies unexpected code: %d (%s)", int(m.Code()),
m.Code().String())
}
var om OicMsg
err := codec.NewDecoderBytes(m.Payload(), new(codec.CborHandle)).Decode(&om)
if err != nil {
return nil, fmt.Errorf("Invalid incoming cbor: %s", err.Error())
}
if om.Hdr == nil {
return nil, fmt.Errorf("Invalid incoming OMP response; NMP header" +
"missing")
}
hdr, err := nmp.DecodeNmpHdr(om.Hdr)
if err != nil {
return nil, err
}
rsp, err := nmp.DecodeRspBody(hdr, m.Payload())
if err != nil {
return nil, fmt.Errorf("Error decoding OMP response: %s", err.Error())
}
if rsp == nil {
return nil, nil
}
return rsp, nil
}