Commit bb2d2633 authored by Olivier R-D's avatar Olivier R-D

client: add add_nodes method

parent 13fb1e80
......@@ -353,5 +353,14 @@ class BinaryClient(object):
response.ResponseHeader.ServiceResult.check()
return response.Results
def add_nodes(self, nodestoadd):
self.logger.info("add_nodes")
request = ua.AddNodesRequest()
request.Parameters.NodesToAdd = nodestoadd
data = self._send_request(request)
response = ua.AddNodesResponse.from_binary(data)
response.ResponseHeader.ServiceResult.check()
return response.Results
......@@ -51,7 +51,7 @@ class UAHandler(socketserver.BaseRequestHandler):
try:
processor.loop()
except ua.SocketClosedException as ex:
logger.warn("Client has closed connection")
logger.warn("Client has closed connection: %s", ex)
class ThreadingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
......@@ -128,7 +128,6 @@ class UAProcessor(object):
self.channel = self.iserver.open_secure_channel(request.Parameters, self.channel)
#send response
hdr = ua.Header(ua.MessageType.SecureOpen, ua.ChunkType.Single, self.channel.SecurityToken.TokenId)
response = ua.OpenSecureChannelResponse()
response.Parameters = self.channel
self.send_response(request.RequestHeader.RequestHandle, algohdr, seqhdr, response, ua.MessageType.SecureOpen)
......@@ -145,13 +144,13 @@ class UAProcessor(object):
elif header.MessageType == ua.MessageType.SecureMessage:
algohdr = ua.SymmetricAlgorithmHeader.from_binary(body)
seqhdr = ua.SequenceHeader.from_binary(body)
self.process_message(header, algohdr, seqhdr, body)
self.process_message(algohdr, seqhdr, body)
else:
self.logger.warn("Unsupported message type: %s", header.MessageType)
return True
def process_message(self, hdr, algohdr, seqhdr, body):
def process_message(self, algohdr, seqhdr, body):
typeid = ua.NodeId.from_binary(body)
requesthdr = ua.RequestHeader.from_binary(body)
if typeid == ua.NodeId(ua.ObjectIds.CreateSessionRequest_Encoding_DefaultBinary):
......@@ -235,6 +234,19 @@ class UAProcessor(object):
self.send_response(requesthdr.RequestHandle, algohdr, seqhdr, response)
elif typeid == ua.NodeId(ua.ObjectIds.AddNodesRequest_Encoding_DefaultBinary):
self.logger.info("add nodes request")
params = ua.AddNodesParameters.from_binary(body)
results = self.iserver.add_nodes(params.NodesToAdd)
response = ua.AddNodesResponse()
response.Results = results
self.send_response(requesthdr.RequestHandle, algohdr, seqhdr, response)
else:
self.logger.warn("Uknown message received %s", typeid)
......
......@@ -190,10 +190,10 @@ class Node(object):
node.ParentNodeId = self.nodeid
if isproperty:
node.ReferenceTypeId = ua.NodeId(ua.ObjectIds.HasProperty)
node.TypeDefinition = ua.NodeId(ua.ObjectIds.PropertyType)
node.TypeDefinition = ua.NodeId(ua.ObjectIds.PropertyType)
else:
node.ReferenceTypeId = ua.NodeId(ua.ObjectIds.HasComponent)
node.TypeDefinition = ua.NodeId(ua.ObjectIds.BaseDataVariableType)
node.TypeDefinition = ua.NodeId(ua.ObjectIds.BaseDataVariableType)
attrs = ua.VariableAttributes()
attrs.Description = ua.LocalizedText(qname.Name)
attrs.DisplayName = ua.LocalizedText(qname.Name)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment