FreeRDP
nego.h File Reference
#include "transport.h"
#include <freerdp/types.h>
#include <freerdp/settings.h>
#include <freerdp/log.h>
#include <freerdp/api.h>
#include <winpr/stream.h>
This graph shows which files directly or indirectly include this file:

Macros

#define PROTOCOL_RDP   0x00000000
 
#define PROTOCOL_SSL   0x00000001
 
#define PROTOCOL_HYBRID   0x00000002
 
#define PROTOCOL_RDSTLS   0x00000004
 
#define PROTOCOL_HYBRID_EX   0x00000008
 
#define PROTOCOL_FAILED_NEGO   0x80000000 /* only used internally, not on the wire */
 
#define AUTHZ_SUCCESS   0x00000000
 
#define AUTHZ_ACCESS_DENIED   0x0000052E
 
#define EXTENDED_CLIENT_DATA_SUPPORTED   0x01
 
#define DYNVC_GFX_PROTOCOL_SUPPORTED   0x02
 
#define RDP_NEGRSP_RESERVED   0x04
 
#define RESTRICTED_ADMIN_MODE_SUPPORTED   0x08
 
#define PRECONNECTION_PDU_V1_SIZE   16
 
#define PRECONNECTION_PDU_V2_MIN_SIZE   (PRECONNECTION_PDU_V1_SIZE + 2)
 
#define PRECONNECTION_PDU_V1   1
 
#define PRECONNECTION_PDU_V2   2
 
#define RESTRICTED_ADMIN_MODE_REQUIRED   0x01
 
#define REDIRECTED_AUTHENTICATION_MODE_REQUIRED   0x02
 
#define CORRELATION_INFO_PRESENT   0x08
 

Typedefs

typedef enum _NEGO_STATE NEGO_STATE
 

Enumerations

enum  RDP_NEG_FAILURE_FAILURECODES {
  SSL_REQUIRED_BY_SERVER = 0x00000001, SSL_NOT_ALLOWED_BY_SERVER = 0x00000002, SSL_CERT_NOT_ON_SERVER = 0x00000003, INCONSISTENT_FLAGS = 0x00000004,
  HYBRID_REQUIRED_BY_SERVER = 0x00000005, SSL_WITH_USER_AUTH_REQUIRED_BY_SERVER = 0x00000006
}
 
enum  _NEGO_STATE {
  NEGO_STATE_INITIAL, NEGO_STATE_EXT, NEGO_STATE_NLA, NEGO_STATE_TLS,
  NEGO_STATE_RDP, NEGO_STATE_FAIL, NEGO_STATE_FINAL
}
 
enum  RDP_NEG_MSG { TYPE_RDP_NEG_REQ = 0x1, TYPE_RDP_NEG_RSP = 0x2, TYPE_RDP_NEG_FAILURE = 0x3 }
 

Functions

FREERDP_LOCAL BOOL nego_connect (rdpNego *nego)
 
FREERDP_LOCAL BOOL nego_disconnect (rdpNego *nego)
 
FREERDP_LOCAL int nego_recv (rdpTransport *transport, wStream *s, void *extra)
 
FREERDP_LOCAL BOOL nego_read_request (rdpNego *nego, wStream *s)
 
FREERDP_LOCAL BOOL nego_send_negotiation_request (rdpNego *nego)
 
FREERDP_LOCAL BOOL nego_send_negotiation_response (rdpNego *nego)
 
FREERDP_LOCAL rdpNego * nego_new (rdpTransport *transport)
 
FREERDP_LOCAL void nego_free (rdpNego *nego)
 
FREERDP_LOCAL void nego_init (rdpNego *nego)
 
FREERDP_LOCAL BOOL nego_set_target (rdpNego *nego, const char *hostname, UINT16 port)
 
FREERDP_LOCAL void nego_set_negotiation_enabled (rdpNego *nego, BOOL NegotiateSecurityLayer)
 
FREERDP_LOCAL void nego_set_restricted_admin_mode_required (rdpNego *nego, BOOL RestrictedAdminModeRequired)
 
FREERDP_LOCAL void nego_set_gateway_enabled (rdpNego *nego, BOOL GatewayEnabled)
 
FREERDP_LOCAL void nego_set_gateway_bypass_local (rdpNego *nego, BOOL GatewayBypassLocal)
 
FREERDP_LOCAL void nego_enable_rdp (rdpNego *nego, BOOL enable_rdp)
 
FREERDP_LOCAL void nego_enable_tls (rdpNego *nego, BOOL enable_tls)
 
FREERDP_LOCAL void nego_enable_nla (rdpNego *nego, BOOL enable_nla)
 
FREERDP_LOCAL void nego_enable_ext (rdpNego *nego, BOOL enable_ext)
 
FREERDP_LOCAL BOOL nego_set_routing_token (rdpNego *nego, BYTE *RoutingToken, DWORD RoutingTokenLength)
 
