Skip to content

Commit 9375999

Browse files
committed
add "add references" in client and server network interface
1 parent 4eddf20 commit 9375999

3 files changed

Lines changed: 63 additions & 15 deletions

File tree

opcua/server/uaprocessor.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,18 @@ def _process_message(self, typeid, requesthdr, algohdr, seqhdr, body):
290290
self.logger.info("sending delete node response")
291291
self.send_response(requesthdr.RequestHandle, algohdr, seqhdr, response)
292292

293+
elif typeid == ua.NodeId(ua.ObjectIds.AddReferencesRequest_Encoding_DefaultBinary):
294+
self.logger.info("add references request")
295+
params = ua.AddReferencesParameters.from_binary(body)
296+
297+
results = self.session.add_references(params.ReferencesToAdd)
298+
299+
response = ua.AddReferencesResponse()
300+
response.Results = results
301+
302+
self.logger.info("sending add references response")
303+
self.send_response(requesthdr.RequestHandle, algohdr, seqhdr, response)
304+
293305
elif typeid == ua.NodeId(ua.ObjectIds.CreateSubscriptionRequest_Encoding_DefaultBinary):
294306
self.logger.info("create subscription request")
295307
params = ua.CreateSubscriptionParameters.from_binary(body)

opcua/ua/uaprotocol_auto.py

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5293,6 +5293,49 @@ def __str__(self):
52935293
__repr__ = __str__
52945294

52955295

5296+
class AddReferencesParameters(FrozenClass):
5297+
'''
5298+
:ivar ReferencesToAdd:
5299+
:vartype ReferencesToAdd: AddReferencesItem
5300+
'''
5301+
5302+
ua_types = {
5303+
'ReferencesToAdd': 'AddReferencesItem',
5304+
}
5305+
5306+
def __init__(self, binary=None):
5307+
if binary is not None:
5308+
self._binary_init(binary)
5309+
self._freeze = True
5310+
return
5311+
self.ReferencesToAdd = []
5312+
self._freeze = True
5313+
5314+
def to_binary(self):
5315+
packet = []
5316+
packet.append(uabin.Primitives.Int32.pack(len(self.ReferencesToAdd)))
5317+
for fieldname in self.ReferencesToAdd:
5318+
packet.append(fieldname.to_binary())
5319+
return b''.join(packet)
5320+
5321+
@staticmethod
5322+
def from_binary(data):
5323+
return AddReferencesParameters(data)
5324+
5325+
def _binary_init(self, data):
5326+
length = uabin.Primitives.Int32.unpack(data)
5327+
array = []
5328+
if length != -1:
5329+
for _ in range(0, length):
5330+
array.append(AddReferencesItem.from_binary(data))
5331+
self.ReferencesToAdd = array
5332+
5333+
def __str__(self):
5334+
return 'AddReferencesParameters(' + 'ReferencesToAdd:' + str(self.ReferencesToAdd) + ')'
5335+
5336+
__repr__ = __str__
5337+
5338+
52965339
class AddReferencesRequest(FrozenClass):
52975340
'''
52985341
Adds one or more references to the server address space.
@@ -5301,14 +5344,14 @@ class AddReferencesRequest(FrozenClass):
53015344
:vartype TypeId: NodeId
53025345
:ivar RequestHeader:
53035346
:vartype RequestHeader: RequestHeader
5304-
:ivar ReferencesToAdd:
5305-
:vartype ReferencesToAdd: AddReferencesItem
5347+
:ivar Parameters:
5348+
:vartype Parameters: AddReferencesParameters
53065349
'''
53075350

53085351
ua_types = {
53095352
'TypeId': 'NodeId',
53105353
'RequestHeader': 'RequestHeader',
5311-
'ReferencesToAdd': 'AddReferencesItem',
5354+
'Parameters': 'AddReferencesParameters',
53125355
}
53135356

53145357
def __init__(self, binary=None):
@@ -5318,16 +5361,14 @@ def __init__(self, binary=None):
53185361
return
53195362
self.TypeId = FourByteNodeId(ObjectIds.AddReferencesRequest_Encoding_DefaultBinary)
53205363
self.RequestHeader = RequestHeader()
5321-
self.ReferencesToAdd = []
5364+
self.Parameters = AddReferencesParameters()
53225365
self._freeze = True
53235366

