From cf482ae3bfb8492d996cfc9e036f5086ff69eed4 Mon Sep 17 00:00:00 2001 From: Aris Adamantiadis Date: Wed, 17 Jun 2009 23:53:00 +0200 Subject: [PATCH] Begin of asynchronous SSH message parsing --- include/libssh/priv.h | 4 ++++ libssh/channels.c | 2 ++ libssh/messages.c | 12 ++++++++++++ libssh/packet.c | 8 +++++++- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/include/libssh/priv.h b/include/libssh/priv.h index 68f0e183..f344cedd 100644 --- a/include/libssh/priv.h +++ b/include/libssh/priv.h @@ -722,6 +722,10 @@ int ssh_handle_packets(SSH_SESSION *session); /* match.c */ int match_hostname(const char *host, const char *pattern, unsigned int len); +/* messages.c */ + +void message_handle(SSH_SESSION *session, u32 type); + /* log.c */ #define _enter_function(sess) \ diff --git a/libssh/channels.c b/libssh/channels.c index d637ee1c..3b36299d 100644 --- a/libssh/channels.c +++ b/libssh/channels.c @@ -542,6 +542,8 @@ static void channel_rcv_request(SSH_SESSION *session) { leave_function(); return; } + /* TODO call message_handle since it handles channel requests as messages */ + /* *but* reset buffer before !! */ ssh_log(session, SSH_LOG_PACKET, "Unknown request %s", request); SAFE_FREE(request); diff --git a/libssh/messages.c b/libssh/messages.c index 18946805..425829bb 100644 --- a/libssh/messages.c +++ b/libssh/messages.c @@ -806,6 +806,18 @@ void ssh_message_free(SSH_MESSAGE *msg){ SAFE_FREE(msg); } +/** \internal + * \brief handle various SSH request messages and stack them for callback + * \param session SSH session + * \param type packet type + * \returns nothing + */ +void message_handle(SSH_SESSION *session, u32 type){ + SSH_MESSAGE *msg=ssh_message_retrieve(session,type); + if(msg){ + /* TODO store msg somewhere */ + } +} /** * @} */ diff --git a/libssh/packet.c b/libssh/packet.c index 4feca067..870efd4a 100644 --- a/libssh/packet.c +++ b/libssh/packet.c @@ -594,7 +594,7 @@ int packet_send(SSH_SESSION *session) { void packet_parse(SSH_SESSION *session) { STRING *error_s = NULL; char *error = NULL; - int type = session->in_packet.type; + u32 type = session->in_packet.type; u32 tmp; #ifdef HAVE_SSH1 @@ -652,9 +652,15 @@ void packet_parse(SSH_SESSION *session) { case SSH2_MSG_CHANNEL_EOF: case SSH2_MSG_CHANNEL_CLOSE: channel_handle(session,type); + return; case SSH2_MSG_IGNORE: case SSH2_MSG_DEBUG: return; + case SSH2_MSG_SERVICE_REQUEST: + case SSH2_MSG_USERAUTH_REQUEST: + case SSH2_MSG_CHANNEL_OPEN: + message_handle(session,type); + return; default: ssh_log(session, SSH_LOG_RARE, "Received unhandled packet %d", type); }