use super::Result;
use crate::cli_state::TcpInlet;
use crate::nodes::models::portal::OutletStatus;
use crate::CliState;
use ockam_core::errcode::{Kind, Origin};
use ockam_core::Address;
use ockam_multiaddr::MultiAddr;
use ockam_transport_core::HostnamePort;
use std::net::SocketAddr;
impl CliState {
#[instrument(skip_all)]
pub async fn create_tcp_inlet(
&self,
node_name: &str,
bind_addr: &SocketAddr,
outlet_addr: &MultiAddr,
alias: &str,
privileged: bool,
) -> Result<TcpInlet> {
let tcp_inlet = TcpInlet::new(bind_addr, outlet_addr, alias, privileged);
self.tcp_portals_repository()
.store_tcp_inlet(node_name, &tcp_inlet)
.await?;
Ok(tcp_inlet)
}
#[instrument(skip_all)]
pub async fn get_tcp_inlet(&self, node_name: &str, alias: &str) -> Result<TcpInlet> {
Ok(self
.tcp_portals_repository()
.get_tcp_inlet(node_name, alias)
.await?
.ok_or_else(|| {
ockam_core::Error::new(
Origin::Api,
Kind::NotFound,
format!("no tcp inlet found for node {node_name}, with alias {alias}"),
)
})?)
}
#[instrument(skip_all)]
pub async fn delete_tcp_inlet(&self, node_name: &str, alias: &str) -> Result<()> {
Ok(self
.tcp_portals_repository()
.delete_tcp_inlet(node_name, alias)
.await?)
}
#[instrument(skip_all)]
pub async fn create_tcp_outlet(
&self,
node_name: &str,
to: &HostnamePort,
worker_addr: &Address,
payload: &Option<String>,
privileged: bool,
) -> Result<OutletStatus> {
let tcp_outlet_status =
OutletStatus::new(to.clone(), worker_addr.clone(), payload.clone(), privileged);
self.tcp_portals_repository()
.store_tcp_outlet(node_name, &tcp_outlet_status)
.await?;
Ok(tcp_outlet_status)
}
#[instrument(skip_all)]
pub async fn delete_tcp_outlet(&self, node_name: &str, worker_addr: &Address) -> Result<()> {
Ok(self
.tcp_portals_repository()
.delete_tcp_outlet(node_name, worker_addr)
.await?)
}
}