diff options
author | milo <milo@r0ot.me> | 2011-04-18 14:39:12 +0200 |
---|---|---|
committer | milo <milo@r0ot.me> | 2011-04-20 05:05:07 +0200 |
commit | 99d0f6d7c77e064b7fd0f0f46c40988de1996f3b (patch) | |
tree | ee1a263eaac6f3f6148d3b5ae0569139b3497cec | |
parent | eace59d3eaad413fd846d1c8b4c926285f6cd5ab (diff) | |
download | libssh-99d0f6d7c77e064b7fd0f0f46c40988de1996f3b.tar.gz libssh-99d0f6d7c77e064b7fd0f0f46c40988de1996f3b.tar.xz libssh-99d0f6d7c77e064b7fd0f0f46c40988de1996f3b.zip |
[messages] don't queue messages if callback present
-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 dc4aabf..9c4672c 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); - } } /** |