(&self, vm: &VirtualMachine)
| 2551 | } |
| 2552 | |
| 2553 | fn complete_handshake(&self, vm: &VirtualMachine) -> PyResult<()> { |
| 2554 | *self.handshake_done.lock() = true; |
| 2555 | |
| 2556 | // Check if session was resumed - get value and release lock immediately |
| 2557 | let was_resumed = self |
| 2558 | .connection |
| 2559 | .lock() |
| 2560 | .as_ref() |
| 2561 | .map(|conn| conn.is_session_resumed()) |
| 2562 | .unwrap_or(false); |
| 2563 | |
| 2564 | *self.session_was_reused.lock() = was_resumed; |
| 2565 | |
| 2566 | // Update context session statistics if server-side |
| 2567 | if self.server_side { |
| 2568 | let context = self.context.read(); |
| 2569 | // Increment accept count for every successful server handshake |
| 2570 | context.accept_count.fetch_add(1, Ordering::SeqCst); |
| 2571 | // Increment hits count if session was resumed |
| 2572 | if was_resumed { |
| 2573 | context.session_hits.fetch_add(1, Ordering::SeqCst); |
| 2574 | } |
| 2575 | } |
| 2576 | |
| 2577 | // Track CA certificate used during handshake (client-side only) |
| 2578 | // This simulates lazy loading behavior for capath certificates |
| 2579 | if !self.server_side { |
| 2580 | // Don't fail handshake if tracking fails |
| 2581 | let _ = self.track_used_ca_from_capath(); |
| 2582 | } |
| 2583 | |
| 2584 | self.create_session_after_handshake(vm)?; |
| 2585 | Ok(()) |
| 2586 | } |
| 2587 | |
| 2588 | // Internal implementation with timeout control |
| 2589 | pub(crate) fn sock_wait_for_io_impl( |
no test coverage detected