FreeRDP
libfreerdp/core/gateway/rpc.h File Reference
#include <winpr/wtypes.h>
#include <winpr/stream.h>
#include <winpr/collections.h>
#include <winpr/interlocked.h>
#include <freerdp/log.h>
#include <freerdp/utils/ringbuffer.h>
#include "../tcp.h"
#include "../transport.h"
#include "rts.h"
#include "http.h"
#include "ntlm.h"
#include <time.h>
#include <winpr/sspi.h>
#include <freerdp/types.h>
#include <freerdp/settings.h>
#include <freerdp/crypto/tls.h>
#include <freerdp/crypto/crypto.h>
#include <freerdp/api.h>
#include <winpr/print.h>
This graph shows which files directly or indirectly include this file:

Data Structures

struct  rpcconn_rts_hdr_t
 
struct  PRPC_PDU
 
struct  rpcconn_common_hdr_t
 
struct  p_uuid_t
 
struct  ndr_format_t
 
struct  ndr_context_handle
 
struct  p_syntax_id_t
 
struct  p_cont_elem_t
 
struct  p_cont_list_t
 
struct  p_result_t
 
struct  p_result_list_t
 
struct  version_t
 
struct  p_rt_versions_supported_t
 
struct  port_any_t
 
struct  rpcrt_optional_data_t
 
struct  rpcconn_reject_optional_data_t
 
struct  rpcconn_disc_optional_data_t
 
struct  rpc_sec_verification_trailer
 
struct  auth_verifier_co_t
 
struct  rpcconn_alter_context_hdr_t
 
struct  rpcconn_alter_context_response_hdr_t
 
struct  rpcconn_bind_hdr_t
 
struct  rpcconn_bind_ack_hdr_t
 
struct  rpcconn_rpc_auth_3_hdr_t
 
struct  rpcconn_bind_nak_hdr_t
 
struct  rpcconn_cancel_hdr_t
 
struct  RPC_FAULT_CODE
 
struct  rpcconn_fault_hdr_t
 
struct  rpcconn_orphaned_hdr_t
 
struct  rpcconn_request_hdr_t
 
struct  rpcconn_response_hdr_t
 
struct  rpcconn_shutdown_hdr_t
 
union  rpcconn_hdr_t
 
struct  RPC_SECURITY_PROVIDER_INFO
 
struct  RpcClientCall
 
struct  RpcClient
 
struct  RpcChannel
 
struct  RpcPingOriginator
 
struct  RpcInChannel
 
struct  RpcOutChannel
 
struct  RpcVirtualConnection
 
struct  RpcVirtualConnectionCookieEntry
 
struct  rdpRpc
 

Macros

#define DEFINE_RPC_COMMON_FIELDS()
 
#define RPC_COMMON_FIELDS_LENGTH   16
 
#define RTS_PDU_HEADER_LENGTH   20
 
#define RPC_PDU_FLAG_STUB   0x00000001
 
#define PTYPE_REQUEST   0x00
 
#define PTYPE_PING   0x01
 
#define PTYPE_RESPONSE   0x02
 
#define PTYPE_FAULT   0x03
 
#define PTYPE_WORKING   0x04
 
#define PTYPE_NOCALL   0x05
 
#define PTYPE_REJECT   0x06
 
#define PTYPE_ACK   0x07
 
#define PTYPE_CL_CANCEL   0x08
 
#define PTYPE_FACK   0x09
 
#define PTYPE_CANCEL_ACK   0x0A
 
#define PTYPE_BIND   0x0B
 
#define PTYPE_BIND_ACK   0x0C
 
#define PTYPE_BIND_NAK   0x0D
 
#define PTYPE_ALTER_CONTEXT   0x0E
 
#define PTYPE_ALTER_CONTEXT_RESP   0x0F
 
#define PTYPE_RPC_AUTH_3   0x10
 
#define PTYPE_SHUTDOWN   0x11
 
#define PTYPE_CO_CANCEL   0x12
 
#define PTYPE_ORPHANED   0x13
 
#define PTYPE_RTS   0x14
 
