libfreerdp-core: change ReceiveCallback return values

This commit is contained in:
Marc-André Moreau
2013-01-06 17:24:08 -05:00
parent 218773a04c
commit 811ff44720
7 changed files with 56 additions and 44 deletions

View File

@@ -506,7 +506,7 @@ static BOOL fastpath_recv_input_event(rdpFastPath* fastpath, STREAM* s)
return TRUE;
}
BOOL fastpath_recv_inputs(rdpFastPath* fastpath, STREAM* s)
int fastpath_recv_inputs(rdpFastPath* fastpath, STREAM* s)
{
BYTE i;
@@ -518,7 +518,7 @@ BOOL fastpath_recv_inputs(rdpFastPath* fastpath, STREAM* s)
*/
if (stream_get_left(s) < 1)
return FALSE;
return -1;
stream_read_BYTE(s, fastpath->numberEvents); /* eventHeader (1 byte) */
}
@@ -526,10 +526,10 @@ BOOL fastpath_recv_inputs(rdpFastPath* fastpath, STREAM* s)
for (i = 0; i < fastpath->numberEvents; i++)
{
if (!fastpath_recv_input_event(fastpath, s))
return FALSE;
return -1;
}
return TRUE;
return 0;
}
static UINT32 fastpath_get_sec_bytes(rdpRdp* rdp)

View File

