diff --git a/include/freerdp/freerdp.h b/include/freerdp/freerdp.h index eb3dd33a3..a3bb73dba 100644 --- a/include/freerdp/freerdp.h +++ b/include/freerdp/freerdp.h @@ -482,6 +482,13 @@ extern "C" FREERDP_API void freerdp_set_last_error(rdpContext* context, UINT32 lastError); +#define freerdp_set_last_error_if_not(context, lastError) \ + do \ + { \ + if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) \ + freerdp_set_last_error_log(context, lastError); \ + } while (0) + #define freerdp_set_last_error_log(context, lastError) \ freerdp_set_last_error_ex((context), (lastError), __FUNCTION__, __FILE__, __LINE__) FREERDP_API void freerdp_set_last_error_ex(rdpContext* context, UINT32 lastError, diff --git a/libfreerdp/core/connection.c b/libfreerdp/core/connection.c index 6f99c6475..ab613b3c7 100644 --- a/libfreerdp/core/connection.c +++ b/libfreerdp/core/connection.c @@ -365,8 +365,7 @@ BOOL rdp_client_connect(rdpRdp* rdp) { if (rdp_check_fds(rdp) < 0) { - if (!freerdp_get_last_error(rdp->context)) - freerdp_set_last_error_log(rdp->context, FREERDP_ERROR_CONNECT_TRANSPORT_FAILED); + freerdp_set_last_error_if_not(rdp->context, FREERDP_ERROR_CONNECT_TRANSPORT_FAILED); return FALSE; } diff --git a/libfreerdp/core/freerdp.c b/libfreerdp/core/freerdp.c index ef30ef20b..61ee63c0a 100644 --- a/libfreerdp/core/freerdp.c +++ b/libfreerdp/core/freerdp.c @@ -188,8 +188,7 @@ BOOL freerdp_connect(freerdp* instance) if (!status || (status2 != CHANNEL_RC_OK)) { - if (!freerdp_get_last_error(rdp->context)) - freerdp_set_last_error_log(instance->context, FREERDP_ERROR_PRE_CONNECT_FAILED); + freerdp_set_last_error_if_not(instance->context, FREERDP_ERROR_PRE_CONNECT_FAILED); WLog_ERR(TAG, "freerdp_pre_connect failed"); goto freerdp_connect_finally; @@ -233,8 +232,7 @@ BOOL freerdp_connect(freerdp* instance) { WLog_ERR(TAG, "freerdp_post_connect failed"); - if (!freerdp_get_last_error(rdp->context)) - freerdp_set_last_error_log(instance->context, FREERDP_ERROR_POST_CONNECT_FAILED); + freerdp_set_last_error_if_not(instance->context, FREERDP_ERROR_POST_CONNECT_FAILED); status = FALSE; goto freerdp_connect_finally; diff --git a/libfreerdp/core/gateway/rdg.c b/libfreerdp/core/gateway/rdg.c index 72a8b2fc3..df6058498 100644 --- a/libfreerdp/core/gateway/rdg.c +++ b/libfreerdp/core/gateway/rdg.c @@ -1033,13 +1033,11 @@ static BOOL rdg_tls_connect(rdpRdg* rdg, rdpTls* tls, const char* peerAddress, i rdpContext* context = rdg->context; if (status < 0) { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_TLS_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_TLS_CONNECT_FAILED); } else { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_CANCELLED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_CANCELLED); } return FALSE; diff --git a/libfreerdp/core/gateway/rpc.c b/libfreerdp/core/gateway/rpc.c index f05f0e0fa..0b47024ca 100644 --- a/libfreerdp/core/gateway/rpc.c +++ b/libfreerdp/core/gateway/rpc.c @@ -706,13 +706,11 @@ static BOOL rpc_channel_tls_connect(RpcChannel* channel, int timeout) { if (tlsStatus < 0) { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_TLS_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_TLS_CONNECT_FAILED); } else { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_CANCELLED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_CANCELLED); } return FALSE; diff --git a/libfreerdp/core/gateway/rpc_client.c b/libfreerdp/core/gateway/rpc_client.c index 1873fa2d1..23518f871 100644 --- a/libfreerdp/core/gateway/rpc_client.c +++ b/libfreerdp/core/gateway/rpc_client.c @@ -549,8 +549,7 @@ static int rpc_client_default_out_channel_recv(rdpRpc* rpc) if (statusCode == HTTP_STATUS_DENIED) { - if (!freerdp_get_last_error(rpc->context)) - freerdp_set_last_error_log(rpc->context, FREERDP_ERROR_AUTHENTICATION_FAILED); + freerdp_set_last_error_if_not(rpc->context, FREERDP_ERROR_AUTHENTICATION_FAILED); } http_response_free(response); diff --git a/libfreerdp/core/mcs.c b/libfreerdp/core/mcs.c index 6c835c70a..975dc9c13 100644 --- a/libfreerdp/core/mcs.c +++ b/libfreerdp/core/mcs.c @@ -1236,8 +1236,7 @@ BOOL mcs_client_begin(rdpMcs* mcs) if (!mcs_send_connect_initial(mcs)) { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_MCS_CONNECT_INITIAL_ERROR); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_MCS_CONNECT_INITIAL_ERROR); WLog_ERR(TAG, "Error: unable to send MCS Connect Initial"); return FALSE; diff --git a/libfreerdp/core/tcp.c b/libfreerdp/core/tcp.c index c31959507..4b72eac87 100644 --- a/libfreerdp/core/tcp.c +++ b/libfreerdp/core/tcp.c @@ -793,8 +793,7 @@ static BOOL freerdp_tcp_is_hostname_resolvable(rdpContext* context, const char* if (!result) { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_DNS_NAME_NOT_FOUND); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_DNS_NAME_NOT_FOUND); return FALSE; } @@ -1074,8 +1073,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* if (!hostname) { - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_FAILED); return -1; } @@ -1092,8 +1090,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* if (sockfd < 0) { - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_FAILED); return -1; } @@ -1128,8 +1125,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* if (!result) { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_DNS_NAME_NOT_FOUND); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_DNS_NAME_NOT_FOUND); return -1; } @@ -1154,8 +1150,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* if (sockfd < 0) { - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_FAILED); freeaddrinfo(result); return -1; @@ -1174,8 +1169,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* freeaddrinfo(result); close(sockfd); - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_FAILED); WLog_ERR(TAG, "failed to connect to %s", hostname); return -1; @@ -1193,8 +1187,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* if (!useExternalDefinedSocket) close(sockfd); - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_FAILED); WLog_ERR(TAG, "Couldn't get socket ip address"); return -1; @@ -1221,8 +1214,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* { close(sockfd); - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_FAILED); WLog_ERR(TAG, "unable to set receive buffer len"); return -1; @@ -1236,8 +1228,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* { close(sockfd); - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_FAILED); WLog_ERR(TAG, "Couldn't set keep alive mode."); return -1; @@ -1248,8 +1239,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char* { close(sockfd); - if (freerdp_get_last_error(context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_CANCELLED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_CANCELLED); return -1; } diff --git a/libfreerdp/core/transport.c b/libfreerdp/core/transport.c index db3a887e8..a24052ffe 100644 --- a/libfreerdp/core/transport.c +++ b/libfreerdp/core/transport.c @@ -190,8 +190,7 @@ static void transport_ssl_cb(SSL* ssl, int where, int ret) #endif /* WITH_GSSAPI */ kret = FREERDP_ERROR_CONNECT_PASSWORD_CERTAINLY_EXPIRED; - if (!freerdp_get_last_error(transport->context)) - freerdp_set_last_error_log(transport->context, kret); + freerdp_set_last_error_if_not(transport->context, kret); } break; @@ -290,13 +289,11 @@ BOOL transport_connect_tls(rdpTransport* transport) { if (tlsStatus < 0) { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_TLS_CONNECT_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_TLS_CONNECT_FAILED); } else { - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_CONNECT_CANCELLED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_CONNECT_CANCELLED); } return FALSE; @@ -346,8 +343,7 @@ BOOL transport_connect_nla(rdpTransport* transport) { WLog_Print(transport->log, WLOG_ERROR, "NLA begin failed"); - if (!freerdp_get_last_error(context)) - freerdp_set_last_error_log(context, FREERDP_ERROR_AUTHENTICATION_FAILED); + freerdp_set_last_error_if_not(context, FREERDP_ERROR_AUTHENTICATION_FAILED); transport_set_nla_mode(transport, FALSE); return FALSE; @@ -1009,8 +1005,7 @@ int transport_check_fds(rdpTransport* transport) if (transport->layer == TRANSPORT_LAYER_CLOSED) { WLog_Print(transport->log, WLOG_DEBUG, "transport_check_fds: transport layer closed"); - if (freerdp_get_last_error(transport->context) == FREERDP_ERROR_SUCCESS) - freerdp_set_last_error_log(transport->context, FREERDP_ERROR_CONNECT_TRANSPORT_FAILED); + freerdp_set_last_error_if_not(transport->context, FREERDP_ERROR_CONNECT_TRANSPORT_FAILED); return -1; }