#define PFC_FIRST_FRAG   0x01
 
#define PFC_LAST_FRAG   0x02
 
#define PFC_PENDING_CANCEL   0x04
 
#define PFC_SUPPORT_HEADER_SIGN   0x04
 
#define PFC_RESERVED_1   0x08
 
#define PFC_CONC_MPX   0x10
 
#define PFC_DID_NOT_EXECUTE   0x20
 
#define PFC_MAYBE   0x40
 
#define PFC_OBJECT_UUID   0x80
 
#define RPC_CO_MUST_RECV_FRAG_SIZE   1432
 
#define RPC_CL_MUST_RECV_FRAG_SIZE   1464
 
#define RPC_PDU_HEADER_MAX_LENGTH   32
 
#define ndr_c_int_big_endian   0
 
#define ndr_c_int_little_endian   1
 
#define ndr_c_float_ieee   0
 
#define ndr_c_float_vax   1
 
#define ndr_c_float_cray   2
 
#define ndr_c_float_ibm   3
 
#define ndr_c_char_ascii   0
 
#define ndr_c_char_ebcdic   1
 
#define REASON_NOT_SPECIFIED   0
 
#define TEMPORARY_CONGESTION   1
 
#define LOCAL_LIMIT_EXCEEDED   2
 
#define CALLED_PADDR_UNKNOWN   3
 
#define PROTOCOL_VERSION_NOT_SUPPORTED   4
 
#define DEFAULT_CONTEXT_NOT_SUPPORTED   5
 
#define USER_DATA_NOT_READABLE   6
 
#define NO_PSAP_AVAILABLE   7
 
#define DEFINE_RPC_FAULT_CODE(_code)   { _code , #_code },
 
#define nca_s_comm_failure   0x1C010001
 
#define nca_s_op_rng_error   0x1C010002
 
#define nca_s_unk_if   0x1C010003
 
#define nca_s_wrong_boot_time   0x1C010006
 
#define nca_s_you_crashed   0x1C010009
 
#define nca_s_proto_error   0x1C01000B
 
#define nca_s_out_args_too_big   0x1C010013
 
#define nca_s_server_too_busy   0x1C010014
 
#define nca_s_fault_string_too_long   0x1C010015
 
#define nca_s_unsupported_type   0x1C010017
 
#define nca_s_fault_int_div_by_zero   0x1C000001
 
#define nca_s_fault_addr_error   0x1C000002
 
#define nca_s_fault_fp_div_zero   0x1C000003
 
#define nca_s_fault_fp_underflow   0x1C000004
 
#define nca_s_fault_fp_overflow   0x1C000005
 
#define nca_s_fault_invalid_tag   0x1C000006
 
#define nca_s_fault_invalid_bound   0x1C000007
 
#define nca_s_rpc_version_mismatch   0x1C000008
 
#define nca_s_unspec_reject   0x1C000009
 
#define nca_s_bad_actid   0x1C00000A
 
#define nca_s_who_are_you_failed   0x1C00000B
 
#define nca_s_manager_not_entered   0x1C00000C
 
#define nca_s_fault_cancel   0x1C00000D
 
#define nca_s_fault_ill_inst   0x1C00000E
 
#define nca_s_fault_fp_error   0x1C00000F
 
#define nca_s_fault_int_overflow   0x1C000010
 
#define nca_s_fault_unspec   0x1C000012
 
#define nca_s_fault_remote_comm_failure   0x1C000013
 
#define nca_s_fault_pipe_empty   0x1C000014
 
#define nca_s_fault_pipe_closed   0x1C000015
 
#define nca_s_fault_pipe_order   0x1C000016
 
#define nca_s_fault_pipe_discipline   0x1C000017
 
#define nca_s_fault_pipe_comm_error   0x1C000018
 
#define nca_s_fault_pipe_memory   0x1C000019
 
#define nca_s_fault_context_mismatch   0x1C00001A
 
#define nca_s_fault_remote_no_memory   0x1C00001B
 
#define nca_s_invalid_pres_context_id   0x1C00001C
 
