int rts_recv_OUT_R2_A6_pdu(rdpRpc* rpc, BYTE* buffer, UINT32 length) { int status; RpcVirtualConnection* connection = rpc->VirtualConnection; WLog_DBG(TAG, "Receiving OUT R2/A6 RTS PDU"); status = rts_send_OUT_R2_C1_pdu(rpc); if (status < 0) { WLog_ERR(TAG, "rts_send_OUT_R2_C1_pdu failure"); return -1; } status = rts_send_OUT_R2_A7_pdu(rpc); if (status < 0) { WLog_ERR(TAG, "rts_send_OUT_R2_A7_pdu failure"); return -1; } rpc_out_channel_transition_to_state(connection->NonDefaultOutChannel, CLIENT_OUT_CHANNEL_STATE_OPENED_B3W); rpc_out_channel_transition_to_state(connection->DefaultOutChannel, CLIENT_OUT_CHANNEL_STATE_OPENED_B3W); return 1; }
int rpc_out_channel_replacement_connect(RpcOutChannel* outChannel, int timeout) { rdpRpc* rpc = outChannel->rpc; /* Connect OUT Channel */ if (rpc_channel_tls_connect((RpcChannel*) outChannel, timeout) < 0) return -1; rpc_out_channel_transition_to_state(outChannel, CLIENT_OUT_CHANNEL_STATE_CONNECTED); if (rpc_ncacn_http_ntlm_init(rpc, (RpcChannel*) outChannel) < 0) return FALSE; /* Send OUT Channel Request */ if (rpc_ncacn_http_send_out_channel_request(rpc, outChannel, TRUE) < 0) { WLog_ERR(TAG, "rpc_ncacn_http_send_out_channel_request failure"); return FALSE; } rpc_out_channel_transition_to_state(outChannel, CLIENT_OUT_CHANNEL_STATE_SECURITY); return 1; }
int rts_recv_OUT_R1_A2_pdu(rdpRpc* rpc, BYTE* buffer, UINT32 length) { int status; UINT32 offset; UINT32 Destination = 0; RpcVirtualConnection* connection = rpc->VirtualConnection; WLog_DBG(TAG, "Receiving OUT R1/A2 RTS PDU"); offset = 24; offset += rts_destination_command_read(rpc, &buffer[offset], length - offset, &Destination) + 4; connection->NonDefaultOutChannel = rpc_out_channel_new(rpc); if (!connection->NonDefaultOutChannel) return -1; status = rpc_out_channel_replacement_connect(connection->NonDefaultOutChannel, 5000); if (status < 0) { WLog_ERR(TAG, "rpc_out_channel_replacement_connect failure"); return -1; } rpc_out_channel_transition_to_state(connection->DefaultOutChannel, CLIENT_OUT_CHANNEL_STATE_OPENED_A6W); return 1; }
static int rts_recv_OUT_R2_B3_pdu(rdpRpc* rpc, BYTE* buffer, UINT32 length) { RpcVirtualConnection* connection = rpc->VirtualConnection; WLog_DBG(TAG, "Receiving OUT R2/B3 RTS PDU"); rpc_out_channel_transition_to_state(connection->DefaultOutChannel, CLIENT_OUT_CHANNEL_STATE_RECYCLED); return 1; }