diff options
author | milo <milo@r0ot.me> | 2011-04-18 14:39:12 +0200 |
---|---|---|
committer | milo <milo@r0ot.me> | 2011-05-02 16:59:52 +0200 |
commit | 1979c14aac47137e7af782e7e49ec43f910b2b00 (patch) | |
tree | bd6497303b6e5d08346cd99d67c33488419fbb5f | |
parent | 809254160308289fdcddf8a5eabad0c85a35bce7 (diff) | |
download | libssh-1979c14aac47137e7af782e7e49ec43f910b2b00.tar.gz libssh-1979c14aac47137e7af782e7e49ec43f910b2b00.tar.xz libssh-1979c14aac47137e7af782e7e49ec43f910b2b00.zip |
[messages] don't queue messages if callback present
(cherry picked from commit 99d0f6d7c77e064b7fd0f0f46c40988de1996f3b)
-rw-r--r-- | src/messages.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/messages.c b/src/messages.c index dc4aabff..9c4672cd 100644 --- a/src/messages.c +++ b/src/messages.c @@ -71,6 +71,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 * @@ -81,12 +106,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); - } } /** |