diff --git a/.gitignore b/.gitignore index c69fa41..eae2549 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Cargo.lock hagent_test.sock release +*.sock \ No newline at end of file diff --git a/noxis-rs/src/main.rs b/noxis-rs/src/main.rs index 232d37f..60e7ded 100644 --- a/noxis-rs/src/main.rs +++ b/noxis-rs/src/main.rs @@ -36,9 +36,13 @@ async fn main() -> anyhow::Result<()>{ preboot.clone() ).await; }); - handler.push(config_module); + let cli_module = tokio::spawn(async move { + let _ = init_cli_pipeline().await; + }); + handler.push(cli_module); + for i in handler { let _ = i.await; } diff --git a/noxis-rs/src/options/cli_pipeline.rs b/noxis-rs/src/options/cli_pipeline.rs index 5456d83..2047daa 100644 --- a/noxis-rs/src/options/cli_pipeline.rs +++ b/noxis-rs/src/options/cli_pipeline.rs @@ -1,8 +1,8 @@ use log::{error, info, warn}; -use tokio::net::{TcpListener, TcpStream}; +use tokio::net::{TcpListener, TcpStream, UnixStream}; use anyhow::{Result as DynResult, Error}; use tokio::time::{sleep, Duration}; -use std::{borrow::BorrowMut, net::{IpAddr, Ipv4Addr}}; +use std::{borrow::BorrowMut, fs, net::{IpAddr, Ipv4Addr}}; // use std::io::BufReader; use tokio::io::{BufReader, AsyncWriteExt, AsyncBufReadExt}; use tokio::{io::AsyncReadExt, net::UnixListener}; @@ -24,21 +24,20 @@ use serde_json::from_str; /// pub async fn init_cli_pipeline() -> DynResult<()> { match init_listener().await { - Some(list) => { + Ok(list) => { + info!("Successfully opened UnixListener for CLI"); loop { - if let Ok((socket, addr)) = list.accept().await { - // isolation - if IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)) != addr.ip() { - warn!("Declined attempt to connect TCP-socket from {}", addr); - continue; - } + if let Ok((socket, _)) = list.accept().await { process_connection(socket).await; } sleep(Duration::from_millis(500)).await; } // Ok(()) }, - None => Err(Error::msg("Addr 127.0.0.1:7753 is already in use")) + Err(er) => { + error!("Failed to open UnixListener for CLI"); + Err(er) + }, } } @@ -55,17 +54,20 @@ pub async fn init_cli_pipeline() -> DynResult<()> { /// /// *depends on* : `tokio::net::TcpListener` /// -async fn init_listener() -> Option { - match TcpListener::bind("127.0.0.1:7753").await { - Ok(listener) => { - info!("Runner is listening localhost:7753"); - Some(listener) - }, - Err(_) => { - error!("Cannot create TCP listener for CLI"); - None - } - } +async fn init_listener() -> anyhow::Result { + // match TcpListener::bind("127.0.0.1:7753").await { + // Ok(listener) => { + // info!("Runner is listening localhost:7753"); + // Some(listener) + // }, + // Err(_) => { + // error!("Cannot create TCP listener for CLI"); + // None + // } + // } + let socket_path = "noxis-rs"; + let _ = fs::remove_file(socket_path); + Ok(UnixListener::bind(socket_path)?) } /// # Fn `process_connection` @@ -81,11 +83,10 @@ async fn init_listener() -> Option { /// /// *depends on* : `tokio::net::TcpStream` /// -async fn process_connection(mut stream: TcpStream) { +async fn process_connection(mut stream: UnixStream) { let buf_reader = BufReader::new(stream.borrow_mut()); let mut rqst = buf_reader.lines(); - - + while let Ok(Some(line)) = rqst.next_line().await { if line.is_empty() { break @@ -102,6 +103,6 @@ async fn process_connection(mut stream: TcpStream) { println!("{}", line); } - let response = "HTTP/1.1 200 OK\r\nContent-Length: 13\r\nContent-Type: text/plain\r\n\r\nHello, World!"; + let response = "OK"; stream.write_all(response.as_bytes()).await.unwrap(); }