aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormilo <milo@r0ot.me>2011-04-18 14:39:12 +0200
committermilo <milo@r0ot.me>2011-04-20 05:05:07 +0200
commit99d0f6d7c77e064b7fd0f0f46c40988de1996f3b (patch)
treeee1a263eaac6f3f6148d3b5ae0569139b3497cec
parenteace59d3eaad413fd846d1c8b4c926285f6cd5ab (diff)
downloadlibssh-99d0f6d7c77e064b7fd0f0f46c40988de1996f3b.tar.gz
libssh-99d0f6d7c77e064b7fd0f0f46c40988de1996f3b.tar.xz
libssh-99d0f6d7c77e064b7fd0f0f46c40988de1996f3b.zip
[messages] don't queue messages if callback present
-rw-r--r--src/messages.c39
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);
- }
}
/**