53245367
def to_binary(self):
53255368
packet = []
53265369
packet.append(self.TypeId.to_binary())
53275370
packet.append(self.RequestHeader.to_binary())
5328-
packet.append(uabin.Primitives.Int32.pack(len(self.ReferencesToAdd)))
5329-
for fieldname in self.ReferencesToAdd:
5330-
packet.append(fieldname.to_binary())
5371+
packet.append(self.Parameters.to_binary())
53315372
return b''.join(packet)
53325373

53335374
@staticmethod
@@ -5337,17 +5378,12 @@ def from_binary(data):
53375378
def _binary_init(self, data):
53385379
self.TypeId = NodeId.from_binary(data)
53395380
self.RequestHeader = RequestHeader.from_binary(data)
5340-
length = uabin.Primitives.Int32.unpack(data)
5341-
array = []
5342-
if length != -1:
5343-
for _ in range(0, length):
5344-
array.append(AddReferencesItem.from_binary(data))
5345-
self.ReferencesToAdd = array
5381+
self.Parameters = AddReferencesParameters.from_binary(data)
53465382

53475383
def __str__(self):
53485384
return 'AddReferencesRequest(' + 'TypeId:' + str(self.TypeId) + ', ' + \
53495385
'RequestHeader:' + str(self.RequestHeader) + ', ' + \
5350-
'ReferencesToAdd:' + str(self.ReferencesToAdd) + ')'
5386+
'Parameters:' + str(self.Parameters) + ')'
53515387

53525388
__repr__ = __str__
53535389

schemas/generate_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#we want to implement som struct by hand, to make better interface or simply because they are too complicated
1515
IgnoredStructs = []#["NodeId", "ExpandedNodeId", "Variant", "QualifiedName", "DataValue", "LocalizedText"]#, "ExtensionObject"]
1616
#by default we split requests and respons in header and parameters, but some are so simple we do not split them
17-
NoSplitStruct = ["GetEndpointsResponse", "CloseSessionRequest", "AddNodesResponse", "DeleteNodesResponse", "BrowseResponse", "HistoryReadResponse", "HistoryUpdateResponse", "RegisterServerResponse", "CloseSecureChannelRequest", "CloseSecureChannelResponse", "CloseSessionRequest", "CloseSessionResponse", "UnregisterNodesResponse", "MonitoredItemModifyRequest", "MonitoredItemsCreateRequest", "ReadResponse", "WriteResponse", "TranslateBrowsePathsToNodeIdsResponse", "DeleteSubscriptionsResponse", "DeleteMonitoredItemsResponse", "CreateMonitoredItemsResponse", "ServiceFault", "AddReferencesRequest", "AddReferencesResponse", "ModifyMonitoredItemsResponse", "RepublishResponse", "CallResponse", "FindServersResponse", "RegisterServerRequest", "RegisterServer2Response"]
17+
NoSplitStruct = ["GetEndpointsResponse", "CloseSessionRequest", "AddNodesResponse", "DeleteNodesResponse", "BrowseResponse", "HistoryReadResponse", "HistoryUpdateResponse", "RegisterServerResponse", "CloseSecureChannelRequest", "CloseSecureChannelResponse", "CloseSessionRequest", "CloseSessionResponse", "UnregisterNodesResponse", "MonitoredItemModifyRequest", "MonitoredItemsCreateRequest", "ReadResponse", "WriteResponse", "TranslateBrowsePathsToNodeIdsResponse", "DeleteSubscriptionsResponse", "DeleteMonitoredItemsResponse", "CreateMonitoredItemsResponse", "ServiceFault", "AddReferencesResponse", "ModifyMonitoredItemsResponse", "RepublishResponse", "CallResponse", "FindServersResponse", "RegisterServerRequest", "RegisterServer2Response"]
1818
#structs that end with Request or Response but are not
1919
NotRequest = ["MonitoredItemCreateRequest", "MonitoredItemModifyRequest", "CallMethodRequest"]
2020
OverrideTypes = {}#AttributeId": "AttributeID", "ResultMask": "BrowseResultMask", "NodeClassMask": "NodeClass", "AccessLevel": "VariableAccessLevel", "UserAccessLevel": "VariableAccessLevel", "NotificationData": "NotificationData"}

0 commit comments

Comments
 (0)