FREERDP_LOCAL BOOL nego_set_cookie (rdpNego *nego, char *cookie)
 
FREERDP_LOCAL void nego_set_cookie_max_length (rdpNego *nego, UINT32 CookieMaxLength)
 
FREERDP_LOCAL void nego_set_send_preconnection_pdu (rdpNego *nego, BOOL SendPreconnectionPdu)
 
FREERDP_LOCAL void nego_set_preconnection_id (rdpNego *nego, UINT32 PreconnectionId)
 
FREERDP_LOCAL void nego_set_preconnection_blob (rdpNego *nego, char *PreconnectionBlob)
 
FREERDP_LOCAL UINT32 nego_get_selected_protocol (rdpNego *nego)
 
FREERDP_LOCAL BOOL nego_set_selected_protocol (rdpNego *nego, UINT32 SelectedProtocol)
 
FREERDP_LOCAL UINT32 nego_get_requested_protocols (rdpNego *nego)
 
FREERDP_LOCAL BOOL nego_set_requested_protocols (rdpNego *nego, UINT32 RequestedProtocols)
 
FREERDP_LOCAL BOOL nego_set_state (rdpNego *nego, NEGO_STATE state)
 
FREERDP_LOCAL NEGO_STATE nego_get_state (rdpNego *nego)
 
FREERDP_LOCAL SEC_WINNT_AUTH_IDENTITY * nego_get_identity (rdpNego *nego)
 
FREERDP_LOCAL void nego_free_nla (rdpNego *nego)
 

Macro Definition Documentation

#define AUTHZ_ACCESS_DENIED   0x0000052E
#define AUTHZ_SUCCESS   0x00000000
#define CORRELATION_INFO_PRESENT   0x08
#define DYNVC_GFX_PROTOCOL_SUPPORTED   0x02
#define EXTENDED_CLIENT_DATA_SUPPORTED   0x01
#define PRECONNECTION_PDU_V1   1
#define PRECONNECTION_PDU_V1_SIZE   16
#define PRECONNECTION_PDU_V2   2
#define PRECONNECTION_PDU_V2_MIN_SIZE   (PRECONNECTION_PDU_V1_SIZE + 2)
#define PROTOCOL_FAILED_NEGO   0x80000000 /* only used internally, not on the wire */
#define PROTOCOL_HYBRID   0x00000002
#define PROTOCOL_HYBRID_EX   0x00000008
#define PROTOCOL_RDP   0x00000000

FreeRDP: A Remote Desktop Protocol Implementation RDP Protocol Security Negotiation

Copyright 2011-2012 Marc-Andre Moreau marca.nosp@m.ndre.nosp@m..more.nosp@m.au@g.nosp@m.mail..nosp@m.com

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 PROTOCOL_RDSTLS   0x00000004
#define PROTOCOL_SSL   0x00000001
#define RDP_NEGRSP_RESERVED   0x04
#define REDIRECTED_AUTHENTICATION_MODE_REQUIRED   0x02
#define RESTRICTED_ADMIN_MODE_REQUIRED   0x01
#define RESTRICTED_ADMIN_MODE_SUPPORTED   0x08

Typedef Documentation

typedef enum _NEGO_STATE NEGO_STATE

Enumeration Type Documentation

Enumerator
NEGO_STATE_INITIAL 
NEGO_STATE_EXT 
NEGO_STATE_NLA 
NEGO_STATE_TLS 
NEGO_STATE_RDP 
NEGO_STATE_FAIL 
NEGO_STATE_FINAL 
Enumerator
SSL_REQUIRED_BY_SERVER 
SSL_NOT_ALLOWED_BY_SERVER 
SSL_CERT_NOT_ON_SERVER 
INCONSISTENT_FLAGS 
HYBRID_REQUIRED_BY_SERVER 
SSL_WITH_USER_AUTH_REQUIRED_BY_SERVER 
Enumerator
TYPE_RDP_NEG_REQ 
TYPE_RDP_NEG_RSP 
TYPE_RDP_NEG_FAILURE 

Function Documentation

FREERDP_LOCAL BOOL nego_connect ( rdpNego *  nego)

Negotiate protocol security and connect.

Parameters
nego
Returns

Advertise all supported encryption methods if the client implementation did not set any security methods

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_disconnect ( rdpNego *  nego)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL void nego_enable_ext ( rdpNego *  nego,
BOOL  enable_ext 
)

Enable NLA extended security protocol.

Parameters
negopointer to the negotiation structure
enable_extwhether to enable network level authentication extended protocol (TRUE for enabled, FALSE for disabled)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_enable_nla ( rdpNego *  nego,
BOOL  enable_nla 
)

Enable NLA security protocol.

Parameters
negopointer to the negotiation structure
enable_nlawhether to enable network level authentication protocol (TRUE for enabled, FALSE for disabled)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_enable_rdp ( rdpNego *  nego,
BOOL  enable_rdp 
)

