Compare commits
3 Commits
rewrite-in
...
v20250630
Author | SHA1 | Date | |
---|---|---|---|
d1244ca79e | |||
2281a85ecd | |||
82e0cb12b0 |
37
.gitea/workflows/build.yaml
Normal file
37
.gitea/workflows/build.yaml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: Build
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
env:
|
||||||
|
# Disable incremental compilation for faster from-scratch builds
|
||||||
|
CARGO_INCREMENTAL: "0"
|
||||||
|
|
||||||
|
# RUSTUP_DIST_SERVER: "http://${{ vars.CACHE_PROXY }}/rust-static"
|
||||||
|
# RUSTUP_UPDATE_ROOT: "http://${{ vars.CACHE_PROXY }}/rust-static/rustup"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: docker
|
||||||
|
steps:
|
||||||
|
- name: Setup debian environment
|
||||||
|
run: test -f /etc/apt/sources.list.d/debian.sources && sed -i "s,deb.debian.org,${{ vars.CACHE_PROXY }}," /etc/apt/sources.list.d/debian.sources || sed -i "s,deb.debian.org,${{ vars.CACHE_PROXY }}," /etc/apt/sources.list ; apt update && apt install -y build-essential mingw-w64 curl && curl -v http://${{ vars.CACHE_PROXY }}/misc/rustup-install.sh | bash -s -- -y --default-toolchain stable-x86_64-unknown-linux-gnu --target x86_64-pc-windows-gnu --profile default; echo $HOME/.cargo/bin >> $GITHUB_PATH
|
||||||
|
- run: pwd; echo $PATH; rustup target add x86_64-unknown-linux-gnu x86_64-pc-windows-gnu
|
||||||
|
- uses: https://gitea.com/actions/checkout@v4
|
||||||
|
- run: cargo build --release --target x86_64-pc-windows-gnu
|
||||||
|
- run: cargo build --release --target x86_64-unknown-linux-gnu
|
||||||
|
- uses: https://gitea.com/actions/gitea-release-action@v1
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
with:
|
||||||
|
files: |-
|
||||||
|
target/x86_64-pc-windows-gnu/release/port-knocking-proxy-rs.exe
|
||||||
|
target/x86_64-unknown-linux-gnu/release/port-knocking-proxy-rs
|
||||||
|
draft: true
|
||||||
|
#token: ${{ secrets.ACTION_RELEASE_TOKEN }}
|
36
src/main.rs
36
src/main.rs
@@ -1,5 +1,5 @@
|
|||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use std::io;
|
use std::io::{self, Read, Write};
|
||||||
use std::net::{TcpStream, ToSocketAddrs, UdpSocket};
|
use std::net::{TcpStream, ToSocketAddrs, UdpSocket};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
@@ -99,12 +99,42 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
|
|
||||||
let stdin_thread = thread::spawn(move || {
|
let stdin_thread = thread::spawn(move || {
|
||||||
let mut stdin = io::stdin();
|
let mut stdin = io::stdin();
|
||||||
io::copy(&mut stdin, &mut stream_clone).ok();
|
let mut buffer = [0u8; 1024]; // 1KB buffer
|
||||||
|
|
||||||
|
loop {
|
||||||
|
match stdin.read(&mut buffer) {
|
||||||
|
Ok(0) => break, // EOF
|
||||||
|
Ok(n) => {
|
||||||
|
if stream_clone.write_all(&buffer[..n]).is_err() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if stream_clone.flush().is_err() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let stdout_thread = thread::spawn(move || {
|
let stdout_thread = thread::spawn(move || {
|
||||||
let mut stdout = io::stdout();
|
let mut stdout = io::stdout();
|
||||||
io::copy(&mut stream, &mut stdout).ok();
|
let mut buffer = [0u8; 1024]; // 1KB buffer
|
||||||
|
|
||||||
|
loop {
|
||||||
|
match stream.read(&mut buffer) {
|
||||||
|
Ok(0) => break, // EOF
|
||||||
|
Ok(n) => {
|
||||||
|
if stdout.write_all(&buffer[..n]).is_err() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if stdout.flush().is_err() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => break,
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
stdin_thread.join().unwrap();
|
stdin_thread.join().unwrap();
|
||||||
|
Reference in New Issue
Block a user