@@ -465,9 +465,9 @@ BOOL nego_recv_response(rdpNego* nego)
STREAM* s = transport_recv_stream_init(nego->transport, 1024);
if (transport_read(nego->transport, s) < 0)
return FALSE;
return -1;
return nego_recv(nego->transport, s, nego);
return ((nego_recv(nego->transport, s, nego) < 0) ? FALSE : TRUE);
}
/**
@@ -478,7 +478,7 @@ BOOL nego_recv_response(rdpNego* nego)
* @param extra nego pointer
*/
BOOL nego_recv(rdpTransport* transport, STREAM* s, void* extra)
int nego_recv(rdpTransport* transport, STREAM* s, void* extra)
{
BYTE li;
BYTE type;
@@ -488,7 +488,7 @@ BOOL nego_recv(rdpTransport* transport, STREAM* s, void* extra)
length = tpkt_read_header(s);
if (length == 0)
return FALSE;
return -1;
li = tpdu_read_connection_confirm(s);
@@ -546,7 +546,7 @@ BOOL nego_recv(rdpTransport* transport, STREAM* s, void* extra)
nego->state = NEGO_STATE_FAIL;
}
return TRUE;
return 0;
}
/**

View File

@@ -117,7 +117,7 @@ void nego_attempt_tls(rdpNego* nego);
void nego_attempt_rdp(rdpNego* nego);
void nego_send(rdpNego* nego);
BOOL nego_recv(rdpTransport* transport, STREAM* s, void* extra);
int nego_recv(rdpTransport* transport, STREAM* s, void* extra);
BOOL nego_recv_response(rdpNego* nego);
BOOL nego_read_request(rdpNego* nego, STREAM* s);

View File

@@ -156,7 +156,7 @@ static BOOL peer_recv_data_pdu(freerdp_peer* client, STREAM* s)
return TRUE;
}
static BOOL peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
static int peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
{
rdpRdp* rdp;
UINT16 length;
@@ -171,7 +171,7 @@ static BOOL peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
if (!rdp_read_header(rdp, s, &length, &channelId))
{
printf("Incorrect RDP header.\n");
return FALSE;
return -1;
}
if (rdp->settings->DisableEncryption)
@@ -183,7 +183,7 @@ static BOOL peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
if (!rdp_decrypt(rdp, s, length - 4, securityFlags))
{
printf("rdp_decrypt failed\n");
return FALSE;
return -1;
}
}
}
@@ -195,7 +195,7 @@ static BOOL peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
else
{
if (!rdp_read_share_control_header(s, &pduLength, &pduType, &pduSource))
return FALSE;
return -1;
client->settings->PduSource = pduSource;
@@ -203,19 +203,19 @@ static BOOL peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
{
case PDU_TYPE_DATA:
if (!peer_recv_data_pdu(client, s))
return FALSE;
return -1;
break;
default:
printf("Client sent pduType %d\n", pduType);
return FALSE;
return -1;
}
}
return TRUE;
return 0;
}
static BOOL peer_recv_fastpath_pdu(freerdp_peer* client, STREAM* s)
static int peer_recv_fastpath_pdu(freerdp_peer* client, STREAM* s)
{
rdpRdp* rdp;
UINT16 length;
@@ -225,10 +225,10 @@ static BOOL peer_recv_fastpath_pdu(freerdp_peer* client, STREAM* s)
fastpath = rdp->fastpath;
length = fastpath_read_header_rdp(fastpath, s);
if (length == 0 || length > stream_get_left(s))
if ((length == 0) || (length > stream_get_left(s)))
{
printf("incorrect FastPath PDU header length %d\n", length);
return FALSE;
return -1;
}
if (fastpath->encryptionFlags & FASTPATH_OUTPUT_ENCRYPTED)
@@ -239,7 +239,7 @@ static BOOL peer_recv_fastpath_pdu(freerdp_peer* client, STREAM* s)
return fastpath_recv_inputs(fastpath, s);
}
static BOOL peer_recv_pdu(freerdp_peer* client, STREAM* s)
static int peer_recv_pdu(freerdp_peer* client, STREAM* s)
{
if (tpkt_verify_header(s))
return peer_recv_tpkt_pdu(client, s);
@@ -256,7 +256,7 @@ static BOOL peer_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
{
case CONNECTION_STATE_INITIAL:
if (!rdp_server_accept_nego(rdp, s))
return FALSE;
return -1;
if (rdp->nego->selected_protocol & PROTOCOL_NLA)
{
@@ -273,29 +273,29 @@ static BOOL peer_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
case CONNECTION_STATE_NEGO:
if (!rdp_server_accept_mcs_connect_initial(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_MCS_CONNECT:
if (!rdp_server_accept_mcs_erect_domain_request(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_MCS_ERECT_DOMAIN:
if (!rdp_server_accept_mcs_attach_user_request(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_MCS_ATTACH_USER:
if (!rdp_server_accept_mcs_channel_join_request(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_MCS_CHANNEL_JOIN:
if (rdp->settings->DisableEncryption)
{
if (!rdp_server_accept_client_keys(rdp, s))
return FALSE;
return -1;
break;
}
rdp->state = CONNECTION_STATE_ESTABLISH_KEYS;
@@ -303,12 +303,12 @@ static BOOL peer_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
case CONNECTION_STATE_ESTABLISH_KEYS:
if (!rdp_server_accept_client_info(rdp, s))
return FALSE;
return -1;
IFCALL(client->Capabilities, client);
if (!rdp_send_demand_active(rdp))
return FALSE;
return -1;
break;
case CONNECTION_STATE_LICENSE:
@@ -325,15 +325,15 @@ static BOOL peer_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
case CONNECTION_STATE_ACTIVE:
if (!peer_recv_pdu(client, s))
return FALSE;
return -1;
break;
default:
printf("Invalid state %d\n", rdp->state);
return FALSE;
return -1;
}
return TRUE;
return 0;
}
static BOOL freerdp_peer_close(freerdp_peer* client)

View File

@@ -850,50 +850,50 @@ static BOOL rdp_recv_callback(rdpTransport* transport, STREAM* s, void* extra)
{
case CONNECTION_STATE_NEGO:
if (!rdp_client_connect_mcs_connect_response(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_MCS_ATTACH_USER:
if (!rdp_client_connect_mcs_attach_user_confirm(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_MCS_CHANNEL_JOIN:
if (!rdp_client_connect_mcs_channel_join_confirm(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_LICENSE:
if (!rdp_client_connect_license(rdp, s))
return FALSE;
return -1;
break;
case CONNECTION_STATE_CAPABILITY:
if (!rdp_client_connect_demand_active(rdp, s))
{
printf("rdp_client_connect_demand_active failed\n");
return FALSE;
return -1;
}
break;
case CONNECTION_STATE_FINALIZATION:
if (!rdp_recv_pdu(rdp, s))
return FALSE;
return -1;
if (rdp->finalize_sc_pdus == FINALIZE_SC_COMPLETE)
rdp->state = CONNECTION_STATE_ACTIVE;
break;
case CONNECTION_STATE_ACTIVE:
if (!rdp_recv_pdu(rdp, s))
return FALSE;
return -1;
break;
default:
printf("Invalid state %d\n", rdp->state);
return FALSE;
return -1;
}
return TRUE;
return 0;
}
int rdp_send_channel_data(rdpRdp* rdp, int channel_id, BYTE* data, int size)

View File

@@ -589,6 +589,7 @@ int transport_check_fds(rdpTransport** ptransport)
int pos;
int status;
UINT16 length;
int recv_status;
STREAM* received;
rdpTransport* transport = *ptransport;
@@ -684,10 +685,21 @@ int transport_check_fds(rdpTransport** ptransport)
stream_seal(received);
stream_set_pos(received, 0);
if (transport->ReceiveCallback(transport, received, transport->ReceiveExtra) == FALSE)
/**
* ReceiveCallback return values:
*
* -1: synchronous failure
* 0: synchronous success
* 1: asynchronous return
*/
recv_status = transport->ReceiveCallback(transport, received, transport->ReceiveExtra);
if (recv_status < 0)
status = -1;
transport_receive_pool_return(transport, received);
if (recv_status == 0)
transport_receive_pool_return(transport, received);
if (status < 0)
return status;

View File

@@ -41,7 +41,7 @@ int TestCertEnumCertificatesInStore(int argc, char* argv[])
index = 0;
while (pCertContext = CertEnumCertificatesInStore(hCertStore, pCertContext))
while ((pCertContext = CertEnumCertificatesInStore(hCertStore, pCertContext)))
{
status = CertGetNameString(pCertContext, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0, NULL, NULL, 0);