messages: Rework ssh_message_queue()

Return early and make it easier to understand.

Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
Andreas Schneider
2018-09-28 15:53:41 +02:00
parent b9ac61d5a3
commit 9fbbdcc154

View File

@@ -411,45 +411,58 @@ static int ssh_execute_message_callback(ssh_session session, ssh_message msg) {
*/ */
static void ssh_message_queue(ssh_session session, ssh_message message) static void ssh_message_queue(ssh_session session, ssh_message message)
{ {
if (message != NULL) {
#ifdef WITH_SERVER #ifdef WITH_SERVER
int ret; int ret;
/* probably not the best place to execute server callbacks, but still better #endif
* than nothing.
*/ if (message == NULL) {
ret = ssh_execute_server_callbacks(session, message); return;
if (ret == SSH_OK){ }
ssh_message_free(message);
return; #ifdef WITH_SERVER
} /* probably not the best place to execute server callbacks, but still better
* than nothing.
*/
ret = ssh_execute_server_callbacks(session, message);
if (ret == SSH_OK) {
ssh_message_free(message);
return;
}
#endif /* WITH_SERVER */ #endif /* WITH_SERVER */
if(session->ssh_message_callback != NULL) {
ssh_execute_message_callback(session, message); if (session->ssh_message_callback != NULL) {
return; /* This will transfer the message, do not free. */
} ssh_execute_message_callback(session, message);
if (session->server_callbacks != NULL){ return;
/* if we have server callbacks, but nothing was executed, it means we are }
* in non-synchronous mode, and we just don't care about the message we
* received. Just send a default response. Do not queue it. if (session->server_callbacks != NULL) {
*/ /* if we have server callbacks, but nothing was executed, it means we are
ssh_message_reply_default(message); * in non-synchronous mode, and we just don't care about the message we
ssh_message_free(message); * received. Just send a default response. Do not queue it.
return; */
} ssh_message_reply_default(message);
if(session->ssh_message_list == NULL) { ssh_message_free(message);
session->ssh_message_list = ssh_list_new(); return;
} }
if (session->ssh_message_list == NULL) {
session->ssh_message_list = ssh_list_new();
if (session->ssh_message_list != NULL) { if (session->ssh_message_list != NULL) {
ssh_list_append(session->ssh_message_list, message); /*
} else { * If the message list couldn't be allocated, the message can't be
/* If the message list couldn't be allocated, the message can't be * enqueued
* enqueued */ */
ssh_message_reply_default(message); ssh_message_reply_default(message);
ssh_set_error_oom(session); ssh_set_error_oom(session);
ssh_message_free(message); ssh_message_free(message);
return; return;
} }
} }
/* This will transfer the message, do not free. */
ssh_list_append(session->ssh_message_list, message);
return;
} }
/** /**