Enable RDP security protocol.

Parameters
negopointer to the negotiation structure
enable_rdpwhether to enable normal RDP protocol (TRUE for enabled, FALSE for disabled)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_enable_tls ( rdpNego *  nego,
BOOL  enable_tls 
)

Enable TLS security protocol.

Parameters
negopointer to the negotiation structure
enable_tlswhether to enable TLS + RDP protocol (TRUE for enabled, FALSE for disabled)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_free ( rdpNego *  nego)

Free NEGO state machine.

Parameters
nego

Here is the caller graph for this function:

FREERDP_LOCAL void nego_free_nla ( rdpNego *  nego)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL SEC_WINNT_AUTH_IDENTITY* nego_get_identity ( rdpNego *  nego)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL UINT32 nego_get_requested_protocols ( rdpNego *  nego)

Here is the caller graph for this function:

FREERDP_LOCAL UINT32 nego_get_selected_protocol ( rdpNego *  nego)

Here is the caller graph for this function:

FREERDP_LOCAL NEGO_STATE nego_get_state ( rdpNego *  nego)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_init ( rdpNego *  nego)

Initialize NEGO state machine.

Parameters
nego

Here is the caller graph for this function:

FREERDP_LOCAL rdpNego* nego_new ( rdpTransport *  transport)

Create a new NEGO state machine instance.

Parameters
transport
Returns

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_read_request ( rdpNego *  nego,
wStream *  s 
)

Read protocol security negotiation request message.

Parameters
nego
sstream

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL int nego_recv ( rdpTransport *  transport,
wStream *  s,
void extra 
)

Receive protocol security negotiation message.
http://msdn.microsoft.com/en-us/library/cc240501/

Parameters
transporttransport
sstream
extranego pointer

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_send_negotiation_request ( rdpNego *  nego)

Send RDP Negotiation Request (RDP_NEG_REQ).
http://msdn.microsoft.com/en-us/library/cc240500/
http://msdn.microsoft.com/en-us/library/cc240470/

Parameters
nego

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_send_negotiation_response ( rdpNego *  nego)

Send RDP Negotiation Response (RDP_NEG_RSP).

Parameters
nego

If the server implementation did not explicitely set a encryption level we default to client compatible

Note: This hack was firstly introduced in commit 95f5e115 to disable the unnecessary encryption with peers connecting to 127.0.0.1 or local unix sockets. This also affects connections via port tunnels! (e.g. ssh -L)

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_set_cookie ( rdpNego *  nego,
char *  cookie 
)

Set cookie.

Parameters
nego
cookie

Here is the call graph for this function:

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_cookie_max_length ( rdpNego *  nego,
UINT32  CookieMaxLength 
)

Set cookie maximum length

Parameters
nego
CookieMaxLength

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_gateway_bypass_local ( rdpNego *  nego,
BOOL  GatewayBypassLocal 
)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_gateway_enabled ( rdpNego *  nego,
BOOL  GatewayEnabled 
)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_negotiation_enabled ( rdpNego *  nego,
BOOL  NegotiateSecurityLayer 
)

Enable security layer negotiation.

Parameters
negopointer to the negotiation structure
enable_rdpwhether to enable security layer negotiation (TRUE for enabled, FALSE for disabled)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_preconnection_blob ( rdpNego *  nego,
char *  PreconnectionBlob 
)

Set preconnection blob.

Parameters
nego
blob

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_preconnection_id ( rdpNego *  nego,
UINT32  PreconnectionId 
)

Set preconnection id.

Parameters
nego
id

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_set_requested_protocols ( rdpNego *  nego,
UINT32  RequestedProtocols 
)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_restricted_admin_mode_required ( rdpNego *  nego,
BOOL  RestrictedAdminModeRequired 
)

Enable restricted admin mode.

Parameters
negopointer to the negotiation structure
enable_restrictedwhether to enable security layer negotiation (TRUE for enabled, FALSE for disabled)

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_set_routing_token ( rdpNego *  nego,
BYTE RoutingToken,
DWORD  RoutingTokenLength 
)

Set routing token.

Parameters
nego
RoutingToken
RoutingTokenLength

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_set_selected_protocol ( rdpNego *  nego,
UINT32  SelectedProtocol 
)

Here is the caller graph for this function:

FREERDP_LOCAL void nego_set_send_preconnection_pdu ( rdpNego *  nego,
BOOL  SendPreconnectionPdu 
)

Enable / disable preconnection PDU.

Parameters
nego
send_pcpdu

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_set_state ( rdpNego *  nego,
NEGO_STATE  state 
)

Here is the caller graph for this function:

FREERDP_LOCAL BOOL nego_set_target ( rdpNego *  nego,
const char *  hostname,
UINT16  port 
)

Set target hostname and port.

Parameters
nego
hostname
port

Here is the caller graph for this function: