mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-23 01:13:23 +00:00
Restrict visibility for TCP internals
This commit is contained in:
committed by
Jianfeng Jiang
parent
639bc91e31
commit
0e8106abfa
@ -18,7 +18,7 @@ use crate::{
|
||||
util::{MultiRead, MultiWrite},
|
||||
};
|
||||
|
||||
pub struct ConnectedStream {
|
||||
pub(super) struct ConnectedStream {
|
||||
tcp_conn: TcpConnection,
|
||||
remote_endpoint: IpEndpoint,
|
||||
/// Indicates whether this connection is "new" in a `connect()` system call.
|
||||
@ -35,7 +35,7 @@ pub struct ConnectedStream {
|
||||
}
|
||||
|
||||
impl ConnectedStream {
|
||||
pub fn new(
|
||||
pub(super) fn new(
|
||||
tcp_conn: TcpConnection,
|
||||
remote_endpoint: IpEndpoint,
|
||||
is_new_connection: bool,
|
||||
@ -47,7 +47,7 @@ impl ConnectedStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn shutdown(&self, cmd: SockShutdownCmd, pollee: &Pollee) -> Result<()> {
|
||||
pub(super) fn shutdown(&self, cmd: SockShutdownCmd, pollee: &Pollee) -> Result<()> {
|
||||
let mut events = IoEvents::empty();
|
||||
|
||||
if cmd.shut_read() {
|
||||
@ -69,7 +69,7 @@ impl ConnectedStream {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn try_recv(
|
||||
pub(super) fn try_recv(
|
||||
&self,
|
||||
writer: &mut dyn MultiWrite,
|
||||
_flags: SendRecvFlags,
|
||||
@ -102,7 +102,7 @@ impl ConnectedStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn try_send(
|
||||
pub(super) fn try_send(
|
||||
&self,
|
||||
reader: &mut dyn MultiRead,
|
||||
_flags: SendRecvFlags,
|
||||
@ -133,19 +133,19 @@ impl ConnectedStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn local_endpoint(&self) -> IpEndpoint {
|
||||
pub(super) fn local_endpoint(&self) -> IpEndpoint {
|
||||
self.tcp_conn.local_endpoint().unwrap()
|
||||
}
|
||||
|
||||
pub fn remote_endpoint(&self) -> IpEndpoint {
|
||||
pub(super) fn remote_endpoint(&self) -> IpEndpoint {
|
||||
self.remote_endpoint
|
||||
}
|
||||
|
||||
pub fn iface(&self) -> &Arc<Iface> {
|
||||
pub(super) fn iface(&self) -> &Arc<Iface> {
|
||||
self.tcp_conn.iface()
|
||||
}
|
||||
|
||||
pub fn finish_last_connect(&mut self) -> Result<()> {
|
||||
pub(super) fn finish_last_connect(&mut self) -> Result<()> {
|
||||
if !self.is_new_connection {
|
||||
return_errno_with_message!(Errno::EISCONN, "the socket is already connected");
|
||||
}
|
||||
|
@ -13,19 +13,19 @@ use crate::{
|
||||
prelude::*,
|
||||
};
|
||||
|
||||
pub struct ConnectingStream {
|
||||
pub(super) struct ConnectingStream {
|
||||
tcp_conn: TcpConnection,
|
||||
remote_endpoint: IpEndpoint,
|
||||
}
|
||||
|
||||
pub enum ConnResult {
|
||||
pub(super) enum ConnResult {
|
||||
Connecting(ConnectingStream),
|
||||
Connected(ConnectedStream),
|
||||
Refused(InitStream),
|
||||
}
|
||||
|
||||
impl ConnectingStream {
|
||||
pub fn new(
|
||||
pub(super) fn new(
|
||||
bound_port: BoundPort,
|
||||
remote_endpoint: IpEndpoint,
|
||||
option: &RawTcpOption,
|
||||
@ -64,7 +64,7 @@ impl ConnectingStream {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn has_result(&self) -> bool {
|
||||
pub(super) fn has_result(&self) -> bool {
|
||||
match self.tcp_conn.connect_state() {
|
||||
ConnectState::Connecting => false,
|
||||
ConnectState::Connected => true,
|
||||
@ -72,7 +72,7 @@ impl ConnectingStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn into_result(self) -> ConnResult {
|
||||
pub(super) fn into_result(self) -> ConnResult {
|
||||
let next_state = self.tcp_conn.connect_state();
|
||||
|
||||
match next_state {
|
||||
@ -88,15 +88,15 @@ impl ConnectingStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn local_endpoint(&self) -> IpEndpoint {
|
||||
pub(super) fn local_endpoint(&self) -> IpEndpoint {
|
||||
self.tcp_conn.local_endpoint().unwrap()
|
||||
}
|
||||
|
||||
pub fn remote_endpoint(&self) -> IpEndpoint {
|
||||
pub(super) fn remote_endpoint(&self) -> IpEndpoint {
|
||||
self.remote_endpoint
|
||||
}
|
||||
|
||||
pub fn iface(&self) -> &Arc<Iface> {
|
||||
pub(super) fn iface(&self) -> &Arc<Iface> {
|
||||
self.tcp_conn.iface()
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ use crate::{
|
||||
prelude::*,
|
||||
};
|
||||
|
||||
pub struct InitStream {
|
||||
pub(super) struct InitStream {
|
||||
bound_port: Option<BoundPort>,
|
||||
/// Indicates if the last `connect()` is considered to be done.
|
||||
///
|
||||
@ -45,7 +45,7 @@ pub struct InitStream {
|
||||
}
|
||||
|
||||
impl InitStream {
|
||||
pub fn new() -> Self {
|
||||
pub(super) fn new() -> Self {
|
||||
Self {
|
||||
bound_port: None,
|
||||
is_connect_done: true,
|
||||
@ -53,7 +53,7 @@ impl InitStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_bound(bound_port: BoundPort) -> Self {
|
||||
pub(super) fn new_bound(bound_port: BoundPort) -> Self {
|
||||
Self {
|
||||
bound_port: Some(bound_port),
|
||||
is_connect_done: true,
|
||||
@ -61,7 +61,7 @@ impl InitStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_refused(bound_port: BoundPort) -> Self {
|
||||
pub(super) fn new_refused(bound_port: BoundPort) -> Self {
|
||||
Self {
|
||||
bound_port: Some(bound_port),
|
||||
is_connect_done: false,
|
||||
@ -69,7 +69,7 @@ impl InitStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn bind(&mut self, endpoint: &IpEndpoint, can_reuse: bool) -> Result<()> {
|
||||
pub(super) fn bind(&mut self, endpoint: &IpEndpoint, can_reuse: bool) -> Result<()> {
|
||||
if self.bound_port.is_some() {
|
||||
return_errno_with_message!(Errno::EINVAL, "the socket is already bound to an address");
|
||||
}
|
||||
@ -79,7 +79,7 @@ impl InitStream {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn connect(
|
||||
pub(super) fn connect(
|
||||
self,
|
||||
remote_endpoint: &IpEndpoint,
|
||||
option: &RawTcpOption,
|
||||
@ -111,7 +111,7 @@ impl InitStream {
|
||||
)
|
||||
}
|
||||
|
||||
pub fn finish_last_connect(&mut self) -> Result<()> {
|
||||
pub(super) fn finish_last_connect(&mut self) -> Result<()> {
|
||||
if self.is_connect_done {
|
||||
return Ok(());
|
||||
}
|
||||
@ -130,7 +130,7 @@ impl InitStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn listen(
|
||||
pub(super) fn listen(
|
||||
self,
|
||||
backlog: usize,
|
||||
option: &RawTcpOption,
|
||||
@ -164,7 +164,7 @@ impl InitStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn try_recv(&self) -> Result<(usize, SocketAddr)> {
|
||||
pub(super) fn try_recv(&self) -> Result<(usize, SocketAddr)> {
|
||||
// FIXME: Linux does not return addresses for `recvfrom` on connection-oriented sockets.
|
||||
// This is a placeholder that has no Linux equivalent. (Note also that in this case
|
||||
// `getpeeraddr` will simply fail with `ENOTCONN`).
|
||||
@ -183,7 +183,7 @@ impl InitStream {
|
||||
Ok((0, UNSPECIFIED_SOCKET_ADDR))
|
||||
}
|
||||
|
||||
pub fn try_send(&self) -> Result<usize> {
|
||||
pub(super) fn try_send(&self) -> Result<usize> {
|
||||
if let Some(err) = self.test_and_clear_error() {
|
||||
return Err(err);
|
||||
}
|
||||
@ -191,7 +191,7 @@ impl InitStream {
|
||||
return_errno_with_message!(Errno::EPIPE, "the socket is not connected");
|
||||
}
|
||||
|
||||
pub fn local_endpoint(&self) -> Option<IpEndpoint> {
|
||||
pub(super) fn local_endpoint(&self) -> Option<IpEndpoint> {
|
||||
self.bound_port
|
||||
.as_ref()
|
||||
.map(|bound_port| bound_port.endpoint().unwrap())
|
||||
|
@ -13,12 +13,12 @@ use crate::{
|
||||
prelude::*,
|
||||
};
|
||||
|
||||
pub struct ListenStream {
|
||||
pub(super) struct ListenStream {
|
||||
tcp_listener: TcpListener,
|
||||
}
|
||||
|
||||
impl ListenStream {
|
||||
pub fn new(
|
||||
pub(super) fn new(
|
||||
bound_port: BoundPort,
|
||||
backlog: usize,
|
||||
option: &RawTcpOption,
|
||||
@ -39,7 +39,7 @@ impl ListenStream {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn try_accept(&self) -> Result<ConnectedStream> {
|
||||
pub(super) fn try_accept(&self) -> Result<ConnectedStream> {
|
||||
let (new_conn, remote_endpoint) = self.tcp_listener.accept().ok_or_else(|| {
|
||||
Error::with_message(Errno::EAGAIN, "no pending connection is available")
|
||||
})?;
|
||||
@ -47,11 +47,11 @@ impl ListenStream {
|
||||
Ok(ConnectedStream::new(new_conn, remote_endpoint, false))
|
||||
}
|
||||
|
||||
pub fn local_endpoint(&self) -> IpEndpoint {
|
||||
pub(super) fn local_endpoint(&self) -> IpEndpoint {
|
||||
self.tcp_listener.local_endpoint().unwrap()
|
||||
}
|
||||
|
||||
pub fn iface(&self) -> &Arc<Iface> {
|
||||
pub(super) fn iface(&self) -> &Arc<Iface> {
|
||||
self.tcp_listener.iface()
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ use crate::prelude::*;
|
||||
#[derive(Debug, Clone, Copy, CopyGetters, Setters)]
|
||||
#[get_copy = "pub"]
|
||||
#[set = "pub"]
|
||||
pub struct TcpOptionSet {
|
||||
pub(super) struct TcpOptionSet {
|
||||
no_delay: bool,
|
||||
maxseg: u32,
|
||||
keep_idle: u32,
|
||||
@ -20,13 +20,13 @@ pub struct TcpOptionSet {
|
||||
receive_inq: bool,
|
||||
}
|
||||
|
||||
pub const DEFAULT_MAXSEG: u32 = 536;
|
||||
pub const DEFAULT_KEEP_IDLE: u32 = 7200;
|
||||
pub const DEFAULT_SYN_CNT: u8 = 6;
|
||||
pub const DEFAULT_WINDOW_CLAMP: u32 = 0x8000_0000;
|
||||
pub(super) const DEFAULT_MAXSEG: u32 = 536;
|
||||
pub(super) const DEFAULT_KEEP_IDLE: u32 = 7200;
|
||||
pub(super) const DEFAULT_SYN_CNT: u8 = 6;
|
||||
pub(super) const DEFAULT_WINDOW_CLAMP: u32 = 0x8000_0000;
|
||||
|
||||
impl TcpOptionSet {
|
||||
pub fn new() -> Self {
|
||||
pub(super) fn new() -> Self {
|
||||
Self {
|
||||
no_delay: false,
|
||||
maxseg: DEFAULT_MAXSEG,
|
||||
@ -53,11 +53,11 @@ const TCP_RTO_MAX: Duration = Duration::from_secs(120);
|
||||
|
||||
/// The number of retransmits.
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub struct Retrans(u8);
|
||||
pub(super) struct Retrans(u8);
|
||||
|
||||
impl Retrans {
|
||||
/// Converts seconds to retransmits.
|
||||
pub const fn from_secs(seconds: u32) -> Self {
|
||||
pub(super) const fn from_secs(seconds: u32) -> Self {
|
||||
if seconds == 0 {
|
||||
return Self(0);
|
||||
}
|
||||
@ -80,7 +80,7 @@ impl Retrans {
|
||||
}
|
||||
|
||||
/// Converts retransmits to seconds.
|
||||
pub const fn to_secs(self) -> u32 {
|
||||
pub(super) const fn to_secs(self) -> u32 {
|
||||
let mut retrans = self.0;
|
||||
|
||||
if retrans == 0 {
|
||||
|
Reference in New Issue
Block a user