Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
opcua-asyncio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Nikola Balog
opcua-asyncio
Commits
6c1464f5
Commit
6c1464f5
authored
Jun 18, 2015
by
Olivier R-D
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implement findservers and make prosys client happy with servers on 0.0.0
parent
55e88337
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
38 additions
and
41 deletions
+38
-41
opcua/internal_server.py
opcua/internal_server.py
+10
-2
opcua/uaprocessor.py
opcua/uaprocessor.py
+16
-2
opcua/uaprotocol_auto.py
opcua/uaprotocol_auto.py
+11
-36
schemas/generate_model.py
schemas/generate_model.py
+1
-1
No files found.
opcua/internal_server.py
View file @
6c1464f5
...
...
@@ -98,6 +98,14 @@ class InternalServer(object):
return
edps
return
self
.
endpoints
[:]
def
find_servers
(
self
,
params
):
#FIXME: implement correctly
servers
=
[]
for
edp
in
self
.
endpoints
:
servers
.
append
(
edp
.
Server
)
return
servers
def
create_session
(
self
,
name
):
return
InternalSession
(
self
,
self
.
aspace
,
self
.
subcsription_service
,
name
)
...
...
@@ -128,7 +136,7 @@ class InternalSession(object):
def
get_endpoints
(
self
,
params
=
None
,
sockname
=
None
):
return
self
.
iserver
.
get_endpoints
(
params
,
sockname
)
def
create_session
(
self
,
params
):
def
create_session
(
self
,
params
,
sockname
=
None
):
self
.
logger
.
info
(
"Create session request"
)
result
=
ua
.
CreateSessionResult
()
...
...
@@ -137,7 +145,7 @@ class InternalSession(object):
result
.
RevisedSessionTimeout
=
params
.
RequestedSessionTimeout
result
.
MaxRequestMessageSize
=
65536
result
.
ServerNonce
=
self
.
nonce
result
.
ServerEndpoints
=
self
.
get_endpoints
()
result
.
ServerEndpoints
=
self
.
get_endpoints
(
sockname
=
sockname
)
return
result
...
...
opcua/uaprocessor.py
View file @
6c1464f5
...
...
@@ -108,12 +108,13 @@ class UAProcessor(object):
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
):
self
.
logger
.
info
(
"Create session request"
)
params
=
ua
.
CreateSessionParameters
.
from_binary
(
body
)
self
.
session
=
self
.
iserver
.
create_session
(
self
.
name
)
# create the session on server
sessiondata
=
self
.
session
.
create_session
(
params
)
# get a session creation result to send back
sessiondata
=
self
.
session
.
create_session
(
params
,
sockname
=
self
.
sockname
)
# get a session creation result to send back
response
=
ua
.
CreateSessionResponse
()
response
.
Parameters
=
sessiondata
...
...
@@ -200,6 +201,19 @@ class UAProcessor(object):
self
.
logger
.
info
(
"sending get endpoints response"
)
self
.
send_response
(
requesthdr
.
RequestHandle
,
algohdr
,
seqhdr
,
response
)
elif
typeid
==
ua
.
NodeId
(
ua
.
ObjectIds
.
FindServersRequest_Encoding_DefaultBinary
):
self
.
logger
.
info
(
"find servers request"
)
params
=
ua
.
FindServersParameters
.
from_binary
(
body
)
servers
=
self
.
iserver
.
find_servers
(
params
)
response
=
ua
.
FindServersResponse
()
response
.
Servers
=
servers
self
.
logger
.
info
(
"sending find servers response"
)
self
.
send_response
(
requesthdr
.
RequestHandle
,
algohdr
,
seqhdr
,
response
)
elif
typeid
==
ua
.
NodeId
(
ua
.
ObjectIds
.
TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary
):
self
.
logger
.
info
(
"translate browsepaths to nodeids request"
)
params
=
ua
.
TranslateBrowsePathsToNodeIdsParameters
.
from_binary
(
body
)
...
...
@@ -339,7 +353,7 @@ class UAProcessor(object):
def
_open_secure_channel
(
self
,
params
):
self
.
logger
.
info
(
"open secure channel"
)
if
params
.
RequestType
==
ua
.
SecurityTokenRequestType
.
Issue
:
if
not
self
.
channel
or
params
.
RequestType
==
ua
.
SecurityTokenRequestType
.
Issue
:
self
.
channel
=
ua
.
OpenSecureChannelResult
()
self
.
channel
.
SecurityToken
.
TokenId
=
13
# random value
self
.
channel
.
SecurityToken
.
ChannelId
=
self
.
iserver
.
get_new_channel_id
()
...
...
opcua/uaprotocol_auto.py
View file @
6c1464f5
...
...
@@ -1186,36 +1186,6 @@ class FindServersRequest(FrozenClass):
__repr__
=
__str__
class
FindServersResult
(
FrozenClass
):
'''
:ivar Servers:
:vartype Servers: ApplicationDescription
'''
def
__init__
(
self
):
self
.
Servers
=
[]
self
.
_freeze
()
def
to_binary
(
self
):
packet
=
[]
packet
.
append
(
struct
.
pack
(
'<i'
,
len
(
self
.
Servers
)))
for
fieldname
in
self
.
Servers
:
packet
.
append
(
fieldname
.
to_binary
())
return
b''
.
join
(
packet
)
@
staticmethod
def
from_binary
(
data
):
obj
=
FindServersResult
()
length
=
struct
.
unpack
(
'<i'
,
data
.
read
(
4
))[
0
]
if
length
!=
-
1
:
for
_
in
range
(
0
,
length
):
obj
.
Servers
.
append
(
ApplicationDescription
.
from_binary
(
data
))
return
obj
def
__str__
(
self
):
return
'FindServersResult('
+
'Servers:'
+
str
(
self
.
Servers
)
+
')'
__repr__
=
__str__
class
FindServersResponse
(
FrozenClass
):
'''
Finds the servers known to the discovery server.
...
...
@@ -1224,20 +1194,22 @@ class FindServersResponse(FrozenClass):
:vartype TypeId: NodeId
:ivar ResponseHeader:
:vartype ResponseHeader: ResponseHeader
:ivar
Paramet
ers:
:vartype
Parameters: FindServersResult
:ivar
Serv
ers:
:vartype
Servers: ApplicationDescription
'''
def
__init__
(
self
):
self
.
TypeId
=
FourByteNodeId
(
ObjectIds
.
FindServersResponse_Encoding_DefaultBinary
)
self
.
ResponseHeader
=
ResponseHeader
()
self
.
Parameters
=
FindServersResult
()
self
.
Servers
=
[]
self
.
_freeze
()
def
to_binary
(
self
):
packet
=
[]
packet
.
append
(
self
.
TypeId
.
to_binary
())
packet
.
append
(
self
.
ResponseHeader
.
to_binary
())
packet
.
append
(
self
.
Parameters
.
to_binary
())
packet
.
append
(
struct
.
pack
(
'<i'
,
len
(
self
.
Servers
)))
for
fieldname
in
self
.
Servers
:
packet
.
append
(
fieldname
.
to_binary
())
return
b''
.
join
(
packet
)
@
staticmethod
...
...
@@ -1245,13 +1217,16 @@ class FindServersResponse(FrozenClass):
obj
=
FindServersResponse
()
obj
.
TypeId
=
NodeId
.
from_binary
(
data
)
obj
.
ResponseHeader
=
ResponseHeader
.
from_binary
(
data
)
obj
.
Parameters
=
FindServersResult
.
from_binary
(
data
)
length
=
struct
.
unpack
(
'<i'
,
data
.
read
(
4
))[
0
]
if
length
!=
-
1
:
for
_
in
range
(
0
,
length
):
obj
.
Servers
.
append
(
ApplicationDescription
.
from_binary
(
data
))
return
obj
def
__str__
(
self
):
return
'FindServersResponse('
+
'TypeId:'
+
str
(
self
.
TypeId
)
+
', '
+
\
'ResponseHeader:'
+
str
(
self
.
ResponseHeader
)
+
', '
+
\
'
Parameters:'
+
str
(
self
.
Paramet
ers
)
+
')'
'
Servers:'
+
str
(
self
.
Serv
ers
)
+
')'
__repr__
=
__str__
...
...
schemas/generate_model.py
View file @
6c1464f5
...
...
@@ -14,7 +14,7 @@ IgnoredEnums = []#["IdType", "NodeIdType"]
#we want to implement som struct by hand, to make better interface or simply because they are too complicated
IgnoredStructs
=
[]
#["NodeId", "ExpandedNodeId", "Variant", "QualifiedName", "DataValue", "LocalizedText"]#, "ExtensionObject"]
#by default we split requests and respons in header and parameters, but some are so simple we do not split them
NoSplitStruct
=
[
"GetEndpointsResponse"
,
"CloseSessionRequest"
,
"AddNodesResponse"
,
"BrowseResponse"
,
"HistoryReadResponse"
,
"HistoryUpdateResponse"
,
"RegisterServerResponse"
,
"CloseSecureChannelRequest"
,
"CloseSecureChannelResponse"
,
"CloseSessionRequest"
,
"CloseSessionResponse"
,
"UnregisterNodesResponse"
,
"MonitoredItemModifyRequest"
,
"MonitoredItemsCreateRequest"
,
"ReadResponse"
,
"WriteResponse"
,
"TranslateBrowsePathsToNodeIdsResponse"
,
"DeleteSubscriptionsResponse"
,
"DeleteMonitoredItemsResponse"
,
"CreateMonitoredItemsResponse"
,
"ServiceFault"
,
"AddReferencesRequest"
,
"AddReferencesResponse"
,
"ModifyMonitoredItemsResponse"
,
"RepublishResponse"
,
"CallResponse"
]
NoSplitStruct
=
[
"GetEndpointsResponse"
,
"CloseSessionRequest"
,
"AddNodesResponse"
,
"BrowseResponse"
,
"HistoryReadResponse"
,
"HistoryUpdateResponse"
,
"RegisterServerResponse"
,
"CloseSecureChannelRequest"
,
"CloseSecureChannelResponse"
,
"CloseSessionRequest"
,
"CloseSessionResponse"
,
"UnregisterNodesResponse"
,
"MonitoredItemModifyRequest"
,
"MonitoredItemsCreateRequest"
,
"ReadResponse"
,
"WriteResponse"
,
"TranslateBrowsePathsToNodeIdsResponse"
,
"DeleteSubscriptionsResponse"
,
"DeleteMonitoredItemsResponse"
,
"CreateMonitoredItemsResponse"
,
"ServiceFault"
,
"AddReferencesRequest"
,
"AddReferencesResponse"
,
"ModifyMonitoredItemsResponse"
,
"RepublishResponse"
,
"CallResponse"
,
"FindServersResponse"
]
#structs that end with Request or Response but are not
NotRequest
=
[
"MonitoredItemCreateRequest"
,
"MonitoredItemModifyRequest"
,
"CallMethodRequest"
]
OverrideTypes
=
{}
#AttributeId": "AttributeID", "ResultMask": "BrowseResultMask", "NodeClassMask": "NodeClass", "AccessLevel": "VariableAccessLevel", "UserAccessLevel": "VariableAccessLevel", "NotificationData": "NotificationData"}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment