first commit

This commit is contained in:
alberr_b0yyy 2025-06-12 09:29:00 +02:00
commit d52e770aff
7 changed files with 1647 additions and 0 deletions

1509
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

7
Cargo.toml Normal file
View File

@ -0,0 +1,7 @@
[package]
name = "transfem_communication"
version = "0.1.0"
edition = "2021"
[dependencies]
actix-web = "4.9.0"

0
README.md Normal file
View File

BIN
src/.main.rs.swp Normal file

Binary file not shown.

76
src/lib.rs Normal file
View File

@ -0,0 +1,76 @@
use std::collections::HashMap;
const CHARSET: [&str; 8] = ["EEE", "eee", "EeE", "eEe", "EEe", "eEE", "Eee", "eeE"];
pub fn encode(bytes: Vec<u8>) -> String {
let mut result = String::new();
let mut buffer: u16 = 0;
let mut buffer_size = 0;
for byte in bytes {
buffer = (buffer << 8) | byte as u16;
buffer_size += 8;
while buffer_size >= 3 {
buffer_size -= 3;
let index = ((buffer >> buffer_size) & 0b111) as usize;
buffer &= (1 << buffer_size) - 1;
result.push_str(CHARSET[index]);
result.push(' ');
}
}
if buffer_size > 0 {
let index = (buffer << (3 - buffer_size)) as usize;
result.push_str(CHARSET[index]);
}
result
}
pub fn encode_str(message: &str) -> String {
return encode(message.as_bytes().to_vec());
}
pub fn decode(message: &str) -> Vec<u8> {
let mut result = Vec::new();
let map: HashMap<_, _> = CHARSET.iter().enumerate().map(|(i, &s)| (s, i)).collect();
let characters = message.split(' ');
let mut buffer: u16 = 0;
let mut buffer_size = 0;
for char in characters {
if char.is_empty() {
continue;
}
let value = *map.get(char).expect("Invalid character in input");
buffer = (buffer << 3) | value as u16;
buffer_size += 3;
while buffer_size >= 8 {
buffer_size -= 8;
let byte = ((buffer >> buffer_size) & 0xFF) as u8;
buffer &= (1 << buffer_size) - 1;
result.push(byte);
}
}
if buffer_size == 3 {
let byte = buffer as u8;
result.push(byte);
}
result
}
pub fn decode_str(message: &str) -> String {
String::from_utf8(decode(message)).expect("Decoded bytes were not valid UTF-8")
}

28
src/main.rs Normal file
View File

@ -0,0 +1,28 @@
use std::collections::HashMap;
use std::sync::Mutex;
use transfem_communication::encode_str;
use transfem_communication::decode_str;
use actix_web::{get, post, web, App, HttpServer, Responder, HttpResponse};
#[get("/e/{message}")]
async fn encode_message(path: web::Path<String>) -> impl Responder {
let message = path.into_inner();
HttpResponse::Ok().body(encode_str(&message))
}
#[get("/d/{message}")]
async fn decode_message(path: web::Path<String>) -> impl Responder {
let message = path.into_inner();
HttpResponse::Ok().body(decode_str(&message))
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
println!("started");
HttpServer::new(|| {
App::new()
.service(decode_message)
.service(encode_message)
})
.bind("0.0.0.0:26454")?
.run()
.await
}

27
src/main.rs~ Normal file
View File

@ -0,0 +1,27 @@
use std::collections::HashMap;
use std::sync::Mutex;
use transfem_communication::encode_str;
use transfem_communication::decode_str;
use actix_web::{get, post, web, App, HttpServer, Responder, HttpResponse};
#[get("/E/e/{message}")]
async fn encode_message(path: web::Path<String>) -> impl Responder {
let message = path.into_inner();
HttpResponse::Ok().body(encode_str(&message))
}
#[get("/E/d/{message}")]
async fn decode_message(path: web::Path<String>) -> impl Responder {
let message = path.into_inner();
HttpResponse::Ok().body(decode_str(&message))
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
App::new()
.service(decode_message)
.service(encode_message)
})
.bind("0.0.0.0:26454")?
.run()
.await
}