v0.5.0: Add syslog support, fix TCP send/both, EC-SRP5 server auth
All checks were successful
CI / test (push) Successful in 1m22s
All checks were successful
CI / test (push) Successful in 1m22s
New features: - --syslog <address:port> sends structured events to remote syslog (RFC 5424 UDP) Events: AUTH_SUCCESS, AUTH_FAILURE, TEST_START, TEST_END, TEST_RESULT - EC-SRP5 authentication for both client and server modes - TCP multi-connection support (session tokens, all 3 directions) Bug fixes since v0.2.0: - EC-SRP5 server: fixed gamma parity (was 50% auth failure rate) - EC-SRP5 server: use lift_x not redp1 for verification - TCP send direction: server sends 12-byte status messages to client - TCP both direction: TX loop injects status between data packets - TCP data: send all zeros (no 0x07 header that MikroTik rejected) - TCP disconnect detection: running flag set on EOF - UDP multi-connection: unconnected socket accepts all source ports Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -66,7 +66,11 @@ pub async fn run_server(
|
||||
if let Err(e) =
|
||||
handle_client(stream, peer, auth_user, auth_pass, udp_offset, sessions, ecsrp5).await
|
||||
{
|
||||
tracing::error!("Client {} error: {}", peer, e);
|
||||
let err_str = format!("{}", e);
|
||||
tracing::error!("Client {} error: {}", peer, err_str);
|
||||
if err_str.contains("uth") {
|
||||
crate::syslog_logger::auth_failure(&peer.to_string(), "-", "-", &err_str);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -229,7 +233,14 @@ async fn handle_client(
|
||||
.await?;
|
||||
}
|
||||
|
||||
if cmd.is_udp() {
|
||||
// Log auth success and test start
|
||||
let auth_type = if ecsrp5_creds.is_some() { "ecsrp5" } else if auth_user.is_some() { "md5" } else { "none" };
|
||||
let proto_str = if cmd.is_udp() { "UDP" } else { "TCP" };
|
||||
let dir_str = match cmd.direction { CMD_DIR_RX => "RX", CMD_DIR_TX => "TX", _ => "BOTH" };
|
||||
crate::syslog_logger::auth_success(&peer.to_string(), auth_user.as_deref().unwrap_or("-"), auth_type);
|
||||
crate::syslog_logger::test_start(&peer.to_string(), proto_str, dir_str, cmd.tcp_conn_count);
|
||||
|
||||
let result = if cmd.is_udp() {
|
||||
run_udp_test_server(&mut stream, peer, &cmd, udp_port_offset).await
|
||||
} else if is_tcp_multi {
|
||||
let conn_count = cmd.tcp_conn_count;
|
||||
@@ -285,7 +296,10 @@ async fn handle_client(
|
||||
run_tcp_multiconn_server(all_streams, cmd).await
|
||||
} else {
|
||||
run_tcp_test_server(stream, cmd).await
|
||||
}
|
||||
};
|
||||
|
||||
crate::syslog_logger::test_end(&peer.to_string(), proto_str, dir_str);
|
||||
result
|
||||
}
|
||||
|
||||
// --- TCP Test Server ---
|
||||
|
||||
Reference in New Issue
Block a user