1
1

Dequeue the processed messages

Этот коммит содержится в:
Aris Adamantiadis 2010-01-08 22:25:26 +01:00
родитель da8263b3f6
Коммит 2fc4c7e335
3 изменённых файлов: 28 добавлений и 3 удалений

Просмотреть файл

@ -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;
}