#define nca_s_unsupported_authn_level   0x1C00001D
 
#define nca_s_invalid_checksum   0x1C00001F
 
#define nca_s_invalid_crc   0x1C000020
 
#define nca_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_object_not_found   0x1C000024
 
#define nca_s_fault_no_client_stub   0x1C000025
 
#define RPC_UUID_FORMAT_STRING   "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
 
#define RPC_UUID_FORMAT_ARGUMENTS(_rpc_uuid)
 

Typedefs

typedef UINT16 p_context_id_t
 
typedef UINT16 p_reject_reason_t
 
typedef struct ndr_format_tndr_format_p_t
 
typedef version_t p_rt_version_t
 
typedef UINT16 rpcrt_reason_code_t
 
typedef enum _RPC_CLIENT_STATE RPC_CLIENT_STATE
 
typedef enum _RPC_CLIENT_CALL_STATE RPC_CLIENT_CALL_STATE
 
typedef enum _CLIENT_IN_CHANNEL_STATE CLIENT_IN_CHANNEL_STATE
 
typedef enum _CLIENT_OUT_CHANNEL_STATE CLIENT_OUT_CHANNEL_STATE
 
typedef enum _VIRTUAL_CONNECTION_STATE VIRTUAL_CONNECTION_STATE
 

Enumerations

enum  p_cont_def_result_t { acceptance, user_rejection, provider_rejection }
 
enum  p_provider_reason_t { reason_not_specified, abstract_syntax_not_supported, proposed_transfer_syntaxes_not_supported, local_limit_exceeded }
 
enum  _RPC_CLIENT_STATE {
  RPC_CLIENT_STATE_INITIAL, RPC_CLIENT_STATE_ESTABLISHED, RPC_CLIENT_STATE_WAIT_SECURE_BIND_ACK, RPC_CLIENT_STATE_WAIT_UNSECURE_BIND_ACK,
  RPC_CLIENT_STATE_WAIT_SECURE_ALTER_CONTEXT_RESPONSE, RPC_CLIENT_STATE_CONTEXT_NEGOTIATED, RPC_CLIENT_STATE_WAIT_RESPONSE, RPC_CLIENT_STATE_FINAL
}
 
enum  _RPC_CLIENT_CALL_STATE {
  RPC_CLIENT_CALL_STATE_INITIAL, RPC_CLIENT_CALL_STATE_SEND_PDUS, RPC_CLIENT_CALL_STATE_DISPATCHED, RPC_CLIENT_CALL_STATE_RECEIVE_PDU,
  RPC_CLIENT_CALL_STATE_COMPLETE, RPC_CLIENT_CALL_STATE_FAULT, RPC_CLIENT_CALL_STATE_FINAL
}
 
enum  _CLIENT_IN_CHANNEL_STATE {
  CLIENT_IN_CHANNEL_STATE_INITIAL, CLIENT_IN_CHANNEL_STATE_CONNECTED, CLIENT_IN_CHANNEL_STATE_SECURITY, CLIENT_IN_CHANNEL_STATE_NEGOTIATED,
  CLIENT_IN_CHANNEL_STATE_OPENED, CLIENT_IN_CHANNEL_STATE_OPENED_A4W, CLIENT_IN_CHANNEL_STATE_FINAL
}
 
enum  _CLIENT_OUT_CHANNEL_STATE {
  CLIENT_OUT_CHANNEL_STATE_INITIAL, CLIENT_OUT_CHANNEL_STATE_CONNECTED, CLIENT_OUT_CHANNEL_STATE_SECURITY, CLIENT_OUT_CHANNEL_STATE_NEGOTIATED,
  CLIENT_OUT_CHANNEL_STATE_OPENED, CLIENT_OUT_CHANNEL_STATE_OPENED_A6W, CLIENT_OUT_CHANNEL_STATE_OPENED_A10W, CLIENT_OUT_CHANNEL_STATE_OPENED_B3W,
  CLIENT_OUT_CHANNEL_STATE_RECYCLED, CLIENT_OUT_CHANNEL_STATE_FINAL
}
 
