static BOOL rdg_tunnel_connect(rdpRdg* rdg) { BOOL status; wStream* s; rdg_send_handshake(rdg); while (rdg->state < RDG_CLIENT_STATE_OPENED) { status = FALSE; s = rdg_receive_packet(rdg); if (s) { status = rdg_process_packet(rdg, s); Stream_Free(s, TRUE); } if (!status) { rdg->context->rdp->transport->layer = TRANSPORT_LAYER_CLOSED; return FALSE; } } return TRUE; }
BOOL rdg_out_channel_recv(rdpRdg* rdg) { wStream* s; BOOL status = TRUE; HttpResponse* response = NULL; switch (rdg->state) { case RDG_CLIENT_STATE_OUT_CHANNEL_REQUEST: response = http_response_recv(rdg->tlsOut); if (!response) { return FALSE; } status = rdg_process_out_channel_response(rdg, response); http_response_free(response); break; case RDG_CLIENT_STATE_OUT_CHANNEL_AUTHORIZE: response = http_response_recv(rdg->tlsOut); if (!response) { return FALSE; } status = rdg_process_out_channel_authorization(rdg, response); http_response_free(response); break; default: s = rdg_receive_packet(rdg); if (s) { status = rdg_process_packet(rdg, s); Stream_Free(s, TRUE); } } return status; }