mirror of
https://github.com/Astatin3/unshell.git
synced 2026-06-08 22:38:01 -06:00
Update PROTOCOL.md
This commit is contained in:
+647
-691
File diff suppressed because it is too large
Load Diff
@@ -8,8 +8,12 @@
|
|||||||
//! nc 127.0.0.1 1337
|
//! nc 127.0.0.1 1337
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
use libc::{accept, bind, listen, socket, sockaddr_in, socklen_t, read, write, close, AF_INET, SOCK_STREAM};
|
#![no_std]
|
||||||
|
|
||||||
use core::mem::zeroed;
|
use core::mem::zeroed;
|
||||||
|
use libc::{
|
||||||
|
AF_INET, SOCK_STREAM, accept, bind, close, listen, read, sockaddr_in, socket, socklen_t, write,
|
||||||
|
};
|
||||||
|
|
||||||
const PORT: u16 = 1337;
|
const PORT: u16 = 1337;
|
||||||
const BACKLOG: i32 = 128;
|
const BACKLOG: i32 = 128;
|
||||||
@@ -20,31 +24,36 @@ fn main() -> Result<(), NetError> {
|
|||||||
listen_socket(server_fd, BACKLOG)?;
|
listen_socket(server_fd, BACKLOG)?;
|
||||||
|
|
||||||
println!("TCP Server listening on port {}", PORT);
|
println!("TCP Server listening on port {}", PORT);
|
||||||
println!("Connect with: nc 127.0.0.1 {}", PORT);
|
|
||||||
|
|
||||||
let mut counter: u32 = 0;
|
let mut counter: u32 = 0;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match accept_client(server_fd) {
|
match accept_client(server_fd) {
|
||||||
Ok(client_fd) => {
|
Ok(client_fd) => {
|
||||||
|
println!("Connect with: nc 127.0.0.1 {}", PORT);
|
||||||
counter += 1;
|
counter += 1;
|
||||||
let message = make_packet(counter);
|
let message = make_packet(counter);
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let _ = write(client_fd, message.as_bytes().as_ptr() as *const libc::c_void, message.len());
|
let _ = write(
|
||||||
|
client_fd,
|
||||||
|
message.as_bytes().as_ptr() as *const libc::c_void,
|
||||||
|
message.len(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut buf = [0u8; 1024];
|
// let mut buf = [0u8; 1024];
|
||||||
loop {
|
// loop {
|
||||||
let n = unsafe {
|
// let n = unsafe {
|
||||||
read(client_fd, buf.as_mut_ptr() as *mut libc::c_void, buf.len())
|
// read(client_fd, buf.as_mut_ptr() as *mut libc::c_void, buf.len())
|
||||||
};
|
// };
|
||||||
if n <= 0 {
|
// if n <= 0 {
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
|
println!("Closed");
|
||||||
close(client_fd);
|
close(client_fd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,9 +63,7 @@ fn main() -> Result<(), NetError> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn create_socket() -> Result<i32, NetError> {
|
fn create_socket() -> Result<i32, NetError> {
|
||||||
let fd = unsafe {
|
let fd = unsafe { socket(AF_INET, SOCK_STREAM, 0) };
|
||||||
socket(AF_INET, SOCK_STREAM, 0)
|
|
||||||
};
|
|
||||||
if fd < 0 {
|
if fd < 0 {
|
||||||
return Err(NetError::DeviceError);
|
return Err(NetError::DeviceError);
|
||||||
}
|
}
|
||||||
@@ -66,7 +73,11 @@ fn create_socket() -> Result<i32, NetError> {
|
|||||||
fn bind_socket(fd: i32, port: u16) -> Result<(), NetError> {
|
fn bind_socket(fd: i32, port: u16) -> Result<(), NetError> {
|
||||||
let addr = build_sockaddr(port);
|
let addr = build_sockaddr(port);
|
||||||
let result = unsafe {
|
let result = unsafe {
|
||||||
bind(fd, &addr as *const sockaddr_in as *const libc::sockaddr, std::mem::size_of::<sockaddr_in>() as socklen_t)
|
bind(
|
||||||
|
fd,
|
||||||
|
&addr as *const sockaddr_in as *const libc::sockaddr,
|
||||||
|
std::mem::size_of::<sockaddr_in>() as socklen_t,
|
||||||
|
)
|
||||||
};
|
};
|
||||||
if result < 0 {
|
if result < 0 {
|
||||||
return Err(NetError::BindFailed);
|
return Err(NetError::BindFailed);
|
||||||
@@ -87,7 +98,11 @@ fn accept_client(server_fd: i32) -> Result<i32, NetError> {
|
|||||||
let mut client_len: socklen_t = std::mem::size_of::<sockaddr_in>() as socklen_t;
|
let mut client_len: socklen_t = std::mem::size_of::<sockaddr_in>() as socklen_t;
|
||||||
|
|
||||||
let client_fd = unsafe {
|
let client_fd = unsafe {
|
||||||
accept(server_fd, &mut client_addr as *mut sockaddr_in as *mut libc::sockaddr, &mut client_len)
|
accept(
|
||||||
|
server_fd,
|
||||||
|
&mut client_addr as *mut sockaddr_in as *mut libc::sockaddr,
|
||||||
|
&mut client_len,
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
if client_fd < 0 {
|
if client_fd < 0 {
|
||||||
@@ -157,7 +172,10 @@ pub struct SmallStr<const N: usize> {
|
|||||||
|
|
||||||
impl<const N: usize> SmallStr<N> {
|
impl<const N: usize> SmallStr<N> {
|
||||||
pub const fn new() -> Self {
|
pub const fn new() -> Self {
|
||||||
Self { data: [0u8; N], len: 0 }
|
Self {
|
||||||
|
data: [0u8; N],
|
||||||
|
len: 0,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pub fn push(&mut self, byte: u8) {
|
pub fn push(&mut self, byte: u8) {
|
||||||
if self.len < N {
|
if self.len < N {
|
||||||
|
|||||||
Reference in New Issue
Block a user