Skip to content

Commit 7029d2b

Browse files
committed
refactor(plc4go/bacnetip): multiple improvements helping with debugging
1 parent 9d19f01 commit 7029d2b

File tree

87 files changed

+649
-882
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+649
-882
lines changed

plc4go/internal/bacnetip/ApplicationLayerMessageCodec.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func NewApplicationLayerMessageCodec(localLog zerolog.Logger, udpTransport *udp.
7575
address.AddrTuple = pdu.NewAddressTuple(fmt.Sprintf("%d.%d.%d.%d", address.AddrAddress[0], address.AddrAddress[1], address.AddrAddress[2], address.AddrAddress[3]), *address.AddrPort)
7676
application, err := app.NewBIPSimpleApplication(localLog, device.NewLocalDeviceObject(comp.NoArgs,
7777
comp.NewKWArgs(comp.KWNumberOfAPDURetries, func() *uint { retries := uint(10); return &retries }()),
78-
), *address, &a.deviceInfoCache, nil)
78+
), *address, app.WithApplicationDeviceInfoCache(&a.deviceInfoCache))
7979
if err != nil {
8080
return nil, err
8181
}

plc4go/internal/bacnetip/bacgopes/apdu/apdu_APCI.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func newAPCI(args Args, kwArgs KWArgs, options ...Option) (*_APCI, error) {
103103
_debug("__init__ %r %r", args, kwArgs)
104104
}
105105
a := &_APCI{
106-
_leafName: ExtractLeafName(options, "APCI"),
106+
_leafName: ExtractLeafName(options, StructName()),
107107
}
108108
options = AddLeafTypeIfAbundant(options, a)
109109
a.DebugContents = NewDebugContents(a, "apduType", "apduSeg", "apduMor", "apduSA", "apduSrv",
@@ -516,7 +516,7 @@ func (a *_APCI) String() string {
516516
stype := ""
517517
if a.apduType != nil {
518518
if v, ok := APDUTypes[*a.apduType]; ok {
519-
stype = fmt.Sprintf("%T", v)
519+
stype = QualifiedTypeName(v())
520520
} else {
521521
stype = "?"
522522
}

plc4go/internal/bacnetip/bacgopes/apdu/apdu__APDU.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/pkg/errors"
2727

2828
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
29+
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/debugging"
2930
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
3031
)
3132

@@ -39,14 +40,14 @@ type _APDU interface {
3940
type ___APDU struct {
4041
*__APDU
4142

42-
_leafType string
43+
_leafName string
4344
}
4445

4546
var _ _APDU = (*___APDU)(nil)
4647

4748
func New_APDU(args Args, kwArgs KWArgs, options ...Option) (_APDU, error) {
4849
i := &___APDU{
49-
_leafType: ExtractLeafName(options, "APDU"),
50+
_leafName: ExtractLeafName(options, StructName()),
5051
}
5152
options = AddLeafTypeIfAbundant(options, i)
5253
var err error
@@ -107,7 +108,7 @@ func (a *___APDU) SetContext(context APDU) {
107108
func (a *___APDU) Format(s fmt.State, v rune) {
108109
switch v {
109110
case 'v', 's', 'r':
110-
sname := a._leafType
111+
sname := a._leafName
111112

112113
// the type is the service
113114
stype := ""

plc4go/internal/bacnetip/bacgopes/app/app_Application.go

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -55,33 +55,28 @@ type Application struct {
5555

5656
_startupDisabled bool
5757

58-
// pass through args
59-
argAseID *int `ignore:"true"`
60-
argAse *ApplicationServiceElement `ignore:"true"`
61-
6258
log zerolog.Logger
6359
}
6460

65-
func NewApplication(localLog zerolog.Logger, opts ...func(*Application)) (*Application, error) {
61+
func NewApplication(localLog zerolog.Logger, options ...Option) (*Application, error) {
6662
a := &Application{
6763
log: localLog,
6864
helpers: map[string]func(apdu APDU) error{},
6965
}
70-
for _, opt := range opts {
71-
opt(a)
66+
ApplyAppliers(options, a)
67+
optionsForParent := AddLeafTypeIfAbundant(options, a)
68+
var err error
69+
a.ApplicationServiceElementContract, err = NewApplicationServiceElement(localLog, optionsForParent...)
70+
if err != nil {
71+
return nil, err
7272
}
7373
localLog.Debug().
7474
Stringer("localDevice", a.localDevice).
7575
Stringer("deviceInfoCache", a.deviceInfoCache).
76-
Interface("aseID", a.argAseID).
76+
Interface("aseID", a.GetElementId()).
7777
Msg("NewApplication")
7878
if _debug != nil {
79-
_debug("__init__ %r %r deviceInfoCache=%r aseID=%r", a.localDevice, a.localAddress, a.deviceInfoCache, a.argAse)
80-
}
81-
var err error
82-
a.ApplicationServiceElementContract, err = NewApplicationServiceElement(localLog, OptionalOption2(a.argAseID, a.argAse, WithApplicationServiceElementAseID))
83-
if err != nil {
84-
return nil, err
79+
_debug("__init__ %r %r deviceInfoCache=%r aseID=%r", a.localDevice, a.localAddress, a.deviceInfoCache, a.GetElementId())
8580
}
8681

8782
// local objects by ID and name
@@ -124,23 +119,12 @@ func NewApplication(localLog zerolog.Logger, opts ...func(*Application)) (*Appli
124119
return a, nil
125120
}
126121

127-
func WithApplicationLocalDeviceObject(localDevice LocalDeviceObject) func(*Application) {
128-
return func(a *Application) {
129-
a.localDevice = localDevice
130-
}
131-
}
132-
133-
func WithApplicationAseID(aseID int, ase ApplicationServiceElement) func(*Application) {
134-
return func(a *Application) {
135-
a.argAseID = &aseID
136-
a.argAse = &ase
137-
}
122+
func WithApplicationLocalDeviceObject(localDevice LocalDeviceObject) GenericApplier[*Application] {
123+
return WrapGenericApplier(func(a *Application) { a.localDevice = localDevice })
138124
}
139125

140-
func WithApplicationDeviceInfoCache(deviceInfoCache *appservice.DeviceInfoCache) func(*Application) {
141-
return func(a *Application) {
142-
a.deviceInfoCache = deviceInfoCache
143-
}
126+
func WithApplicationDeviceInfoCache(deviceInfoCache *appservice.DeviceInfoCache) GenericApplier[*Application] {
127+
return WrapGenericApplier(func(a *Application) { a.deviceInfoCache = deviceInfoCache })
144128
}
145129

146130
func (a *Application) GetDeviceInfoCache() *appservice.DeviceInfoCache {

plc4go/internal/bacnetip/bacgopes/app/app_ApplicationIOController.go

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,8 @@ import (
2323
"github.com/pkg/errors"
2424
"github.com/rs/zerolog"
2525

26-
"github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/appservice"
2726
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
2827
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/iocb"
29-
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/local/device"
3028
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
3129
readWriteModel "github.com/apache/plc4x/plc4go/protocols/bacnetip/readwrite/model"
3230
)
@@ -38,50 +36,29 @@ type ApplicationIOController struct {
3836

3937
queueByAddress map[string]*SieveQueue
4038

41-
// pass through args
42-
argDeviceInfoCache *appservice.DeviceInfoCache `ignore:"true"`
43-
argAseID *int `ignore:"true"`
44-
4539
log zerolog.Logger
4640
}
4741

48-
func NewApplicationIOController(localLog zerolog.Logger, localDevice LocalDeviceObject, opts ...func(controller *ApplicationIOController)) (*ApplicationIOController, error) {
42+
func NewApplicationIOController(localLog zerolog.Logger, options ...Option) (*ApplicationIOController, error) {
4943
a := &ApplicationIOController{
5044
// queues for each address
5145
queueByAddress: make(map[string]*SieveQueue),
5246
log: localLog,
5347
}
54-
for _, opt := range opts {
55-
opt(a)
56-
}
48+
ApplyAppliers(options, a)
49+
optionsForParent := AddLeafTypeIfAbundant(options, a)
5750
var err error
58-
a.IOController, err = NewIOController(localLog, "", a)
51+
a.IOController, err = NewIOController(localLog, "", a, optionsForParent...)
5952
if err != nil {
6053
return nil, errors.Wrap(err, "error creating io controller")
6154
}
62-
a.Application, err = NewApplication(localLog, func(application *Application) {
63-
application.localDevice = localDevice
64-
application.deviceInfoCache = a.argDeviceInfoCache
65-
application.argAseID = a.argAseID
66-
})
55+
a.Application, err = NewApplication(localLog, optionsForParent...)
6756
if err != nil {
6857
return nil, errors.Wrap(err, "error creating application")
6958
}
7059
return a, nil
7160
}
7261

73-
func WithApplicationIOControllerDeviceInfoCache(deviceInfoCache *appservice.DeviceInfoCache) func(*ApplicationIOController) {
74-
return func(a *ApplicationIOController) {
75-
a.argDeviceInfoCache = deviceInfoCache
76-
}
77-
}
78-
79-
func WithApplicationIOControllerAseID(aseID *int) func(*ApplicationIOController) {
80-
return func(a *ApplicationIOController) {
81-
a.argAseID = aseID
82-
}
83-
}
84-
8562
func (a *ApplicationIOController) ProcessIO(iocb IOCBContract) error {
8663
a.log.Debug().Stringer("iocb", iocb).Msg("ProcessIO")
8764

plc4go/internal/bacnetip/bacgopes/app/app_BIPForeignApplication.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/appservice"
2727
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/bvllservice"
2828
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comm"
29+
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/comp"
2930
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/local/device"
3031
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/netservice"
3132
. "github.com/apache/plc4x/plc4go/internal/bacnetip/bacgopes/pdu"
@@ -48,34 +49,36 @@ type BIPForeignApplication struct {
4849
log zerolog.Logger
4950
}
5051

51-
func NewBIPForeignApplication(localLog zerolog.Logger, localDevice LocalDeviceObject, localAddress Address, bbmdAddress *Address, bbmdTTL *uint16, deviceInfoCache *DeviceInfoCache, aseID *int) (*BIPForeignApplication, error) {
52+
func NewBIPForeignApplication(localLog zerolog.Logger, localDevice LocalDeviceObject, localAddress Address, bbmdAddress *Address, bbmdTTL uint16, options ...Option) (*BIPForeignApplication, error) {
5253
b := &BIPForeignApplication{
5354
log: localLog,
5455
}
56+
ApplyAppliers(options, b)
57+
optionsForParent := AddLeafTypeIfAbundant(options, b)
5558
var err error
56-
b.ApplicationIOController, err = NewApplicationIOController(localLog, localDevice, WithApplicationIOControllerDeviceInfoCache(deviceInfoCache), WithApplicationIOControllerAseID(aseID))
59+
b.ApplicationIOController, err = NewApplicationIOController(localLog, Combine(optionsForParent, WithApplicationLocalDeviceObject(localDevice))...)
5760
if err != nil {
5861
return nil, errors.Wrap(err, "error creating io controller")
5962
}
60-
b.WhoIsIAmServices, err = NewWhoIsIAmServices(localLog, b)
63+
b.WhoIsIAmServices, err = NewWhoIsIAmServices(localLog, b, optionsForParent...)
6164
if err != nil {
6265
return nil, errors.Wrap(err, "error WhoIs/IAm services")
6366
}
64-
b.ReadWritePropertyServices, err = NewReadWritePropertyServices()
67+
b.ReadWritePropertyServices, err = NewReadWritePropertyServices(optionsForParent...)
6568
if err != nil {
6669
return nil, errors.Wrap(err, "error read write property services")
6770
}
6871

6972
b.localAddress = localAddress
7073

7174
// include a application decoder
72-
b.asap, err = NewApplicationServiceAccessPoint(localLog)
75+
b.asap, err = NewApplicationServiceAccessPoint(localLog, options...)
7376
if err != nil {
7477
return nil, errors.Wrap(err, "error creating application service access point")
7578
}
7679

7780
// pass the device object to the state machine access point, so it can know if it should support segmentation
78-
b.smap, err = NewStateMachineAccessPoint(localLog, localDevice, WithStateMachineAccessPointDeviceInfoCache(deviceInfoCache))
81+
b.smap, err = NewStateMachineAccessPoint(localLog, localDevice, options...)
7982
if err != nil {
8083
return nil, errors.Wrap(err, "error creating state machine access point")
8184
}
@@ -84,13 +87,13 @@ func NewBIPForeignApplication(localLog zerolog.Logger, localDevice LocalDeviceOb
8487
// Note: deviceInfoCache already passed above, so we don't need to do it again here
8588

8689
// a network service access point will be needed
87-
b.nsap, err = NewNetworkServiceAccessPoint(localLog)
90+
b.nsap, err = NewNetworkServiceAccessPoint(localLog, options...)
8891
if err != nil {
8992
return nil, errors.Wrap(err, "error creating network service access point")
9093
}
9194

9295
// give the NSAP a generic network layer service element
93-
b.nse, err = NewNetworkServiceElement(localLog)
96+
b.nse, err = NewNetworkServiceElement(localLog, options...)
9497
if err != nil {
9598
return nil, errors.Wrap(err, "error creating new network service element")
9699
}
@@ -104,15 +107,15 @@ func NewBIPForeignApplication(localLog zerolog.Logger, localDevice LocalDeviceOb
104107
}
105108

106109
// create a generic BIP stack, bound to the Annex J server on the UDP multiplexer
107-
b.bip, err = NewBIPForeign(localLog, WithBIPForeignAddress(bbmdAddress), WithBIPForeignTTL(*bbmdTTL))
110+
b.bip, err = NewBIPForeign(localLog, Combine(options, WithBIPForeignAddress(bbmdAddress), WithBIPForeignTTL(bbmdTTL))...)
108111
if err != nil {
109112
return nil, errors.Wrap(err, "error creating new bip")
110113
}
111-
b.annexj, err = NewAnnexJCodec(localLog)
114+
b.annexj, err = NewAnnexJCodec(localLog, options...)
112115
if err != nil {
113116
return nil, errors.Wrap(err, "error creating new annex j codec")
114117
}
115-
b.mux, err = NewUDPMultiplexer(localLog, b.localAddress, true)
118+
b.mux, err = NewUDPMultiplexer(localLog, b.localAddress, true, options...)
116119
if err != nil {
117120
return nil, errors.Wrap(err, "error creating new udp multiplexer")
118121
}

plc4go/internal/bacnetip/bacgopes/app/app_BIPNetworkApplication.go

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,36 @@ import (
3232

3333
type BIPNetworkApplication struct {
3434
*NetworkServiceElement
35+
3536
localAddress Address
3637
nsap *NetworkServiceAccessPoint
3738
bip any // BIPSimple or BIPForeign
3839
annexj *AnnexJCodec
3940
mux *UDPMultiplexer
4041

41-
// passThroughArgs
42-
argBBMDAddress **Address `ignore:"true"`
43-
argBBMDTTL *uint16 `ignore:"true"`
44-
argEID *int `ignore:"true"`
45-
argASE *ApplicationServiceElement `ignore:"true"`
42+
// args for constructions
43+
argBBMDAddress **Address `ignore:"true"`
44+
argBBMDTTL *uint16 `ignore:"true"`
4645

4746
log zerolog.Logger
4847
}
4948

50-
func NewBIPNetworkApplication(localLog zerolog.Logger, localAddress Address, opts ...func(*BIPNetworkApplication)) (*BIPNetworkApplication, error) {
49+
func NewBIPNetworkApplication(localLog zerolog.Logger, localAddress Address, options ...Option) (*BIPNetworkApplication, error) {
5150
n := &BIPNetworkApplication{
5251
log: localLog,
5352
}
54-
for _, opt := range opts {
55-
opt(n)
56-
}
53+
ApplyAppliers(options, n)
54+
optionsForParent := AddLeafTypeIfAbundant(options, n)
5755
var err error
58-
n.NetworkServiceElement, err = NewNetworkServiceElement(localLog, OptionalOption2(n.argEID, n.argASE, WithNetworkServiceElementEID))
56+
n.NetworkServiceElement, err = NewNetworkServiceElement(localLog, optionsForParent...)
5957
if err != nil {
6058
return nil, errors.Wrap(err, "error creating new network service element")
6159
}
6260

6361
n.localAddress = localAddress
6462

6563
// a network service access point will be needed
66-
n.nsap, err = NewNetworkServiceAccessPoint(localLog)
64+
n.nsap, err = NewNetworkServiceAccessPoint(localLog, options...)
6765
if err != nil {
6866
return nil, errors.Wrap(err, "error creating network service access point")
6967
}
@@ -76,21 +74,21 @@ func NewBIPNetworkApplication(localLog zerolog.Logger, localAddress Address, opt
7674
// create a generic BIP stack, bound to the Annex J server
7775
// on the UDP multiplexer
7876
if n.argBBMDAddress == nil && n.argBBMDTTL == nil {
79-
n.bip, err = NewBIPSimple(localLog)
77+
n.bip, err = NewBIPSimple(localLog, options...)
8078
if err != nil {
8179
return nil, errors.Wrap(err, "error creating BIPSimple")
8280
}
8381
} else {
84-
n.bip, err = NewBIPForeign(localLog, OptionalOption(n.argBBMDAddress, WithBIPForeignAddress), OptionalOption(n.argBBMDTTL, WithBIPForeignTTL))
82+
n.bip, err = NewBIPForeign(localLog, Combine(options, OptionalOption(n.argBBMDAddress, WithBIPForeignAddress), OptionalOption(n.argBBMDTTL, WithBIPForeignTTL))...)
8583
if err != nil {
8684
return nil, errors.Wrap(err, "error creating BIPForeign")
8785
}
8886
}
89-
n.annexj, err = NewAnnexJCodec(localLog)
87+
n.annexj, err = NewAnnexJCodec(localLog, options...)
9088
if err != nil {
9189
return nil, errors.Wrap(err, "error creating new annex j codec")
9290
}
93-
n.mux, err = NewUDPMultiplexer(localLog, n.localAddress, true)
91+
n.mux, err = NewUDPMultiplexer(localLog, n.localAddress, true, options...)
9492
if err != nil {
9593
return nil, errors.Wrap(err, "error creating new udp multiplexer")
9694
}

0 commit comments

Comments
 (0)