mirror of
https://github.com/morgan9e/FreeRDP
synced 2026-04-15 00:44:19 +09:00
Merge pull request #5706 from akallabeth/tcp_keepalive
Configurable Tcp keepalive
This commit is contained in:
@@ -880,6 +880,11 @@ typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL;
|
||||
#define FreeRDP_SupportSSHAgentChannel (5187)
|
||||
#define FreeRDP_SupportVideoOptimized (5188)
|
||||
#define FreeRDP_RDP2TCPArgs (5189)
|
||||
#define FreeRDP_TcpKeepAlive (5190)
|
||||
#define FreeRDP_TcpKeepAliveRetries (5191)
|
||||
#define FreeRDP_TcpKeepAliveDelay (5192)
|
||||
#define FreeRDP_TcpKeepAliveInterval (5193)
|
||||
#define FreeRDP_TcpAckTimeout (5194)
|
||||
|
||||
/**
|
||||
* FreeRDP Settings Data Structure
|
||||
@@ -1520,7 +1525,12 @@ struct rdp_settings
|
||||
ALIGN64 BOOL SupportSSHAgentChannel; /* 5187 */
|
||||
ALIGN64 BOOL SupportVideoOptimized; /* 5188 */
|
||||
ALIGN64 char* RDP2TCPArgs; /* 5189 */
|
||||
UINT64 padding5312[5312 - 5190]; /* 5190 */
|
||||
ALIGN64 BOOL TcpKeepAlive; /* 5190 */
|
||||
ALIGN64 UINT32 TcpKeepAliveRetries; /* 5191 */
|
||||
ALIGN64 UINT32 TcpKeepAliveDelay; /* 5192 */
|
||||
ALIGN64 UINT32 TcpKeepAliveInterval; /* 5193 */
|
||||
ALIGN64 UINT32 TcpAckTimeout; /* 5194 */
|
||||
UINT64 padding5312[5312 - 5195]; /* 5195 */
|
||||
|
||||
/**
|
||||
* WARNING: End of ABI stable zone!
|
||||
@@ -1603,52 +1613,55 @@ extern "C"
|
||||
* the functions freerdp_get_param_* and freerdp_set_param_* are deprecated.
|
||||
* use freerdp_settings_get_* and freerdp_settings_set_* as a replacement!
|
||||
*/
|
||||
FREERDP_API WINPR_DEPRECATED(BOOL freerdp_get_param_bool(rdpSettings* settings, int id));
|
||||
FREERDP_API WINPR_DEPRECATED(BOOL freerdp_get_param_bool(const rdpSettings* settings, int id));
|
||||
FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_bool(rdpSettings* settings, int id,
|
||||
BOOL param));
|
||||
|
||||
FREERDP_API WINPR_DEPRECATED(int freerdp_get_param_int(rdpSettings* settings, int id));
|
||||
FREERDP_API WINPR_DEPRECATED(int freerdp_get_param_int(const rdpSettings* settings, int id));
|
||||
FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_int(rdpSettings* settings, int id,
|
||||
int param));
|
||||
|
||||
FREERDP_API WINPR_DEPRECATED(UINT32 freerdp_get_param_uint32(rdpSettings* settings, int id));
|
||||
FREERDP_API WINPR_DEPRECATED(UINT32 freerdp_get_param_uint32(const rdpSettings* settings,
|
||||
int id));
|
||||
FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_uint32(rdpSettings* settings, int id,
|
||||
UINT32 param));
|
||||
|
||||
FREERDP_API WINPR_DEPRECATED(UINT64 freerdp_get_param_uint64(rdpSettings* settings, int id));
|
||||
FREERDP_API WINPR_DEPRECATED(UINT64 freerdp_get_param_uint64(const rdpSettings* settings,
|
||||
int id));
|
||||
FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_uint64(rdpSettings* settings, int id,
|
||||
UINT64 param));
|
||||
|
||||
FREERDP_API WINPR_DEPRECATED(char* freerdp_get_param_string(rdpSettings* settings, int id));
|
||||
FREERDP_API WINPR_DEPRECATED(char* freerdp_get_param_string(const rdpSettings* settings,
|
||||
int id));
|
||||
FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_string(rdpSettings* settings, int id,
|
||||
const char* param));
|
||||
|
||||
FREERDP_API BOOL freerdp_settings_get_bool(rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL param);
|
||||
|
||||
FREERDP_API INT16 freerdp_settings_get_int16(rdpSettings* settings, size_t id);
|
||||
FREERDP_API INT16 freerdp_settings_get_int16(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_int16(rdpSettings* settings, size_t id, INT16 param);
|
||||
|
||||
FREERDP_API UINT16 freerdp_settings_get_uint16(rdpSettings* settings, size_t id);
|
||||
FREERDP_API UINT16 freerdp_settings_get_uint16(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_uint16(rdpSettings* settings, size_t id, UINT16 param);
|
||||
|
||||
FREERDP_API INT32 freerdp_settings_get_int32(rdpSettings* settings, size_t id);
|
||||
FREERDP_API INT32 freerdp_settings_get_int32(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_int32(rdpSettings* settings, size_t id, INT32 param);
|
||||
|
||||
FREERDP_API UINT32 freerdp_settings_get_uint32(rdpSettings* settings, size_t id);
|
||||
FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings* settings, size_t id, UINT32 param);
|
||||
|
||||
FREERDP_API INT64 freerdp_settings_get_int64(rdpSettings* settings, size_t id);
|
||||
FREERDP_API INT64 freerdp_settings_get_int64(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_int64(rdpSettings* settings, size_t id, INT64 param);
|
||||
|
||||
FREERDP_API UINT64 freerdp_settings_get_uint64(rdpSettings* settings, size_t id);
|
||||
FREERDP_API UINT64 freerdp_settings_get_uint64(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_uint64(rdpSettings* settings, size_t id, UINT64 param);
|
||||
|
||||
FREERDP_API const char* freerdp_settings_get_string(rdpSettings* settings, size_t id);
|
||||
FREERDP_API const char* freerdp_settings_get_string(const rdpSettings* settings, size_t id);
|
||||
FREERDP_API BOOL freerdp_settings_set_string(rdpSettings* settings, size_t id,
|
||||
const char* param);
|
||||
|
||||
FREERDP_API const void* freerdp_settings_get_pointer(rdpSettings* settings, size_t id);
|
||||
FREERDP_API const void* freerdp_settings_get_pointer(const rdpSettings* settings, size_t id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -755,7 +755,7 @@ void freerdp_update_gateway_usage_method(rdpSettings* settings, UINT32 GatewayEn
|
||||
freerdp_set_gateway_usage_method(settings, GatewayUsageMethod);
|
||||
}
|
||||
|
||||
BOOL freerdp_get_param_bool(rdpSettings* settings, int id)
|
||||
BOOL freerdp_get_param_bool(const rdpSettings* settings, int id)
|
||||
{
|
||||
return freerdp_settings_get_bool(settings, (size_t)id);
|
||||
}
|
||||
@@ -765,7 +765,7 @@ int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param)
|
||||
return freerdp_settings_set_bool(settings, (size_t)id, param) ? 0 : -1;
|
||||
}
|
||||
|
||||
int freerdp_get_param_int(rdpSettings* settings, int id)
|
||||
int freerdp_get_param_int(const rdpSettings* settings, int id)
|
||||
{
|
||||
return freerdp_settings_get_int32(settings, (size_t)id);
|
||||
}
|
||||
@@ -775,7 +775,7 @@ int freerdp_set_param_int(rdpSettings* settings, int id, int param)
|
||||
return freerdp_settings_set_int32(settings, (size_t)id, param) ? 0 : -1;
|
||||
}
|
||||
|
||||
UINT32 freerdp_get_param_uint32(rdpSettings* settings, int id)
|
||||
UINT32 freerdp_get_param_uint32(const rdpSettings* settings, int id)
|
||||
{
|
||||
return freerdp_settings_get_uint32(settings, (size_t)id);
|
||||
}
|
||||
@@ -785,7 +785,7 @@ int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param)
|
||||
return freerdp_settings_set_uint32(settings, (size_t)id, param) ? 0 : -1;
|
||||
}
|
||||
|
||||
UINT64 freerdp_get_param_uint64(rdpSettings* settings, int id)
|
||||
UINT64 freerdp_get_param_uint64(const rdpSettings* settings, int id)
|
||||
{
|
||||
return freerdp_settings_get_uint64(settings, (size_t)id);
|
||||
}
|
||||
@@ -795,7 +795,7 @@ int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param)
|
||||
return freerdp_settings_set_uint64(settings, (size_t)id, param) ? 0 : -1;
|
||||
}
|
||||
|
||||
char* freerdp_get_param_string(rdpSettings* settings, int id)
|
||||
char* freerdp_get_param_string(const rdpSettings* settings, int id)
|
||||
{
|
||||
return (char*)freerdp_settings_get_string(settings, (size_t)id);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
#define TAG FREERDP_TAG("common.settings")
|
||||
|
||||
BOOL freerdp_settings_get_bool(rdpSettings* settings, size_t id)
|
||||
BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -495,6 +495,9 @@ BOOL freerdp_settings_get_bool(rdpSettings* settings, size_t id)
|
||||
case FreeRDP_SupportVideoOptimized:
|
||||
return settings->SupportVideoOptimized;
|
||||
|
||||
case FreeRDP_TcpKeepAlive:
|
||||
return settings->TcpKeepAlive;
|
||||
|
||||
default:
|
||||
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
|
||||
return FALSE;
|
||||
@@ -1152,6 +1155,10 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL val)
|
||||
settings->SupportVideoOptimized = val;
|
||||
break;
|
||||
|
||||
case FreeRDP_TcpKeepAlive:
|
||||
settings->TcpKeepAlive = val;
|
||||
break;
|
||||
|
||||
default:
|
||||
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
|
||||
return FALSE;
|
||||
@@ -1159,7 +1166,7 @@ BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL val)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
UINT16 freerdp_settings_get_uint16(rdpSettings* settings, size_t id)
|
||||
UINT16 freerdp_settings_get_uint16(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -1200,7 +1207,7 @@ BOOL freerdp_settings_set_uint16(rdpSettings* settings, size_t id, UINT16 val)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
INT16 freerdp_settings_get_int16(rdpSettings* settings, size_t id)
|
||||
INT16 freerdp_settings_get_int16(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -1227,7 +1234,7 @@ BOOL freerdp_settings_set_int16(rdpSettings* settings, size_t id, INT16 val)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
UINT32 freerdp_settings_get_uint32(rdpSettings* settings, size_t id)
|
||||
UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -1552,6 +1559,18 @@ UINT32 freerdp_settings_get_uint32(rdpSettings* settings, size_t id)
|
||||
case FreeRDP_DynamicChannelArraySize:
|
||||
return settings->DynamicChannelArraySize;
|
||||
|
||||
case FreeRDP_TcpKeepAliveRetries:
|
||||
return settings->TcpKeepAliveRetries;
|
||||
|
||||
case FreeRDP_TcpKeepAliveDelay:
|
||||
return settings->TcpKeepAliveDelay;
|
||||
|
||||
case FreeRDP_TcpKeepAliveInterval:
|
||||
return settings->TcpKeepAliveInterval;
|
||||
|
||||
case FreeRDP_TcpAckTimeout:
|
||||
return settings->TcpAckTimeout;
|
||||
|
||||
default:
|
||||
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
|
||||
return FALSE;
|
||||
@@ -1989,6 +2008,22 @@ BOOL freerdp_settings_set_uint32(rdpSettings* settings, size_t id, UINT32 val)
|
||||
settings->DynamicChannelArraySize = val;
|
||||
break;
|
||||
|
||||
case FreeRDP_TcpKeepAliveRetries:
|
||||
settings->TcpKeepAliveRetries = val;
|
||||
break;
|
||||
|
||||
case FreeRDP_TcpKeepAliveDelay:
|
||||
settings->TcpKeepAliveDelay = val;
|
||||
break;
|
||||
|
||||
case FreeRDP_TcpKeepAliveInterval:
|
||||
settings->TcpKeepAliveInterval = val;
|
||||
break;
|
||||
|
||||
case FreeRDP_TcpAckTimeout:
|
||||
settings->TcpAckTimeout = val;
|
||||
break;
|
||||
|
||||
default:
|
||||
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
|
||||
return FALSE;
|
||||
@@ -1996,7 +2031,7 @@ BOOL freerdp_settings_set_uint32(rdpSettings* settings, size_t id, UINT32 val)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
INT32 freerdp_settings_get_int32(rdpSettings* settings, size_t id)
|
||||
INT32 freerdp_settings_get_int32(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -2037,7 +2072,7 @@ BOOL freerdp_settings_set_int32(rdpSettings* settings, size_t id, INT32 val)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
UINT64 freerdp_settings_get_uint64(rdpSettings* settings, size_t id)
|
||||
UINT64 freerdp_settings_get_uint64(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -2071,7 +2106,7 @@ BOOL freerdp_settings_set_uint64(rdpSettings* settings, size_t id, UINT64 val)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
INT64 freerdp_settings_get_int64(rdpSettings* settings, size_t id)
|
||||
INT64 freerdp_settings_get_int64(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -2098,7 +2133,7 @@ BOOL freerdp_settings_set_int64(rdpSettings* settings, size_t id, INT64 val)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const char* freerdp_settings_get_string(rdpSettings* settings, size_t id)
|
||||
const char* freerdp_settings_get_string(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -2645,7 +2680,7 @@ BOOL freerdp_settings_set_string(rdpSettings* settings, size_t id, const char* v
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
const void* freerdp_settings_get_pointer(rdpSettings* settings, size_t id)
|
||||
const void* freerdp_settings_get_pointer(const rdpSettings* settings, size_t id)
|
||||
{
|
||||
if (!settings)
|
||||
return FALSE;
|
||||
@@ -2655,54 +2690,6 @@ const void* freerdp_settings_get_pointer(rdpSettings* settings, size_t id)
|
||||
case FreeRDP_instance:
|
||||
return settings->instance;
|
||||
|
||||
case FreeRDP_RdpServerCertificate:
|
||||
return settings->RdpServerCertificate;
|
||||
|
||||
case FreeRDP_ServerAutoReconnectCookie:
|
||||
return settings->ServerAutoReconnectCookie;
|
||||
|
||||
case FreeRDP_BitmapCacheV2CellInfo:
|
||||
return settings->BitmapCacheV2CellInfo;
|
||||
|
||||
case FreeRDP_RdpServerRsaKey:
|
||||
return settings->RdpServerRsaKey;
|
||||
|
||||
case FreeRDP_MonitorIds:
|
||||
return settings->MonitorIds;
|
||||
|
||||
case FreeRDP_TargetNetPorts:
|
||||
return settings->TargetNetPorts;
|
||||
|
||||
case FreeRDP_MonitorDefArray:
|
||||
return settings->MonitorDefArray;
|
||||
|
||||
case FreeRDP_ChannelDefArray:
|
||||
return settings->ChannelDefArray;
|
||||
|
||||
case FreeRDP_ClientAutoReconnectCookie:
|
||||
return settings->ClientAutoReconnectCookie;
|
||||
|
||||
case FreeRDP_TargetNetAddresses:
|
||||
return settings->TargetNetAddresses;
|
||||
|
||||
case FreeRDP_StaticChannelArray:
|
||||
return settings->StaticChannelArray;
|
||||
|
||||
case FreeRDP_DynamicChannelArray:
|
||||
return settings->DynamicChannelArray;
|
||||
|
||||
case FreeRDP_DeviceArray:
|
||||
return settings->DeviceArray;
|
||||
|
||||
case FreeRDP_GlyphCache:
|
||||
return settings->GlyphCache;
|
||||
|
||||
case FreeRDP_FragCache:
|
||||
return settings->FragCache;
|
||||
|
||||
case FreeRDP_ClientTimeZone:
|
||||
return settings->ClientTimeZone;
|
||||
|
||||
case FreeRDP_ServerRandom:
|
||||
return settings->ServerRandom;
|
||||
|
||||
@@ -2730,6 +2717,54 @@ const void* freerdp_settings_get_pointer(rdpSettings* settings, size_t id)
|
||||
case FreeRDP_OrderSupport:
|
||||
return settings->OrderSupport;
|
||||
|
||||
case FreeRDP_ChannelDefArray:
|
||||
return settings->ChannelDefArray;
|
||||
|
||||
case FreeRDP_MonitorDefArray:
|
||||
return settings->MonitorDefArray;
|
||||
|
||||
case FreeRDP_MonitorIds:
|
||||
return settings->MonitorIds;
|
||||
|
||||
case FreeRDP_TargetNetPorts:
|
||||
return settings->TargetNetPorts;
|
||||
|
||||
case FreeRDP_ClientAutoReconnectCookie:
|
||||
return settings->ClientAutoReconnectCookie;
|
||||
|
||||
case FreeRDP_ServerAutoReconnectCookie:
|
||||
return settings->ServerAutoReconnectCookie;
|
||||
|
||||
case FreeRDP_ClientTimeZone:
|
||||
return settings->ClientTimeZone;
|
||||
|
||||
case FreeRDP_TargetNetAddresses:
|
||||
return settings->TargetNetAddresses;
|
||||
|
||||
case FreeRDP_RdpServerRsaKey:
|
||||
return settings->RdpServerRsaKey;
|
||||
|
||||
case FreeRDP_RdpServerCertificate:
|
||||
return settings->RdpServerCertificate;
|
||||
|
||||
case FreeRDP_BitmapCacheV2CellInfo:
|
||||
return settings->BitmapCacheV2CellInfo;
|
||||
|
||||
case FreeRDP_GlyphCache:
|
||||
return settings->GlyphCache;
|
||||
|
||||
case FreeRDP_FragCache:
|
||||
return settings->FragCache;
|
||||
|
||||
case FreeRDP_DeviceArray:
|
||||
return settings->DeviceArray;
|
||||
|
||||
case FreeRDP_StaticChannelArray:
|
||||
return settings->StaticChannelArray;
|
||||
|
||||
case FreeRDP_DynamicChannelArray:
|
||||
return settings->DynamicChannelArray;
|
||||
|
||||
default:
|
||||
WLog_ERR(TAG, "[%s] Invalid key index %" PRIuz, __FUNCTION__, id);
|
||||
return FALSE;
|
||||
|
||||
@@ -559,6 +559,12 @@ rdpSettings* freerdp_settings_new(DWORD flags)
|
||||
if (!settings->DynamicChannelArray)
|
||||
goto out_fail;
|
||||
|
||||
settings->TcpKeepAlive = TRUE;
|
||||
settings->TcpKeepAliveRetries = 3;
|
||||
settings->TcpKeepAliveDelay = 5;
|
||||
settings->TcpKeepAliveInterval = 2;
|
||||
settings->TcpAckTimeout = 9000;
|
||||
|
||||
if (!settings->ServerMode)
|
||||
{
|
||||
settings->RedirectClipboard = TRUE;
|
||||
|
||||
@@ -100,8 +100,8 @@ typedef struct _WINPR_BIO_SIMPLE_SOCKET WINPR_BIO_SIMPLE_SOCKET;
|
||||
static int transport_bio_simple_init(BIO* bio, SOCKET socket, int shutdown);
|
||||
static int transport_bio_simple_uninit(BIO* bio);
|
||||
|
||||
long transport_bio_simple_callback(BIO* bio, int mode, const char* argp, int argi, long argl,
|
||||
long ret)
|
||||
static long transport_bio_simple_callback(BIO* bio, int mode, const char* argp, int argi, long argl,
|
||||
long ret)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@@ -459,8 +459,8 @@ struct _WINPR_BIO_BUFFERED_SOCKET
|
||||
};
|
||||
typedef struct _WINPR_BIO_BUFFERED_SOCKET WINPR_BIO_BUFFERED_SOCKET;
|
||||
|
||||
long transport_bio_buffered_callback(BIO* bio, int mode, const char* argp, int argi, long argl,
|
||||
long ret)
|
||||
static long transport_bio_buffered_callback(BIO* bio, int mode, const char* argp, int argi,
|
||||
long argl, long ret)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@@ -991,12 +991,12 @@ static int freerdp_tcp_connect_multi(rdpContext* context, char** hostnames, UINT
|
||||
return sockfd;
|
||||
}
|
||||
|
||||
BOOL freerdp_tcp_set_keep_alive_mode(int sockfd)
|
||||
static BOOL freerdp_tcp_set_keep_alive_mode(const rdpSettings* settings, int sockfd)
|
||||
{
|
||||
#ifndef _WIN32
|
||||
const BOOL keepalive = (freerdp_settings_get_bool(settings, FreeRDP_TcpKeepAlive));
|
||||
UINT32 optval;
|
||||
socklen_t optlen;
|
||||
optval = 1;
|
||||
optval = keepalive ? 1 : 0;
|
||||
optlen = sizeof(optval);
|
||||
|
||||
if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, (void*)&optval, optlen) < 0)
|
||||
@@ -1004,8 +1004,9 @@ BOOL freerdp_tcp_set_keep_alive_mode(int sockfd)
|
||||
WLog_WARN(TAG, "setsockopt() SOL_SOCKET, SO_KEEPALIVE");
|
||||
}
|
||||
|
||||
#ifndef _WIN32
|
||||
#ifdef TCP_KEEPIDLE
|
||||
optval = 5;
|
||||
optval = keepalive ? freerdp_settings_get_uint32(settings, FreeRDP_TcpKeepAliveDelay) : 0;
|
||||
optlen = sizeof(optval);
|
||||
|
||||
if (setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, (void*)&optval, optlen) < 0)
|
||||
@@ -1019,7 +1020,7 @@ BOOL freerdp_tcp_set_keep_alive_mode(int sockfd)
|
||||
#define SOL_TCP 6
|
||||
#endif
|
||||
#ifdef TCP_KEEPCNT
|
||||
optval = 3;
|
||||
optval = keepalive ? freerdp_settings_get_uint32(settings, FreeRDP_TcpKeepAliveRetries) : 0;
|
||||
optlen = sizeof(optval);
|
||||
|
||||
if (setsockopt(sockfd, SOL_TCP, TCP_KEEPCNT, (void*)&optval, optlen) < 0)
|
||||
@@ -1029,7 +1030,7 @@ BOOL freerdp_tcp_set_keep_alive_mode(int sockfd)
|
||||
|
||||
#endif
|
||||
#ifdef TCP_KEEPINTVL
|
||||
optval = 2;
|
||||
optval = keepalive ? freerdp_settings_get_uint32(settings, FreeRDP_TcpKeepAliveInterval) : 0;
|
||||
optlen = sizeof(optval);
|
||||
|
||||
if (setsockopt(sockfd, SOL_TCP, TCP_KEEPINTVL, (void*)&optval, optlen) < 0)
|
||||
@@ -1050,7 +1051,7 @@ BOOL freerdp_tcp_set_keep_alive_mode(int sockfd)
|
||||
|
||||
#endif
|
||||
#ifdef TCP_USER_TIMEOUT
|
||||
optval = 9000;
|
||||
optval = freerdp_settings_get_uint32(settings, FreeRDP_TcpAckTimeout);
|
||||
optlen = sizeof(optval);
|
||||
|
||||
if (setsockopt(sockfd, SOL_TCP, TCP_USER_TIMEOUT, (void*)&optval, optlen) < 0)
|
||||
@@ -1231,7 +1232,7 @@ int freerdp_tcp_connect(rdpContext* context, rdpSettings* settings, const char*
|
||||
|
||||
if (!ipcSocket && !useExternalDefinedSocket)
|
||||
{
|
||||
if (!freerdp_tcp_set_keep_alive_mode(sockfd))
|
||||
if (!freerdp_tcp_set_keep_alive_mode(settings, sockfd))
|
||||
{
|
||||
close(sockfd);
|
||||
|
||||
|
||||
@@ -164,6 +164,7 @@ static const size_t bool_list_indices[] = {
|
||||
FreeRDP_SupportGeometryTracking,
|
||||
FreeRDP_SupportSSHAgentChannel,
|
||||
FreeRDP_SupportVideoOptimized,
|
||||
FreeRDP_TcpKeepAlive,
|
||||
};
|
||||
|
||||
#define have_uint16_list_indices
|
||||
@@ -280,6 +281,10 @@ static const size_t uint32_list_indices[] = {
|
||||
FreeRDP_StaticChannelArraySize,
|
||||
FreeRDP_DynamicChannelCount,
|
||||
FreeRDP_DynamicChannelArraySize,
|
||||
FreeRDP_TcpKeepAliveRetries,
|
||||
FreeRDP_TcpKeepAliveDelay,
|
||||
FreeRDP_TcpKeepAliveInterval,
|
||||
FreeRDP_TcpAckTimeout,
|
||||
};
|
||||
|
||||
#define have_int32_list_indices
|
||||
@@ -364,18 +369,7 @@ static const size_t string_list_indices[] = {
|
||||
|
||||
#define have_pointer_list_indices
|
||||
static const size_t pointer_list_indices[] = {
|
||||
FreeRDP_StaticChannelArray,
|
||||
FreeRDP_DynamicChannelArray,
|
||||
FreeRDP_instance,
|
||||
FreeRDP_RdpServerCertificate,
|
||||
FreeRDP_MonitorIds,
|
||||
FreeRDP_TargetNetPorts,
|
||||
FreeRDP_DeviceArray,
|
||||
FreeRDP_ClientAutoReconnectCookie,
|
||||
FreeRDP_TargetNetAddresses,
|
||||
FreeRDP_MonitorDefArray,
|
||||
FreeRDP_BitmapCacheV2CellInfo,
|
||||
FreeRDP_ServerAutoReconnectCookie,
|
||||
FreeRDP_ServerRandom,
|
||||
FreeRDP_ServerCertificate,
|
||||
FreeRDP_ClientRandom,
|
||||
@@ -385,11 +379,22 @@ static const size_t pointer_list_indices[] = {
|
||||
FreeRDP_Password51,
|
||||
FreeRDP_ReceivedCapabilities,
|
||||
FreeRDP_OrderSupport,
|
||||
FreeRDP_ChannelDefArray,
|
||||
FreeRDP_MonitorDefArray,
|
||||
FreeRDP_MonitorIds,
|
||||
FreeRDP_TargetNetPorts,
|
||||
FreeRDP_ClientAutoReconnectCookie,
|
||||
FreeRDP_ServerAutoReconnectCookie,
|
||||
FreeRDP_ClientTimeZone,
|
||||
FreeRDP_TargetNetAddresses,
|
||||
FreeRDP_RdpServerRsaKey,
|
||||
FreeRDP_RdpServerCertificate,
|
||||
FreeRDP_BitmapCacheV2CellInfo,
|
||||
FreeRDP_GlyphCache,
|
||||
FreeRDP_FragCache,
|
||||
FreeRDP_ClientTimeZone,
|
||||
FreeRDP_ChannelDefArray,
|
||||
FreeRDP_DeviceArray,
|
||||
FreeRDP_StaticChannelArray,
|
||||
FreeRDP_DynamicChannelArray,
|
||||
};
|
||||
|
||||
#endif /* TEST_SETTINGS_PROPERTY_LISTS */
|
||||
|
||||
@@ -5,11 +5,11 @@ import sys
|
||||
def get_values(entry_dict, entry_type):
|
||||
values = []
|
||||
if '*' == entry_type:
|
||||
for key in entry_dict.keys():
|
||||
for key in list(entry_dict.keys()):
|
||||
if entry_type in key:
|
||||
values += entry_dict[key]
|
||||
entry_dict.pop(key, None)
|
||||
elif entry_type in entry_dict:
|
||||
elif entry_type in dict(entry_dict):
|
||||
values = entry_dict[entry_type]
|
||||
entry_dict.pop(entry_type, None)
|
||||
return values
|
||||
@@ -43,7 +43,7 @@ def write_getter(f, entry_dict, entry_type, entry_name):
|
||||
f.write('const ' + entry_type)
|
||||
else:
|
||||
f.write(entry_type)
|
||||
f.write(' freerdp_settings_get_' + entry_name.lower() + '(rdpSettings* settings, size_t id)\n')
|
||||
f.write(' freerdp_settings_get_' + entry_name.lower() + '(const rdpSettings* settings, size_t id)\n')
|
||||
f.write('{\n')
|
||||
f.write('\tif (!settings)\n')
|
||||
f.write('\t\treturn FALSE;\n\n')
|
||||
@@ -103,7 +103,7 @@ print('begin parsing settings header')
|
||||
try:
|
||||
type_list = dict()
|
||||
|
||||
with open(name + "/../include/freerdp/settings.h", "rb") as f:
|
||||
with open(name + "/../include/freerdp/settings.h", "r") as f:
|
||||
lines = f.readlines()
|
||||
started = False
|
||||
for line in lines:
|
||||
|
||||
Reference in New Issue
Block a user