libfreerdp-core: improve RPC debug output

This commit is contained in:
Marc-André Moreau 2012-10-30 16:40:47 -04:00
parent 363460c8d1
commit 63aa45731b
3 changed files with 52 additions and 9 deletions

View File

@ -800,6 +800,18 @@ int rpc_out_read(rdpRpc* rpc, BYTE* data, int length)
return header->frag_length;
}
int rpc_recv_fault_pdu(RPC_PDU_HEADER* header)
{
rpcconn_fault_hdr_t* fault_pdu;
fault_pdu = (rpcconn_fault_hdr_t*) header;
printf("RPC Fault PDU:\n");
printf("status: 0x%08X\n", fault_pdu->status);
return 0;
}
int rpc_recv_pdu(rdpRpc* rpc)
{
int status;
@ -851,6 +863,11 @@ int rpc_recv_pdu(rdpRpc* rpc)
printf("rpc_recv_pdu error: Unexpected RTS PDU\n");
return -1;
}
else if (header->ptype == PTYPE_FAULT)
{
rpc_recv_fault_pdu(header);
return -1;
}
else
{
/* RTS PDUs are not subject to flow control */

View File

@ -312,6 +312,33 @@ typedef struct
} rpcconn_cancel_hdr_t;
/* fault codes */
#define nca_s_fault_object_not_found 0x1C000024
#define nca_s_fault_cancel 0x1C00000D
#define nca_s_fault_addr_error 0x1C000002
#define nca_s_fault_context_mismatch 0x1C00001A
#define nca_s_fault_fp_div_zero 0x1C000003
#define nca_s_fault_fp_error 0x1C00000F
#define nca_s_fault_fp_overflow 0x1C000005
#define nca_s_fault_fp_underflow 0x1C000004
#define nca_s_fault_ill_inst 0x1C00000E
#define nca_s_fault_int_div_by_zero 0x1C000001
#define nca_s_fault_int_overflow 0x1C000010
#define nca_s_fault_invalid_bound 0x1C000007
#define nca_s_fault_invalid_tag 0x1C000006
#define nca_s_fault_pipe_closed 0x1C000015
#define nca_s_fault_pipe_comm_error 0x1C000018
#define nca_s_fault_pipe_discipline 0x1C000017
#define nca_s_fault_pipe_empty 0x1C000014
#define nca_s_fault_pipe_memory 0x1C000019
#define nca_s_fault_pipe_order 0x1C000016
#define nca_s_fault_remote_no_memory 0x1C00001B
#define ncs_s_fault_user_defined 0x1C000021
#define nca_s_fault_tx_open_failed 0x1C000022
#define nca_s_fault_codeset_conv_error 0x1C000023
#define nca_s_fault_no_client_stub 0x1C000025
typedef struct
{
DEFINE_RPC_COMMON_FIELDS();

View File

@ -420,7 +420,7 @@ DWORD TsProxySendToServer(handle_t IDL_handle, byte pRpcMessage[], UINT32 count,
/* PCHANNEL_CONTEXT_HANDLE_NOSERIALIZE_NR (20 bytes) */
stream_write_UINT32(s, 0); /* ContextType (4 bytes) */
stream_write(s, tsg->ChannelContext, 16); /* ContextUuid (4 bytes) */
stream_write(s, tsg->ChannelContext, 16); /* ContextUuid (16 bytes) */
stream_write_UINT32_be(s, totalDataBytes); /* totalDataBytes (4 bytes) */
stream_write_UINT32_be(s, numBuffers); /* numBuffers (4 bytes) */
@ -497,7 +497,7 @@ BOOL tsg_proxy_create_tunnel(rdpTsg* tsg)
return FALSE;
}
CopyMemory(tsg->TunnelContext, rpc->buffer + (status - 24), 16);
CopyMemory(tsg->TunnelContext, rpc->buffer + (status - 48), 16);
#ifdef WITH_DEBUG_TSG
printf("TSG TunnelContext:\n");
@ -531,7 +531,7 @@ BOOL tsg_proxy_authorize_tunnel(rdpTsg* tsg)
length = sizeof(tsg_packet2);
buffer = (BYTE*) malloc(length);
CopyMemory(buffer, tsg_packet2, length);
CopyMemory(buffer + 4, tsg->TunnelContext, 16);
CopyMemory(&buffer[4], tsg->TunnelContext, 16);
status = rpc_tsg_write(rpc, buffer, length, TsProxyAuthorizeTunnelOpnum);
@ -577,7 +577,7 @@ BOOL tsg_proxy_make_tunnel_call(rdpTsg* tsg)
length = sizeof(tsg_packet3);
buffer = (BYTE*) malloc(length);
CopyMemory(buffer, tsg_packet3, length);
CopyMemory(buffer + 4, tsg->TunnelContext, 16);
CopyMemory(&buffer[4], tsg->TunnelContext, 16);
status = rpc_tsg_write(rpc, buffer, length, TsProxyMakeTunnelCallOpnum);
@ -622,8 +622,8 @@ BOOL tsg_proxy_create_channel(rdpTsg* tsg)
length = 48 + 12 + (count * 2);
buffer = (BYTE*) malloc(length);
CopyMemory(buffer, tsg_packet4, 48);
CopyMemory(buffer + 4, tsg->TunnelContext, 16);
CopyMemory(buffer + 38, &tsg->port, 2);
CopyMemory(&buffer[4], tsg->TunnelContext, 16);
CopyMemory(&buffer[38], &tsg->port, 2);
CopyMemory(&buffer[48], &count, 4); /* MaximumCount */
CopyMemory(&buffer[52], &offset, 4); /* Offset */
@ -648,7 +648,7 @@ BOOL tsg_proxy_create_channel(rdpTsg* tsg)
return FALSE;
}
CopyMemory(tsg->ChannelContext, rpc->buffer + 4, 16);
CopyMemory(tsg->ChannelContext, &rpc->buffer[4], 16);
#ifdef WITH_DEBUG_TSG
printf("TSG ChannelContext:\n");
@ -676,11 +676,10 @@ BOOL tsg_proxy_setup_receive_pipe(rdpTsg* tsg)
DEBUG_TSG("TsProxySetupReceivePipe");
memcpy(tsg_packet5 + 4, tsg->ChannelContext, 16);
length = sizeof(tsg_packet5);
buffer = (BYTE*) malloc(length);
CopyMemory(buffer, tsg_packet5, length);
CopyMemory(&buffer[4], tsg->ChannelContext, 16);
status = rpc_tsg_write(rpc, buffer, length, TsProxySetupReceivePipeOpnum);