From 09e8cf33d7d12db2b2e7f23be7638999bb557c0d Mon Sep 17 00:00:00 2001 From: milo Date: Mon, 18 Apr 2011 14:39:12 +0200 Subject: [messages] don't queue messages if callback present (cherry picked from commit 1979c14aac47137e7af782e7e49ec43f910b2b00) --- src/messages.c | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/src/messages.c b/src/messages.c index 4ce2d03d..5f02f2d5 100644 --- a/src/messages.c +++ b/src/messages.c @@ -69,6 +69,31 @@ static ssh_message ssh_message_new(ssh_session session){ return msg; } +static int ssh_execute_message_callback(ssh_session session, ssh_message msg) { + int ret; + if(session->ssh_message_callback != NULL) { + ret = session->ssh_message_callback(session, msg, + session->ssh_message_callback_data); + if(ret == 1) { + ret = ssh_message_reply_default(msg); + ssh_message_free(msg); + if(ret != SSH_OK) { + return ret; + } + } else { + ssh_message_free(msg); + } + } else { + ret = ssh_message_reply_default(msg); + ssh_message_free(msg); + if(ret != SSH_OK) { + return ret; + } + } + return SSH_OK; +} + + /** * @internal * @@ -79,12 +104,16 @@ static ssh_message ssh_message_new(ssh_session session){ * @param[in] message The message to add to the queue. */ void ssh_message_queue(ssh_session session, ssh_message message){ - if(message){ - if(session->ssh_message_list == NULL){ - session->ssh_message_list=ssh_list_new(); + if(message) { + if(session->ssh_message_list == NULL) { + if(session->ssh_message_callback != NULL) { + ssh_execute_message_callback(session, message); + return; + } + session->ssh_message_list = ssh_list_new(); + } + ssh_list_append(session->ssh_message_list, message); } - ssh_list_append(session->ssh_message_list, message); - } } /** -- cgit