fn connect_with_ip_version()

in optee-utee/src/net.rs [198:251]


    fn connect_with_ip_version(
        address: &str,
        port: u16,
        ip_version: raw::TEE_ipSocket_ipVersion,
    ) -> std::io::Result<Self> {
        use std::ffi::CString;
        unsafe {
            let addr = match CString::new(address) {
                Ok(addr) => addr,
                Err(_) => return Err(io::Error::new(ErrorKind::Other, "Invalid address")),
            };
            let mut handle: raw::TEE_iSocketHandle = ptr::null_mut();
            let mut protocol_error: u32 = 0;
            let mut setup = raw::TEE_udpSocket_Setup {
                ipVersion: ip_version,
                server_addr: addr.as_ptr() as _,
                server_port: port,
            };
            let ret = ((*raw::TEE_udpSocket).open)(
                &mut handle,
                &mut setup as *mut raw::TEE_udpSocket_Setup as _,
                &mut protocol_error,
            );
            match ret {
                raw::TEE_SUCCESS => Ok(Self { handle }),
                raw::TEE_ERROR_CANCEL => {
                    Err(io::Error::new(ErrorKind::Interrupted, "TEE_ERROR_CANCEL"))
                }
                raw::TEE_ERROR_OUT_OF_MEMORY => {
                    Err(io::Error::new(ErrorKind::Other, "TEE_ERROR_OUT_OF_MEMORY"))
                }
                raw::TEE_ERROR_BAD_PARAMETERS => {
                    Err(io::Error::new(ErrorKind::Other, "TEE_ERROR_BAD_PARAMETERS"))
                }
                raw::TEE_ISOCKET_ERROR_TIMEOUT => Err(io::Error::new(
                    ErrorKind::TimedOut,
                    "TEE_ISOCKET_ERROR_TIMEOUT",
                )),
                raw::TEE_ERROR_COMMUNICATION => Err(io::Error::new(
                    ErrorKind::ConnectionAborted,
                    "TEE_ERROR_COMMUNICATION",
                )),
                raw::TEE_ISOCKET_ERROR_PROTOCOL => Err(io::Error::new(
                    ErrorKind::Other,
                    "TEE_ISOCKET_ERROR_PROTOCOL",
                )),
                raw::TEE_ISOCKET_WARNING_PROTOCOL => Err(io::Error::new(
                    ErrorKind::Other,
                    format!("TEE_ISOCKET_WARNING_PROTOCOL: {}", protocol_error),
                )),
                _ => panic!("Unexpected return value"),
            }
        }
    }