enum  _VIRTUAL_CONNECTION_STATE {
  VIRTUAL_CONNECTION_STATE_INITIAL, VIRTUAL_CONNECTION_STATE_OUT_CHANNEL_WAIT, VIRTUAL_CONNECTION_STATE_WAIT_A3W, VIRTUAL_CONNECTION_STATE_WAIT_C2,
  VIRTUAL_CONNECTION_STATE_OPENED, VIRTUAL_CONNECTION_STATE_FINAL
}
 

Functions

FREERDP_LOCAL void rpc_pdu_header_print (rpcconn_hdr_t *header)
 
FREERDP_LOCAL void rpc_pdu_header_init (rdpRpc *rpc, rpcconn_hdr_t *header)
 
FREERDP_LOCAL UINT32 rpc_offset_align (UINT32 *offset, UINT32 alignment)
 
FREERDP_LOCAL UINT32 rpc_offset_pad (UINT32 *offset, UINT32 pad)
 
FREERDP_LOCAL BOOL rpc_get_stub_data_info (rdpRpc *rpc, BYTE *header, UINT32 *offset, UINT32 *length)
 
FREERDP_LOCAL SSIZE_T rpc_channel_write (RpcChannel *channel, const BYTE *data, size_t length)
 
FREERDP_LOCAL SSIZE_T rpc_channel_read (RpcChannel *channel, wStream *s, size_t length)
 
FREERDP_LOCAL void rpc_channel_free (RpcChannel *channel)
 
FREERDP_LOCAL RpcOutChannel * rpc_out_channel_new (rdpRpc *rpc)
 
FREERDP_LOCAL int rpc_out_channel_replacement_connect (RpcOutChannel *outChannel, int timeout)
 
FREERDP_LOCAL BOOL rpc_in_channel_transition_to_state (RpcInChannel *inChannel, CLIENT_IN_CHANNEL_STATE state)
 
FREERDP_LOCAL BOOL rpc_out_channel_transition_to_state (RpcOutChannel *outChannel, CLIENT_OUT_CHANNEL_STATE state)
 
FREERDP_LOCAL BOOL rpc_virtual_connection_transition_to_state (rdpRpc *rpc, RpcVirtualConnection *connection, VIRTUAL_CONNECTION_STATE state)
 
FREERDP_LOCAL BOOL rpc_connect (rdpRpc *rpc, int timeout)
 
FREERDP_LOCAL rdpRpc * rpc_new (rdpTransport *transport)
 
FREERDP_LOCAL void rpc_free (rdpRpc *rpc)
 

Macro Definition Documentation

