Dequeue the processed messages
Этот коммит содержится в:
родитель
da8263b3f6
Коммит
2fc4c7e335
@ -85,5 +85,6 @@ int message_handle_channel_request(ssh_session session, ssh_channel channel, ssh
|
||||
const char *request, uint8_t want_reply);
|
||||
int ssh_execute_message_callbacks(ssh_session session);
|
||||
void ssh_message_queue(ssh_session session, ssh_message message);
|
||||
ssh_message ssh_message_pop_head(ssh_session session);
|
||||
|
||||
#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);
|
||||
} while(msg==NULL);
|
||||
|
||||
msg=ssh_message_pop_head(session);
|
||||
leave_function();
|
||||
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)
|
||||
return SSH_OK;
|
||||
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);
|
||||
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 {
|
||||
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);
|
||||
ssh_message_free(msg);
|
||||
if(ret != SSH_OK)
|
||||
return ret;
|
||||
}
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user