aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormilo <milo@r0ot.me>2011-04-18 14:39:12 +0200
committermilo <milo@r0ot.me>2011-05-02 16:59:52 +0200
commit1979c14aac47137e7af782e7e49ec43f910b2b00 (patch)
treebd6497303b6e5d08346cd99d67c33488419fbb5f
parent809254160308289fdcddf8a5eabad0c85a35bce7 (diff)
downloadlibssh-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.c39
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);
- }
}
/**