aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormilo <milo@r0ot.me>2011-04-18 14:39:12 +0200
committermilo <milo@r0ot.me>2011-05-02 17:40:05 +0200
commit09e8cf33d7d12db2b2e7f23be7638999bb557c0d (patch)
tree0b39ffdbe600d25960ed581b3c0c5e9ff678bbdf
parenta03bb2fbf78c0c54325fb4591b098ef09abaa38a (diff)
downloadlibssh-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.c39
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);
- }
}
/**