called on server side to open secure channel
(self, params, server)
| 162 | self._allow_prev_token = True |
| 163 | |
| 164 | def open(self, params, server): |
| 165 | """ |
| 166 | called on server side to open secure channel |
| 167 | """ |
| 168 | |
| 169 | self.local_nonce = ua.utils.create_nonce(self.security_policy.symmetric_key_size) |
| 170 | self.remote_nonce = params.ClientNonce |
| 171 | response = ua.OpenSecureChannelResult() |
| 172 | response.ServerNonce = self.local_nonce |
| 173 | |
| 174 | if not self._open or params.RequestType == ua.SecurityTokenRequestType.Issue: |
| 175 | self._open = True |
| 176 | self.security_token.TokenId = 13 # random value |
| 177 | self.security_token.ChannelId = server.get_new_channel_id() |
| 178 | self.security_token.RevisedLifetime = params.RequestedLifetime |
| 179 | self.security_token.CreatedAt = datetime.utcnow() |
| 180 | |
| 181 | response.SecurityToken = self.security_token |
| 182 | |
| 183 | self.security_policy.make_local_symmetric_key(self.remote_nonce, self.local_nonce) |
| 184 | self.security_policy.make_remote_symmetric_key(self.local_nonce, self.remote_nonce) |
| 185 | else: |
| 186 | self.next_security_token = copy.deepcopy(self.security_token) |
| 187 | self.next_security_token.TokenId += 1 |
| 188 | self.next_security_token.RevisedLifetime = params.RequestedLifetime |
| 189 | self.next_security_token.CreatedAt = datetime.utcnow() |
| 190 | |
| 191 | response.SecurityToken = self.next_security_token |
| 192 | |
| 193 | return response |
| 194 | |
| 195 | def close(self): |
| 196 | self._open = False |