mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-09 09:54:25 +09:00
Dequeue the processed messages
This commit is contained in:
@@ -85,5 +85,6 @@ int message_handle_channel_request(ssh_session session, ssh_channel channel, ssh
|
|||||||
const char *request, uint8_t want_reply);
|
const char *request, uint8_t want_reply);
|
||||||
int ssh_execute_message_callbacks(ssh_session session);
|
int ssh_execute_message_callbacks(ssh_session session);
|
||||||
void ssh_message_queue(ssh_session session, ssh_message message);
|
void ssh_message_queue(ssh_session session, ssh_message message);
|
||||||
|
ssh_message ssh_message_pop_head(ssh_session session);
|
||||||
|
|
||||||
#endif /* MESSAGES_H_ */
|
#endif /* MESSAGES_H_ */
|
||||||
|
|||||||
@@ -711,7 +711,7 @@ ssh_message ssh_message_get(ssh_session session) {
|
|||||||
}
|
}
|
||||||
msg=ssh_list_get_head(ssh_message, session->ssh_message_list);
|
msg=ssh_list_get_head(ssh_message, session->ssh_message_list);
|
||||||
} while(msg==NULL);
|
} while(msg==NULL);
|
||||||
|
msg=ssh_message_pop_head(session);
|
||||||
leave_function();
|
leave_function();
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
@@ -790,6 +790,24 @@ void ssh_message_queue(ssh_session session, ssh_message message){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @internal
|
||||||
|
* @brief Pops one message from the message list and dequeue it.
|
||||||
|
* @param session SSH session.
|
||||||
|
* @returns The head message, or NULL if it doesn't exist
|
||||||
|
*/
|
||||||
|
ssh_message ssh_message_pop_head(ssh_session session){
|
||||||
|
ssh_message msg=NULL;
|
||||||
|
struct ssh_iterator *i;
|
||||||
|
if(session->ssh_message_list == NULL)
|
||||||
|
return NULL;
|
||||||
|
i=ssh_list_get_iterator(session->ssh_message_list);
|
||||||
|
if(i != NULL){
|
||||||
|
msg=ssh_iterator_value(ssh_message,i);
|
||||||
|
ssh_list_remove(session->ssh_message_list,i);
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -908,17 +908,23 @@ int ssh_execute_message_callbacks(ssh_session session){
|
|||||||
if(!session->ssh_message_list)
|
if(!session->ssh_message_list)
|
||||||
return SSH_OK;
|
return SSH_OK;
|
||||||
if(session->ssh_message_callback){
|
if(session->ssh_message_callback){
|
||||||
while((msg=ssh_list_get_head(ssh_message , session->ssh_message_list)) != NULL){
|
while(ssh_list_get_head(ssh_message , session->ssh_message_list) != NULL){
|
||||||
|
msg=ssh_message_pop_head(session);
|
||||||
ret=session->ssh_message_callback(session,msg);
|
ret=session->ssh_message_callback(session,msg);
|
||||||
if(ret==1){
|
if(ret==1){
|
||||||
ret = ssh_message_reply_default(msg);
|
ret = ssh_message_reply_default(msg);
|
||||||
|
ssh_message_free(msg);
|
||||||
if(ret != SSH_OK)
|
if(ret != SSH_OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
} else {
|
||||||
|
ssh_message_free(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while((msg=ssh_list_get_head(ssh_message , session->ssh_message_list)) != NULL){
|
while(ssh_list_get_head(ssh_message , session->ssh_message_list) != NULL){
|
||||||
|
msg=ssh_message_pop_head(session);
|
||||||
ret = ssh_message_reply_default(msg);
|
ret = ssh_message_reply_default(msg);
|
||||||
|
ssh_message_free(msg);
|
||||||
if(ret != SSH_OK)
|
if(ret != SSH_OK)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user