#define CALLED_PADDR_UNKNOWN   3
#define DEFAULT_CONTEXT_NOT_SUPPORTED   5
#define DEFINE_RPC_COMMON_FIELDS ( )
Value:
BYTE rpc_vers; \
BYTE rpc_vers_minor; \
BYTE ptype; \
BYTE pfc_flags; \
BYTE packed_drep[4]; \
UINT16 frag_length; \
UINT16 auth_length; \
UINT32 call_id
unsigned char BYTE
Definition: LOMHash.c:3
unsigned short UINT16
Definition: LECHash.c:2
typedef UINT32
Definition: wf_interface.h:116
#define DEFINE_RPC_FAULT_CODE (   _code)    { _code , #_code },
#define LOCAL_LIMIT_EXCEEDED   2
#define nca_s_bad_actid   0x1C00000A
#define nca_s_comm_failure   0x1C010001
#define nca_s_fault_addr_error   0x1C000002
#define nca_s_fault_cancel   0x1C00000D
#define nca_s_fault_codeset_conv_error   0x1C000023
#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_no_client_stub   0x1C000025
#define nca_s_fault_object_not_found   0x1C000024
#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_comm_failure   0x1C000013
#define nca_s_fault_remote_no_memory   0x1C00001B
#define nca_s_fault_string_too_long   0x1C010015
#define nca_s_fault_tx_open_failed   0x1C000022
#define nca_s_fault_unspec   0x1C000012
#define nca_s_fault_user_defined   0x1C000021
#define nca_s_invalid_checksum   0x1C00001F
#define nca_s_invalid_crc   0x1C000020
#define nca_s_invalid_pres_context_id   0x1C00001C
#define nca_s_manager_not_entered   0x1C00000C
#define nca_s_op_rng_error   0x1C010002
#define nca_s_out_args_too_big   0x1C010013
#define nca_s_proto_error   0x1C01000B
#define nca_s_rpc_version_mismatch   0x1C000008
#define nca_s_server_too_busy   0x1C010014
#define nca_s_unk_if   0x1C010003
#define nca_s_unspec_reject   0x1C000009
#define nca_s_unsupported_authn_level   0x1C00001D
#define nca_s_unsupported_type   0x1C010017
#define nca_s_who_are_you_failed   0x1C00000B
#define nca_s_wrong_boot_time   0x1C010006
#define nca_s_you_crashed   0x1C010009
#define ndr_c_char_ascii   0
#define ndr_c_char_ebcdic   1
#define ndr_c_float_cray   2
#define ndr_c_float_ibm   3
#define ndr_c_float_ieee   0
#define ndr_c_float_vax   1
#define ndr_c_int_big_endian   0
#define ndr_c_int_little_endian   1
#define NO_PSAP_AVAILABLE   7
#define PFC_CONC_MPX   0x10
#define PFC_DID_NOT_EXECUTE   0x20
#define PFC_FIRST_FRAG   0x01
#define PFC_LAST_FRAG   0x02
#define PFC_MAYBE   0x40
#define PFC_OBJECT_UUID   0x80
#define PFC_PENDING_CANCEL   0x04
#define PFC_RESERVED_1   0x08
#define PFC_SUPPORT_HEADER_SIGN   0x04
#define PROTOCOL_VERSION_NOT_SUPPORTED   4
#define PTYPE_ACK   0x07
#define PTYPE_ALTER_CONTEXT   0x0E
#define PTYPE_ALTER_CONTEXT_RESP   0x0F
#define PTYPE_BIND   0x0B
#define PTYPE_BIND_ACK   0x0C
#define PTYPE_BIND_NAK   0x0D
#define PTYPE_CANCEL_ACK   0x0A
#define PTYPE_CL_CANCEL   0x08
#define PTYPE_CO_CANCEL   0x12
#define PTYPE_FACK   0x09
#define PTYPE_FAULT   0x03
#define PTYPE_NOCALL   0x05
#define PTYPE_ORPHANED   0x13
#define PTYPE_PING   0x01
#define PTYPE_REJECT   0x06
#define PTYPE_REQUEST   0x00

CAE Specification DCE 1.1: Remote Procedure Call Document Number: C706 http://pubs.opengroup.org/onlinepubs/9629399/

#define PTYPE_RESPONSE   0x02
#define PTYPE_RPC_AUTH_3   0x10
#define PTYPE_RTS   0x14
#define PTYPE_SHUTDOWN   0x11
#define PTYPE_WORKING   0x04
#define REASON_NOT_SPECIFIED   0
#define RPC_CL_MUST_RECV_FRAG_SIZE   1464
#define RPC_CO_MUST_RECV_FRAG_SIZE   1432
#define RPC_COMMON_FIELDS_LENGTH   16
#define RPC_PDU_FLAG_STUB   0x00000001
#define RPC_PDU_HEADER_MAX_LENGTH   32

The PDU maximum header length is enough to contain either the RPC common fields or all fields up to the stub data in PDUs that use it (request, response, fault)

#define RPC_UUID_FORMAT_ARGUMENTS (   _rpc_uuid)
Value:
_rpc_uuid[0], _rpc_uuid[1], _rpc_uuid[2], _rpc_uuid[3], _rpc_uuid[4], _rpc_uuid[5], _rpc_uuid[6], _rpc_uuid[7], \
_rpc_uuid[8], _rpc_uuid[9], _rpc_uuid[10], _rpc_uuid[11], _rpc_uuid[12], _rpc_uuid[13], _rpc_uuid[14], _rpc_uuid[15]
#define RPC_UUID_FORMAT_STRING   "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
#define RTS_PDU_HEADER_LENGTH   20
#define TEMPORARY_CONGESTION   1
#define USER_DATA_NOT_READABLE   6

