From cc30a8e9b11761b85f0d0f15e4cdc40830bb6257 Mon Sep 17 00:00:00 2001 From: Warren Date: Sat, 20 Jun 2026 12:53:25 +0800 Subject: [PATCH] feat(ssh): Add ScpState state machine for SCP file transfer (Phase 8.3 init) --- data/auth.sqlite | Bin 73728 -> 73728 bytes markbase-core/src/ssh_server/channel.rs | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/data/auth.sqlite b/data/auth.sqlite index d92f7afbae2a3609cb5eb625c3b3212c89d92310..323d51d0f2147307a6b0f0d1102ce07bace6debe 100644 GIT binary patch delta 296 zcmZoTz|wGlWr8$g>qHr6#@3Aq?J|t1lMhNMOy-ci!zMhXiK9P#^D9|4Mj*Sfu0L(^ zH@QDd!c#VXk$=uF`HYuYmMJ$sH#M)MsFM9TC$lJ1N@{LC`_s)|^gr+mJY!|%WMY5L zz`z1#07dPwiu(We=W}2{0$iIJ3z!v{9oV-_W<{Xh zc)o5{RLJGw;bxX*gz9(L%=p$$h*4^?!~acSU;Y2j&p2!Q7klMhNMOy-ci!^Yau#L=I!`IRgiBaq!#*PlH3 zo7^8J)|Sm*({%G?T{SW*Ck6D>Hnb@B& zFtC6bKv8?FqW=H=`Ro~x0M};50%iqfd-ki7*$>ojRuu4OXOg#{tawsn^Xuc19L)B- z`zEtr07@uW@NV9B*Nq7%!Z?}z0Z62pXEWnlJ0V8N$qxTFfnEClKR@Hl?O*sA|MT, // Phase 14.2修复:累积不完整的SFTP packets // ⭐⭐⭐⭐⭐ Phase 14.4:SCP packet累积buffer scp_input_buffer: Vec, // Phase 14.4修复:累积不完整的SCP packets + // ⭐⭐⭐⭐⭐ Phase 8.3: SCP file transfer state machine + scp_state: ScpState, // Phase 8.3: SCP state tracking // Phase 13.3: 端口转发相关字段 direct_tcpip: Option, // direct-tcpip channel(Remote forwarding) forwarded_tcpip: Option, // forwarded-tcpip channel(Local forwarding) @@ -1957,6 +1962,21 @@ enum ChannelState { Closed, } +/// ⭐⭐⭐⭐⭐ Phase 8.3: SCP file transfer state machine +/// Reference: OpenSSH scp.c: sink() (destination mode) +#[derive(Debug, Clone)] +enum ScpState { + Idle, + FileCommandReceived { + size: u64, + filename: String, + remaining: u64, + }, + DirectoryCreated { + dirname: String, + }, +} + /// SSH string读取辅助函数 fn read_ssh_string(reader: &mut R) -> Result { let length = reader.read_u32::()?;