MCPcopy Index your code
hub / github.com/RustPython/RustPython / set_sni_callback

Method set_sni_callback

crates/stdlib/src/openssl.rs:1721–1776  ·  view source on GitHub ↗
(
            &self,
            value: Option<PyObjectRef>,
            vm: &VirtualMachine,
        )

Source from the content-addressed store, hash-verified

1719
1720 #[pygetset(setter)]
1721 fn set_sni_callback(
1722 &self,
1723 value: Option<PyObjectRef>,
1724 vm: &VirtualMachine,
1725 ) -> PyResult<()> {
1726 // Check if this is a server context
1727 if self.protocol == SslVersion::TlsClient {
1728 return Err(vm.new_value_error("sni_callback cannot be set on TLS_CLIENT context"));
1729 }
1730
1731 let mut callback_guard = self.sni_callback.lock();
1732
1733 if let Some(callback_obj) = value {
1734 if !vm.is_none(&callback_obj) {
1735 // Check if callable
1736 if !callback_obj.is_callable() {
1737 return Err(vm.new_type_error("not a callable object"));
1738 }
1739
1740 // Set the callback
1741 *callback_guard = Some(callback_obj);
1742
1743 // Set OpenSSL callback
1744 unsafe {
1745 sys::SSL_CTX_set_tlsext_servername_callback__fixed_rust(
1746 self.ctx().as_ptr(),
1747 Some(_servername_callback),
1748 );
1749 sys::SSL_CTX_set_tlsext_servername_arg(
1750 self.ctx().as_ptr(),
1751 self as *const _ as *mut _,
1752 );
1753 }
1754 } else {
1755 // Clear callback
1756 *callback_guard = None;
1757 unsafe {
1758 sys::SSL_CTX_set_tlsext_servername_callback__fixed_rust(
1759 self.ctx().as_ptr(),
1760 None,
1761 );
1762 }
1763 }
1764 } else {
1765 // Clear callback
1766 *callback_guard = None;
1767 unsafe {
1768 sys::SSL_CTX_set_tlsext_servername_callback__fixed_rust(
1769 self.ctx().as_ptr(),
1770 None,
1771 );
1772 }
1773 }
1774
1775 Ok(())
1776 }
1777
1778 #[pymethod]

Callers 1

Calls 7

is_callableMethod · 0.80
ErrClass · 0.50
SomeClass · 0.50
lockMethod · 0.45
is_noneMethod · 0.45
as_ptrMethod · 0.45
ctxMethod · 0.45

Tested by

no test coverage detected