Typedef Documentation

typedef struct ndr_format_t * ndr_format_p_t

Enumeration Type Documentation

Enumerator
CLIENT_IN_CHANNEL_STATE_INITIAL 
CLIENT_IN_CHANNEL_STATE_CONNECTED 
CLIENT_IN_CHANNEL_STATE_SECURITY 
CLIENT_IN_CHANNEL_STATE_NEGOTIATED 
CLIENT_IN_CHANNEL_STATE_OPENED 
CLIENT_IN_CHANNEL_STATE_OPENED_A4W 
CLIENT_IN_CHANNEL_STATE_FINAL 
Enumerator
CLIENT_OUT_CHANNEL_STATE_INITIAL 
CLIENT_OUT_CHANNEL_STATE_CONNECTED 
CLIENT_OUT_CHANNEL_STATE_SECURITY 
CLIENT_OUT_CHANNEL_STATE_NEGOTIATED 
CLIENT_OUT_CHANNEL_STATE_OPENED 
CLIENT_OUT_CHANNEL_STATE_OPENED_A6W 
CLIENT_OUT_CHANNEL_STATE_OPENED_A10W 
CLIENT_OUT_CHANNEL_STATE_OPENED_B3W 
CLIENT_OUT_CHANNEL_STATE_RECYCLED 
CLIENT_OUT_CHANNEL_STATE_FINAL 
Enumerator
RPC_CLIENT_CALL_STATE_INITIAL 
RPC_CLIENT_CALL_STATE_SEND_PDUS 
RPC_CLIENT_CALL_STATE_DISPATCHED 
RPC_CLIENT_CALL_STATE_RECEIVE_PDU 
RPC_CLIENT_CALL_STATE_COMPLETE 
RPC_CLIENT_CALL_STATE_FAULT 
RPC_CLIENT_CALL_STATE_FINAL 
Enumerator
RPC_CLIENT_STATE_INITIAL 
RPC_CLIENT_STATE_ESTABLISHED 
RPC_CLIENT_STATE_WAIT_SECURE_BIND_ACK 
RPC_CLIENT_STATE_WAIT_UNSECURE_BIND_ACK 
RPC_CLIENT_STATE_WAIT_SECURE_ALTER_CONTEXT_RESPONSE 
RPC_CLIENT_STATE_CONTEXT_NEGOTIATED 
RPC_CLIENT_STATE_WAIT_RESPONSE 
RPC_CLIENT_STATE_FINAL 
Enumerator
VIRTUAL_CONNECTION_STATE_INITIAL 
VIRTUAL_CONNECTION_STATE_OUT_CHANNEL_WAIT 
VIRTUAL_CONNECTION_STATE_WAIT_A3W 
VIRTUAL_CONNECTION_STATE_WAIT_C2 
VIRTUAL_CONNECTION_STATE_OPENED 
VIRTUAL_CONNECTION_STATE_FINAL 
Enumerator
acceptance 
user_rejection 
provider_rejection 
Enumerator
reason_not_specified 
abstract_syntax_not_supported 
proposed_transfer_syntaxes_not_supported 
local_limit_exceeded 

Function Documentation

FREERDP_LOCAL void rpc_channel_free ( RpcChannel *  channel)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL SSIZE_T rpc_channel_read ( RpcChannel *  channel,
wStream *  s,
size_t  length 
)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL SSIZE_T rpc_channel_write ( RpcChannel *  channel,
const BYTE data,
size_t  length 
)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL rpc_connect ( rdpRpc *  rpc,
int  timeout 
)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL void rpc_free ( rdpRpc *  rpc)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL rpc_get_stub_data_info ( rdpRpc *  rpc,
BYTE buffer,
UINT32 offset,
UINT32 length 
)

