mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-12-02 01:17:52 +03:00
Changes to messages for async message handling
This commit is contained in:
@@ -80,5 +80,6 @@ struct ssh_message_struct {
|
|||||||
|
|
||||||
//void message_handle(ssh_session session, uint32_t type);
|
//void message_handle(ssh_session session, uint32_t type);
|
||||||
int ssh_execute_message_callbacks(ssh_session session);
|
int ssh_execute_message_callbacks(ssh_session session);
|
||||||
|
void message_queue(ssh_session session, ssh_message message);
|
||||||
|
|
||||||
#endif /* MESSAGES_H_ */
|
#endif /* MESSAGES_H_ */
|
||||||
|
|||||||
@@ -772,20 +772,22 @@ ssh_message ssh_message_retrieve(ssh_session session, uint32_t packettype){
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* \brief blocking message retrieval
|
/** @brief Retrieves a SSH message from SSH session
|
||||||
* \bug does anything that is not a message, like a channel read/write
|
* @param session SSH session
|
||||||
|
* @return The SSH message received, NULL in case of error.
|
||||||
|
* @warning This function blocks until a message has been received. Better
|
||||||
|
* set up a callback if this behavior is unwanted.
|
||||||
*/
|
*/
|
||||||
ssh_message ssh_message_get(ssh_session session) {
|
ssh_message ssh_message_get(ssh_session session) {
|
||||||
ssh_message msg = NULL;
|
ssh_message msg = NULL;
|
||||||
enter_function();
|
enter_function();
|
||||||
do {
|
do {
|
||||||
if ((packet_read(session) != SSH_OK) ||
|
if (ssh_handle_packets(session) == SSH_ERROR) {
|
||||||
(packet_translate(session) != SSH_OK)) {
|
|
||||||
leave_function();
|
leave_function();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} while(session->in_packet.type==SSH2_MSG_IGNORE || session->in_packet.type==SSH2_MSG_DEBUG);
|
msg=ssh_list_get_head(ssh_message, session->ssh_message_list);
|
||||||
msg=ssh_message_retrieve(session,session->in_packet.type);
|
} while(msg==NULL);
|
||||||
leave_function();
|
leave_function();
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
@@ -866,16 +868,27 @@ int message_handle(ssh_session session, void *user, uint8_t type, ssh_buffer pac
|
|||||||
(void)user;
|
(void)user;
|
||||||
(void)packet;
|
(void)packet;
|
||||||
if(msg){
|
if(msg){
|
||||||
if(!session->ssh_message_list){
|
message_queue(session,msg);
|
||||||
session->ssh_message_list=ssh_list_new();
|
|
||||||
}
|
|
||||||
ssh_list_add(session->ssh_message_list,msg);
|
|
||||||
return SSH_PACKET_USED;
|
return SSH_PACKET_USED;
|
||||||
} else {
|
} else {
|
||||||
return SSH_PACKET_NOT_USED;
|
return SSH_PACKET_NOT_USED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @internal
|
||||||
|
* @brief adds the message to the current queue of messages to be parsed
|
||||||
|
* @param session SSH session
|
||||||
|
* @param message message to add to the queue
|
||||||
|
*/
|
||||||
|
void message_queue(ssh_session session, ssh_message message){
|
||||||
|
if(message){
|
||||||
|
if(session->ssh_message_list == NULL){
|
||||||
|
session->ssh_message_list=ssh_list_new();
|
||||||
|
}
|
||||||
|
ssh_list_add(session->ssh_message_list,message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user