mirror of
https://gitlab.redox-os.org/CoffeeCode/redox-ssh.git
synced 2025-12-28 15:22:18 +01:00
Initial channel implementation
This commit is contained in:
parent
fe447bf443
commit
42ab772a72
1 changed files with 125 additions and 0 deletions
|
|
@ -225,6 +225,131 @@ impl<'a> Connection {
|
|||
self.send(res)?;
|
||||
Ok(())
|
||||
}
|
||||
MessageType::UserAuthRequest => {
|
||||
let mut reader = packet.reader();
|
||||
let name = reader.read_utf8()?;
|
||||
let service = reader.read_utf8()?;
|
||||
let method = reader.read_utf8()?;
|
||||
|
||||
let success = if method == "password" {
|
||||
assert!(reader.read_bool()? == false);
|
||||
let pass = reader.read_utf8()?;
|
||||
pass == "hunter2"
|
||||
}
|
||||
else {
|
||||
false
|
||||
};
|
||||
|
||||
if success {
|
||||
self.send(Packet::new(MessageType::UserAuthSuccess))?;
|
||||
}
|
||||
else {
|
||||
let mut res = Packet::new(MessageType::UserAuthFailure);
|
||||
res.with_writer(&|w| {
|
||||
w.write_string("password")?;
|
||||
w.write_bool(false)?;
|
||||
Ok(())
|
||||
})?;
|
||||
|
||||
self.send(res)?;
|
||||
}
|
||||
|
||||
debug!("User Auth {:?}, {:?}, {:?}", name, service, method);
|
||||
Ok(())
|
||||
}
|
||||
MessageType::ChannelOpen => {
|
||||
let mut reader = packet.reader();
|
||||
let channel_type = reader.read_utf8()?;
|
||||
let sender_channel = reader.read_uint32()?;
|
||||
let window_size = reader.read_uint32()?;
|
||||
let max_packet_size = reader.read_uint32()?;
|
||||
|
||||
let mut res = Packet::new(MessageType::ChannelOpenConfirmation);
|
||||
res.with_writer(&|w| {
|
||||
w.write_uint32(sender_channel)?;
|
||||
w.write_uint32(0)?;
|
||||
w.write_uint32(window_size)?;
|
||||
w.write_uint32(max_packet_size)?;
|
||||
Ok(())
|
||||
})?;
|
||||
|
||||
self.send(res)?;
|
||||
debug!(
|
||||
"Channel Open {:?}, {:?}, {:?}, {:?}",
|
||||
channel_type,
|
||||
sender_channel,
|
||||
window_size,
|
||||
max_packet_size
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
MessageType::ChannelRequest => {
|
||||
let mut reader = packet.reader();
|
||||
let channel = reader.read_uint32()?;
|
||||
let request = reader.read_utf8()?;
|
||||
let want_reply = reader.read_bool()?;
|
||||
|
||||
debug!(
|
||||
"Channel Request {:?}, {:?}, {:?}",
|
||||
channel,
|
||||
request,
|
||||
want_reply
|
||||
);
|
||||
|
||||
if request == "pty-req" {
|
||||
let term = reader.read_utf8()?;
|
||||
let char_width = reader.read_uint32()?;
|
||||
let row_height = reader.read_uint32()?;
|
||||
let pixel_width = reader.read_uint32()?;
|
||||
let pixel_height = reader.read_uint32()?;
|
||||
let modes = reader.read_string()?;
|
||||
|
||||
debug!(
|
||||
"PTY request: {:?} {:?} {:?} {:?} {:?} {:?}",
|
||||
term,
|
||||
char_width,
|
||||
row_height,
|
||||
pixel_width,
|
||||
pixel_height,
|
||||
modes
|
||||
);
|
||||
}
|
||||
|
||||
if request == "shell" {
|
||||
debug!("Shell request");
|
||||
}
|
||||
|
||||
if want_reply {
|
||||
let mut res = Packet::new(MessageType::ChannelSuccess);
|
||||
res.with_writer(&|w| w.write_uint32(0));
|
||||
self.send(res)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
MessageType::ChannelData => {
|
||||
let mut reader = packet.reader();
|
||||
let channel = reader.read_uint32()?;
|
||||
let data = reader.read_string()?;
|
||||
|
||||
let mut res = Packet::new(MessageType::ChannelData);
|
||||
res.with_writer(&|w| {
|
||||
w.write_uint32(0)?;
|
||||
w.write_bytes(data.as_slice())?;
|
||||
Ok(())
|
||||
})?;
|
||||
|
||||
self.send(res);
|
||||
|
||||
debug!(
|
||||
"Channel {} Data ({} bytes): {:?}",
|
||||
channel,
|
||||
data.len(),
|
||||
data
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
MessageType::KeyExchange(_) => {
|
||||
let mut kex = self.key_exchange.take().ok_or(
|
||||
ConnectionError::KeyExchangeError,
|
||||
|
|
|
|||
Loading…
Reference in a new issue