1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
use optee_utee_sys as raw;
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum SocketError {
ErrorProtocol(u32),
RemoteClosed,
Timeout,
OutOfResource,
WarningProtocol(u32),
LargeBuffer,
Hostname,
Tee(crate::ErrorKind),
Unknown(u32),
}
impl SocketError {
pub fn from_raw_error(code: u32, protocol_error: u32) -> Self {
match code {
raw::TEE_ISOCKET_ERROR_PROTOCOL => Self::ErrorProtocol(protocol_error),
raw::TEE_ISOCKET_ERROR_REMOTE_CLOSED => Self::RemoteClosed,
raw::TEE_ISOCKET_ERROR_TIMEOUT => Self::Timeout,
raw::TEE_ISOCKET_ERROR_OUT_OF_RESOURCES => Self::OutOfResource,
raw::TEE_ISOCKET_ERROR_LARGE_BUFFER => Self::LargeBuffer,
raw::TEE_ISOCKET_WARNING_PROTOCOL => Self::WarningProtocol(protocol_error),
raw::TEE_ISOCKET_ERROR_HOSTNAME => Self::Hostname,
raw::TEE_ERROR_CANCEL
| raw::TEE_ERROR_COMMUNICATION
| raw::TEE_ERROR_OUT_OF_MEMORY
| raw::TEE_ERROR_BAD_PARAMETERS => Self::Tee(crate::Error::from_raw_error(code).kind()),
_ => Self::Unknown(code),
}
}
}
impl core::fmt::Display for SocketError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "{:?}", self)
}
}
impl From<crate::Error> for SocketError {
fn from(value: crate::Error) -> Self {
Self::Tee(value.kind())
}
}