diff options
author | milo <milo@r0ot.me> | 2011-04-18 14:39:12 +0200 |
---|---|---|
committer | milo <milo@r0ot.me> | 2011-05-02 17:40:05 +0200 |
commit | 09e8cf33d7d12db2b2e7f23be7638999bb557c0d (patch) | |
tree | 0b39ffdbe600d25960ed581b3c0c5e9ff678bbdf | |
parent | a03bb2fbf78c0c54325fb4591b098ef09abaa38a (diff) | |
download | libssh-09e8cf33d7d12db2b2e7f23be7638999bb557c0d.tar.gz libssh-09e8cf33d7d12db2b2e7f23be7638999bb557c0d.tar.xz libssh-09e8cf33d7d12db2b2e7f23be7638999bb557c0d.zip |
[messages] don't queue messages if callback present
(cherry picked from commit 1979c14aac47137e7af782e7e49ec43f910b2b00)
-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 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); - } } /** |