Skip to content

Commit bb0379b

Browse files
committed
minimum/maximum version
1 parent 2dbe343 commit bb0379b

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

stdlib/src/ssl.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,47 @@ mod _ssl {
806806
self.check_hostname.store(ch);
807807
}
808808

809+
// PY_PROTO_MINIMUM_SUPPORTED = -2, PY_PROTO_MAXIMUM_SUPPORTED = -1
810+
#[pygetset]
811+
fn minimum_version(&self) -> i32 {
812+
let ctx = self.ctx();
813+
let version = unsafe { sys::SSL_CTX_get_min_proto_version(ctx.as_ptr()) };
814+
if version == 0 {
815+
-2 // PY_PROTO_MINIMUM_SUPPORTED
816+
} else {
817+
version
818+
}
819+
}
820+
#[pygetset(setter)]
821+
fn set_minimum_version(&self, value: i32, vm: &VirtualMachine) -> PyResult<()> {
822+
let ctx = self.builder();
823+
let result = unsafe { sys::SSL_CTX_set_min_proto_version(ctx.as_ptr(), value) };
824+
if result == 0 {
825+
return Err(vm.new_value_error("invalid protocol version"));
826+
}
827+
Ok(())
828+
}
829+
830+
#[pygetset]
831+
fn maximum_version(&self) -> i32 {
832+
let ctx = self.ctx();
833+
let version = unsafe { sys::SSL_CTX_get_max_proto_version(ctx.as_ptr()) };
834+
if version == 0 {
835+
-1 // PY_PROTO_MAXIMUM_SUPPORTED
836+
} else {
837+
version
838+
}
839+
}
840+
#[pygetset(setter)]
841+
fn set_maximum_version(&self, value: i32, vm: &VirtualMachine) -> PyResult<()> {
842+
let ctx = self.builder();
843+
let result = unsafe { sys::SSL_CTX_set_max_proto_version(ctx.as_ptr(), value) };
844+
if result == 0 {
845+
return Err(vm.new_value_error("invalid protocol version"));
846+
}
847+
Ok(())
848+
}
849+
809850
#[pymethod]
810851
fn set_default_verify_paths(&self, vm: &VirtualMachine) -> PyResult<()> {
811852
cfg_if::cfg_if! {

0 commit comments

Comments
 (0)