From ae328231a3407be765ba9586ffbc56dd8502040f Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Sun, 11 Jun 2023 11:43:09 +0800
Subject: [PATCH] Fix wrong parsing of SSH_MSG_IGNORE

This fixes PuTTY connecting. Also improve error printing
---
 embassy/demos/std/src/main.rs | 8 +++++---
 src/conn.rs                   | 3 ++-
 src/packets.rs                | 6 ++++--
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/embassy/demos/std/src/main.rs b/embassy/demos/std/src/main.rs
index ccefa82..14bc8da 100644
--- a/embassy/demos/std/src/main.rs
+++ b/embassy/demos/std/src/main.rs
@@ -62,9 +62,11 @@ async fn main_task(spawner: Spawner) {
     // Launch network task
     spawner.spawn(net_task(stack)).unwrap();
 
-    let config = &*singleton!(
-        SunsetMutex::new(SSHConfig::new().unwrap())
-    );
+    let config = &*singleton!(  {
+        let mut config = SSHConfig::new().unwrap();
+        // config.set_console_pw(Some("pw")).unwrap();
+        SunsetMutex::new(config)
+    } );
 
     for _ in 0..NUM_LISTENERS {
         spawner.spawn(listener(stack, config)).unwrap();
diff --git a/src/conn.rs b/src/conn.rs
index ab41414..d8f236c 100644
--- a/src/conn.rs
+++ b/src/conn.rs
@@ -176,6 +176,7 @@ impl<C: CliBehaviour, S: ServBehaviour> Conn<C, S> {
         b: &mut Behaviour<'_, C, S>,
     ) -> Result<Dispatched, Error> {
         // Parse the packet
+        trace!("Received\n{:#?}", payload.hex_dump());
         let r = sshwire::packet_from_bytes(payload, &self.parse_ctx);
 
         match r {
@@ -186,7 +187,7 @@ impl<C: CliBehaviour, S: ServBehaviour> Conn<C, S> {
                 Ok(Dispatched::default())
             }
             Err(e) => {
-                trace!("Error decoding packet: {e} {:#?}", payload.hex_dump());
+                error!("Error decoding packet: {e}");
                 return Err(e)
             }
         }
diff --git a/src/packets.rs b/src/packets.rs
index a5a16a3..7b1efd9 100644
--- a/src/packets.rs
+++ b/src/packets.rs
@@ -57,7 +57,9 @@ pub struct KexInit<'a> {
 pub struct NewKeys {}
 
 #[derive(Debug, SSHEncode, SSHDecode)]
-pub struct Ignore {}
+pub struct Ignore<'a> {
+    pub data: BinString<'a>,
+}
 
 /// Named to avoid clashing with [`fmt::Debug`]
 #[derive(Debug, SSHEncode, SSHDecode)]
@@ -950,7 +952,7 @@ pub enum Category {
 
 messagetypes![
 (1, Disconnect, Disconnect<'a>, SSH_MSG_DISCONNECT, All),
-(2, Ignore, Ignore, SSH_MSG_IGNORE, All),
+(2, Ignore, Ignore<'a>, SSH_MSG_IGNORE, All),
 (3, Unimplemented, Unimplemented, SSH_MSG_UNIMPLEMENTED, All),
 (4, DebugPacket, DebugPacket<'a>, SSH_MSG_DEBUG, All),
 (5, ServiceRequest, ServiceRequest<'a>, SSH_MSG_SERVICE_REQUEST, Auth),
-- 
GitLab