PDU Segments:


| | | PDU Header |

________________________________
PDU Body
________________________________
Security Trailer
________________________________
Authentication Token
________________________________

PDU Structure with verification trailer

MUST only appear in a request PDU!


| | | PDU Header | |________________________________| _______ | | /|\ | | |

Stub Data
________________________________
PDU Body
Stub Pad
________________________________
Verification Trailer
________________________________
Authentication Pad
__________________________________|/__

| | | Security Trailer |

________________________________
Authentication Token
________________________________

Security Trailer:

The sec_trailer structure MUST be placed at the end of the PDU, including past stub data, when present. The sec_trailer structure MUST be 4-byte aligned with respect to the beginning of the PDU. Padding octets MUST be used to align the sec_trailer structure if its natural beginning is not already 4-byte aligned.

All PDUs that carry sec_trailer information share certain common fields: frag_length and auth_length. The beginning of the sec_trailer structure for each PDU MUST be calculated to start from offset (frag_length – auth_length – 8) from the beginning of the PDU.

Immediately after the sec_trailer structure, there MUST be a BLOB carrying the authentication information produced by the security provider. This BLOB is called the authentication token and MUST be of size auth_length. The size MUST also be equal to the length from the first octet immediately after the sec_trailer structure all the way to the end of the fragment; the two values MUST be the same.

A client or a server that (during composing of a PDU) has allocated more space for the authentication token than the security provider fills in SHOULD fill in the rest of the allocated space with zero octets. These zero octets are still considered to belong to the authentication token part of the PDU.

According to [MS-RPCE], auth_pad_length is the number of padding octets used to 4-byte align the security trailer, but in practice we get values up to 15, which indicates 16-byte alignment.

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL rpc_in_channel_transition_to_state ( RpcInChannel *  inChannel,
CLIENT_IN_CHANNEL_STATE  state 
)

Here is the caller graph for this function:

FREERDP_LOCAL rdpRpc* rpc_new ( rdpTransport *  transport)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL UINT32 rpc_offset_align ( UINT32 offset,
UINT32  alignment 
)

Here is the caller graph for this function:

FREERDP_LOCAL UINT32 rpc_offset_pad ( UINT32 offset,
UINT32  pad 
)

Here is the caller graph for this function:

FREERDP_LOCAL RpcOutChannel* rpc_out_channel_new ( rdpRpc *  rpc)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL int rpc_out_channel_replacement_connect ( RpcOutChannel *  outChannel,
int  timeout 
)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL rpc_out_channel_transition_to_state ( RpcOutChannel *  outChannel,
CLIENT_OUT_CHANNEL_STATE  state 
)

Here is the caller graph for this function:

FREERDP_LOCAL void rpc_pdu_header_init ( rdpRpc *  rpc,
rpcconn_hdr_t header 
)

Here is the caller graph for this function:

FREERDP_LOCAL void rpc_pdu_header_print ( rpcconn_hdr_t header)

[MS-RPCH]: Remote Procedure Call over HTTP Protocol Specification: http://msdn.microsoft.com/en-us/library/cc243950/ Connection Establishment
Client Outbound Proxy Inbound Proxy Server
| | | |
|--------------—IN Channel Request------------—>| |
|—OUT Channel Request–>| |<-Legacy Server Response-|
| |<-----------—Legacy Server Response-----------—|
| | | |
|------—CONN_A1-----—>| | |
|-------------------—CONN_B1------------------—>| |
| |-------------------—CONN_A2------------------—>|
| | | |
|<–OUT Channel Response–| |------—CONN_B2-----—>|
|<-----—CONN_A3------—| | |
| |<------------------—CONN_C1-------------------—|
| | |<-----—CONN_B3------—|
|<-----—CONN_C2------—| | |
| | | |

FREERDP_LOCAL BOOL rpc_virtual_connection_transition_to_state ( rdpRpc *  rpc,
RpcVirtualConnection *  connection,
VIRTUAL_CONNECTION_STATE  state 
)

Here is the caller graph for this function: