#![allow(clippy::module_name_repetitions)]
use alloc::string::String;
use psp::sys;
use crate::socket::SocketAddr;
use super::Certificate;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct SocketOptions {
remote: SocketAddr,
}
impl SocketOptions {
#[must_use]
pub fn new(remote: SocketAddr) -> SocketOptions {
Self { remote }
}
#[must_use]
pub fn remote(&self) -> SocketAddr {
self.remote
}
}
#[derive(Clone, Debug, Default)]
pub struct TlsSocketOptions<'a> {
seed: u64,
server_name: String,
cert: Option<Certificate<'a>>,
ca: Option<Certificate<'a>>,
enable_rsa_signatures: bool,
reset_max_fragment_length: bool,
}
impl<'a> TlsSocketOptions<'a> {
#[must_use]
pub fn new<S>(seed: u64, server_name: S) -> Self
where
S: Into<String>,
{
Self {
seed,
server_name: server_name.into(),
cert: None,
ca: None,
enable_rsa_signatures: true,
reset_max_fragment_length: false,
}
}
#[must_use]
pub fn new_with_seed_from_time<S>(server_name: S) -> Self
where
S: Into<String>,
{
let seed = unsafe {
let mut seed: u64 = 0;
sys::sceRtcGetCurrentTick(&mut seed);
seed
};
Self::new(seed, server_name)
}
pub fn disable_rsa_signatures(&mut self) {
self.enable_rsa_signatures = false;
}
pub fn set_cert(&mut self, cert: Option<Certificate<'a>>) {
self.cert = cert;
}
#[must_use]
pub fn seed(&self) -> u64 {
self.seed
}
pub fn set_seed(&mut self, seed: u64) {
self.seed = seed;
}
#[must_use]
pub fn server_name(&self) -> &str {
&self.server_name
}
#[must_use]
pub fn cert(&self) -> Option<&Certificate<'a>> {
self.cert.as_ref()
}
#[must_use]
pub fn rsa_signatures_enabled(&self) -> bool {
self.enable_rsa_signatures
}
#[must_use]
pub fn reset_max_fragment_length(&self) -> bool {
self.reset_max_fragment_length
}
pub fn set_reset_max_fragment_length(&mut self, reset_max_fragment_length: bool) {
self.reset_max_fragment_length = reset_max_fragment_length;
}
#[must_use]
pub fn ca(&self) -> Option<&Certificate<'a>> {
self.ca.as_ref()
}
pub fn set_ca(&mut self, ca: Option<Certificate<'a>>) {
self.ca = ca;
}
pub fn set_enable_rsa_signatures(&mut self, enable_rsa_signatures: bool) {
self.enable_rsa_signatures = enable_rsa_signatures;
}
pub fn set_server_name<S>(&mut self, server_name: S)
where
S: Into<String>,
{
self.server_name = server_name.into();
}
}