FreeRDP
|
#include <freerdp/config.h>
#include <winpr/assert.h>
#include <winpr/crt.h>
#include <winpr/synch.h>
#include <winpr/print.h>
#include <winpr/stream.h>
#include <winpr/winsock.h>
#include <winpr/crypto.h>
#include <freerdp/log.h>
#include <freerdp/error.h>
#include <freerdp/utils/ringbuffer.h>
#include <openssl/bio.h>
#include <time.h>
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <sys/socket.h>
#include "tpkt.h"
#include "fastpath.h"
#include "transport.h"
#include "rdp.h"
#include "proxy.h"
#include "utils.h"
#include "state.h"
#include "childsession.h"
#include "gateway/rdg.h"
#include "gateway/wst.h"
#include "gateway/arm.h"
Macros | |
#define | TAG FREERDP_TAG("core.transport") |
#define | BUFFER_SIZE 16384 |
#define | WLog_ERR_BIO(transport, biofunc, bio) transport_bio_error_log(transport, biofunc, bio, __FILE__, __func__, __LINE__) |
Functions | |
static void | transport_ssl_cb (SSL *ssl, int where, int ret) |
wStream * | transport_send_stream_init (rdpTransport *transport, size_t size) |
BOOL | transport_attach (rdpTransport *transport, int sockfd) |
static BOOL | transport_default_attach (rdpTransport *transport, int sockfd) |
BOOL | transport_connect_rdp (rdpTransport *transport) |
BOOL | transport_connect_tls (rdpTransport *transport) |
static BOOL | transport_default_connect_tls (rdpTransport *transport) |
BOOL | transport_connect_nla (rdpTransport *transport, BOOL earlyUserAuth) |
BOOL | transport_connect_rdstls (rdpTransport *transport) |
BOOL | transport_connect_aad (rdpTransport *transport) |
BOOL | transport_connect (rdpTransport *transport, const char *hostname, UINT16 port, DWORD timeout) |
BOOL | transport_connect_childsession (rdpTransport *transport) |
BOOL | transport_accept_rdp (rdpTransport *transport) |
BOOL | transport_accept_tls (rdpTransport *transport) |
static BOOL | transport_default_accept_tls (rdpTransport *transport) |
BOOL | transport_accept_nla (rdpTransport *transport) |
BOOL | transport_accept_rdstls (rdpTransport *transport) |
static void | transport_bio_error_log (rdpTransport *transport, LPCSTR biofunc, BIO *bio, LPCSTR file, LPCSTR func, DWORD line) |
static SSIZE_T | transport_read_layer (rdpTransport *transport, BYTE *data, size_t bytes) |
static SSIZE_T | transport_read_layer_bytes (rdpTransport *transport, wStream *s, size_t toRead) |
Tries to read toRead bytes from the specified transport. More... | |
int | transport_read_pdu (rdpTransport *transport, wStream *s) |
Try to read a complete PDU (NLA, fast-path or tpkt) from the underlying transport. More... | |
static SSIZE_T | parse_nla_mode_pdu (rdpTransport *transport, wStream *stream) |
static SSIZE_T | parse_default_mode_pdu (rdpTransport *transport, wStream *stream) |
SSIZE_T | transport_parse_pdu (rdpTransport *transport, wStream *s, BOOL *incomplete) |
static int | transport_default_read_pdu (rdpTransport *transport, wStream *s) |
int | transport_write (rdpTransport *transport, wStream *s) |
static int | transport_default_write (rdpTransport *transport, wStream *s) |
DWORD | transport_get_event_handles (rdpTransport *transport, HANDLE *events, DWORD count) |
BOOL | transport_is_write_blocked (rdpTransport *transport) |
int | transport_drain_output_buffer (rdpTransport *transport) |
int | transport_check_fds (rdpTransport *transport) |
BOOL | transport_set_blocking_mode (rdpTransport *transport, BOOL blocking) |
void | transport_set_gateway_enabled (rdpTransport *transport, BOOL GatewayEnabled) |
void | transport_set_nla_mode (rdpTransport *transport, BOOL NlaMode) |
void | transport_set_rdstls_mode (rdpTransport *transport, BOOL RdstlsMode) |
void | transport_set_aad_mode (rdpTransport *transport, BOOL AadMode) |
BOOL | transport_disconnect (rdpTransport *transport) |
static BOOL | transport_default_disconnect (rdpTransport *transport) |
rdpTransport * | transport_new (rdpContext *context) |
void | transport_free (rdpTransport *transport) |
BOOL | transport_set_io_callbacks (rdpTransport *transport, const rdpTransportIo *io_callbacks) |
const rdpTransportIo * | transport_get_io_callbacks (rdpTransport *transport) |
rdpContext * | transport_get_context (rdpTransport *transport) |
rdpTransport * | freerdp_get_transport (rdpContext *context) |
BOOL | transport_set_nla (rdpTransport *transport, rdpNla *nla) |
rdpNla * | transport_get_nla (rdpTransport *transport) |
BOOL | transport_set_tls (rdpTransport *transport, rdpTls *tls) |
rdpTls * | transport_get_tls (rdpTransport *transport) |
BOOL | transport_set_tsg (rdpTransport *transport, rdpTsg *tsg) |
rdpTsg * | transport_get_tsg (rdpTransport *transport) |
wStream * | transport_take_from_pool (rdpTransport *transport, size_t size) |
ULONG | transport_get_bytes_sent (rdpTransport *transport, BOOL resetCount) |
TRANSPORT_LAYER | transport_get_layer (rdpTransport *transport) |
BOOL | transport_set_layer (rdpTransport *transport, TRANSPORT_LAYER layer) |
BOOL | transport_set_connected_event (rdpTransport *transport) |
BOOL | transport_set_recv_callbacks (rdpTransport *transport, TransportRecv recv, void *extra) |
BOOL | transport_get_blocking (rdpTransport *transport) |
BOOL | transport_set_blocking (rdpTransport *transport, BOOL blocking) |
BOOL | transport_have_more_bytes_to_read (rdpTransport *transport) |
int | transport_tcp_connect (rdpTransport *transport, const char *hostname, int port, DWORD timeout) |
HANDLE | transport_get_front_bio (rdpTransport *transport) |
BOOL | transport_io_callback_set_event (rdpTransport *transport, BOOL set) |
void | transport_set_early_user_auth_mode (rdpTransport *transport, BOOL EUAMode) |
#define BUFFER_SIZE 16384 |
#define TAG FREERDP_TAG("core.transport") |
FreeRDP: A Remote Desktop Protocol Implementation Network Transport Layer
Copyright 2011 Vic Lee
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
#define WLog_ERR_BIO | ( | transport, | |
biofunc, | |||
bio | |||
) | transport_bio_error_log(transport, biofunc, bio, __FILE__, __func__, __LINE__) |
rdpTransport* freerdp_get_transport | ( | rdpContext * | context | ) |
|
static |
|
static |
BOOL transport_accept_nla | ( | rdpTransport * | transport | ) |
BOOL transport_accept_rdp | ( | rdpTransport * | transport | ) |
BOOL transport_accept_rdstls | ( | rdpTransport * | transport | ) |
BOOL transport_accept_tls | ( | rdpTransport * | transport | ) |
BOOL transport_attach | ( | rdpTransport * | transport, |
int | sockfd | ||
) |
|
static |
int transport_check_fds | ( | rdpTransport * | transport | ) |
Note: transport_read_pdu tries to read one PDU from the transport layer. The ReceiveBuffer might have a position > 0 in case of a non blocking transport. If transport_read_pdu returns 0 the pdu couldn't be read at this point. Note that transport->ReceiveBuffer is replaced after each iteration of this loop with a fresh stream instance from a pool.
status: -1: error 0: success 1: redirection
BOOL transport_connect | ( | rdpTransport * | transport, |
const char * | hostname, | ||
UINT16 | port, | ||
DWORD | timeout | ||
) |
BOOL transport_connect_aad | ( | rdpTransport * | transport | ) |
BOOL transport_connect_childsession | ( | rdpTransport * | transport | ) |
BOOL transport_connect_nla | ( | rdpTransport * | transport, |
BOOL | earlyUserAuth | ||
) |
BOOL transport_connect_rdp | ( | rdpTransport * | transport | ) |
BOOL transport_connect_rdstls | ( | rdpTransport * | transport | ) |
BOOL transport_connect_tls | ( | rdpTransport * | transport | ) |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
BOOL transport_disconnect | ( | rdpTransport * | transport | ) |
int transport_drain_output_buffer | ( | rdpTransport * | transport | ) |
void transport_free | ( | rdpTransport * | transport | ) |
BOOL transport_get_blocking | ( | rdpTransport * | transport | ) |
ULONG transport_get_bytes_sent | ( | rdpTransport * | transport, |
BOOL | resetCount | ||
) |
rdpContext* transport_get_context | ( | rdpTransport * | transport | ) |
DWORD transport_get_event_handles | ( | rdpTransport * | transport, |
HANDLE * | events, | ||
DWORD | count | ||
) |
HANDLE transport_get_front_bio | ( | rdpTransport * | transport | ) |
const rdpTransportIo* transport_get_io_callbacks | ( | rdpTransport * | transport | ) |
TRANSPORT_LAYER transport_get_layer | ( | rdpTransport * | transport | ) |
rdpNla* transport_get_nla | ( | rdpTransport * | transport | ) |
rdpTls* transport_get_tls | ( | rdpTransport * | transport | ) |
rdpTsg* transport_get_tsg | ( | rdpTransport * | transport | ) |
BOOL transport_have_more_bytes_to_read | ( | rdpTransport * | transport | ) |
BOOL transport_io_callback_set_event | ( | rdpTransport * | transport, |
BOOL | set | ||
) |
BOOL transport_is_write_blocked | ( | rdpTransport * | transport | ) |
rdpTransport* transport_new | ( | rdpContext * | context | ) |
SSIZE_T transport_parse_pdu | ( | rdpTransport * | transport, |
wStream * | s, | ||
BOOL * | incomplete | ||
) |
|
static |
|
static |
Tries to read toRead bytes from the specified transport.
Try to read toRead bytes from the transport to the stream. In case it was not possible to read toRead bytes 0 is returned. The stream is always advanced by the number of bytes read.
The function assumes that the stream has enough capacity to hold the data.
[in] | transport | rdpTransport |
[in] | s | wStream |
[in] | toRead | number of bytes to read |
int transport_read_pdu | ( | rdpTransport * | transport, |
wStream * | s | ||
) |
Try to read a complete PDU (NLA, fast-path or tpkt) from the underlying transport.
If possible a complete PDU is read, in case of non blocking transport this might not succeed. Except in case of an error the passed stream will point to the last byte read (correct position). When the pdu read is completed the stream is sealed and the pointer set to 0
[in] | transport | rdpTransport |
[in] | s | wStream |
wStream* transport_send_stream_init | ( | rdpTransport * | transport, |
size_t | size | ||
) |
void transport_set_aad_mode | ( | rdpTransport * | transport, |
BOOL | AadMode | ||
) |
BOOL transport_set_blocking | ( | rdpTransport * | transport, |
BOOL | blocking | ||
) |
BOOL transport_set_blocking_mode | ( | rdpTransport * | transport, |
BOOL | blocking | ||
) |
BOOL transport_set_connected_event | ( | rdpTransport * | transport | ) |
void transport_set_early_user_auth_mode | ( | rdpTransport * | transport, |
BOOL | EUAMode | ||
) |
void transport_set_gateway_enabled | ( | rdpTransport * | transport, |
BOOL | GatewayEnabled | ||
) |
BOOL transport_set_io_callbacks | ( | rdpTransport * | transport, |
const rdpTransportIo * | io_callbacks | ||
) |
BOOL transport_set_layer | ( | rdpTransport * | transport, |
TRANSPORT_LAYER | layer | ||
) |
BOOL transport_set_nla | ( | rdpTransport * | transport, |
rdpNla * | nla | ||
) |
void transport_set_nla_mode | ( | rdpTransport * | transport, |
BOOL | NlaMode | ||
) |
void transport_set_rdstls_mode | ( | rdpTransport * | transport, |
BOOL | RdstlsMode | ||
) |
BOOL transport_set_recv_callbacks | ( | rdpTransport * | transport, |
TransportRecv | recv, | ||
void * | extra | ||
) |
BOOL transport_set_tls | ( | rdpTransport * | transport, |
rdpTls * | tls | ||
) |
BOOL transport_set_tsg | ( | rdpTransport * | transport, |
rdpTsg * | tsg | ||
) |
|
static |
wStream* transport_take_from_pool | ( | rdpTransport * | transport, |
size_t | size | ||
) |
int transport_tcp_connect | ( | rdpTransport * | transport, |
const char * | hostname, | ||
int | port, | ||
DWORD | timeout | ||
) |
int transport_write | ( | rdpTransport * | transport, |
wStream * | s | ||
) |