MCPcopy Create free account
hub / github.com/FreeOpcUa/python-opcua / _process_message

Method _process_message

opcua/server/uaprocessor.py:125–518  ·  view source on GitHub ↗
(self, typeid, requesthdr, seqhdr, body)

Source from the content-addressed store, hash-verified

123 return True
124
125 def _process_message(self, typeid, requesthdr, seqhdr, body):
126 if typeid == ua.NodeId(ua.ObjectIds.CreateSessionRequest_Encoding_DefaultBinary):
127 self.logger.info("Create session request")
128 params = struct_from_binary(ua.CreateSessionParameters, body)
129
130 # create the session on server
131 self.session = self.iserver.create_session(self.name)
132 # get a session creation result to send back
133 sessiondata = self.session.create_session(params, sockname=self.sockname)
134
135 response = ua.CreateSessionResponse()
136 response.Parameters = sessiondata
137 response.Parameters.ServerCertificate = self._connection.security_policy.client_certificate
138 if self._connection.security_policy.server_certificate is None:
139 data = params.ClientNonce
140 else:
141 data = self._connection.security_policy.server_certificate + params.ClientNonce
142 response.Parameters.ServerSignature.Signature = \
143 self._connection.security_policy.asymmetric_cryptography.signature(data)
144
145 response.Parameters.ServerSignature.Algorithm = self._connection.security_policy.AsymmetricSignatureURI
146
147 self.logger.info("sending create session response")
148 self.send_response(requesthdr.RequestHandle, seqhdr, response)
149
150 elif typeid == ua.NodeId(ua.ObjectIds.CloseSessionRequest_Encoding_DefaultBinary):
151 self.logger.info("Close session request")
152
153 if self.session:
154 deletesubs = ua.ua_binary.Primitives.Boolean.unpack(body)
155 self.session.close_session(deletesubs)
156 else:
157 self.logger.info("Request to close non-existing session")
158
159 response = ua.CloseSessionResponse()
160 self.logger.info("sending close session response")
161 self.send_response(requesthdr.RequestHandle, seqhdr, response)
162
163 elif typeid == ua.NodeId(ua.ObjectIds.ActivateSessionRequest_Encoding_DefaultBinary):
164 self.logger.info("Activate session request")
165 params = struct_from_binary(ua.ActivateSessionParameters, body)
166
167 if not self.session:
168 self.logger.info("request to activate non-existing session")
169 raise utils.ServiceError(ua.StatusCodes.BadSessionIdInvalid)
170
171 if self._connection.security_policy.client_certificate is None:
172 data = self.session.nonce
173 else:
174 data = self._connection.security_policy.client_certificate + self.session.nonce
175 self._connection.security_policy.asymmetric_cryptography.verify(data, params.ClientSignature.Signature)
176
177 result = self.session.activate_session(params)
178
179 response = ua.ActivateSessionResponse()
180 response.Parameters = result
181
182 self.logger.info("sending read response")

Callers 1

process_messageMethod · 0.95

Calls 15

send_responseMethod · 0.95
struct_from_binaryFunction · 0.90
PublishRequestDataClass · 0.85
create_sessionMethod · 0.45
signatureMethod · 0.45
unpackMethod · 0.45
close_sessionMethod · 0.45
verifyMethod · 0.45
activate_sessionMethod · 0.45
readMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected