zgrab2/modules/bacnet/query.go
2018-03-21 16:27:28 -04:00

42 lines
1001 B
Go

package bacnet
import "bytes"
type ReadPropertyRequest struct {
NPDU NPDU `json:"npdu"`
APDU APDU `json:"apdu"`
Selection ReadProperty `json:"read_property"`
}
func (rp *ReadPropertyRequest) Marshal() (out []byte, err error) {
buf := new(bytes.Buffer)
var b []byte
if b, err = rp.NPDU.Marshal(); err != nil {
return
}
buf.Write(b)
if b, err = rp.APDU.Marshal(); err != nil {
return
}
buf.Write(b)
if b, err = rp.Selection.Marshal(); err != nil {
return
}
buf.Write(b)
return buf.Bytes(), nil
}
func NewReadPropertyRequest(oid ObjectID, pid PropertyID) *ReadPropertyRequest {
req := new(ReadPropertyRequest)
req.NPDU.Version = NPDU_VERSION_ASHRAE_135_1995
req.NPDU.Control |= NPDU_FLAG_EXPECTING_RESPONSE
req.APDU.TypeAndFlags = 0
req.APDU.SegmentSizes.set = true
req.APDU.SegmentSizes.raw = 0x05
req.APDU.InvokeID = 1
req.APDU.ServerChoice = SERVER_CHOICE_READ_PROPERTY
req.Selection.Object = oid
req.Selection.Property = pid
return req
}