mirror of https://github.com/FreeRDP/FreeRDP
xfreerdp-server: set TCP_NODELAY
This commit is contained in:
parent
0f54e1c778
commit
4d665b116d
|
@ -29,4 +29,6 @@ FREERDP_API int freerdp_tcp_read(int sockfd, uint8* data, int length);
|
|||
FREERDP_API int freerdp_tcp_write(int sockfd, uint8* data, int length);
|
||||
FREERDP_API int freerdp_tcp_disconnect(int sockfd);
|
||||
|
||||
FREERDP_API int freerdp_tcp_set_no_delay(int sockfd, boolean no_delay);
|
||||
|
||||
#endif /* FREERDP_TCP_UTILS_H */
|
||||
|
|
|
@ -153,13 +153,13 @@ static boolean freerdp_listener_get_fds(freerdp_listener* instance, void** rfds,
|
|||
|
||||
static boolean freerdp_listener_check_fds(freerdp_listener* instance)
|
||||
{
|
||||
rdpListener* listener = (rdpListener*)instance->listener;
|
||||
struct sockaddr_storage peer_addr;
|
||||
socklen_t peer_addr_size;
|
||||
int peer_sockfd;
|
||||
int i;
|
||||
freerdp_peer* client;
|
||||
void* sin_addr;
|
||||
int peer_sockfd;
|
||||
freerdp_peer* client;
|
||||
socklen_t peer_addr_size;
|
||||
struct sockaddr_storage peer_addr;
|
||||
rdpListener* listener = (rdpListener*) instance->listener;
|
||||
|
||||
if (listener->num_sockfds < 1)
|
||||
return false;
|
||||
|
@ -167,7 +167,7 @@ static boolean freerdp_listener_check_fds(freerdp_listener* instance)
|
|||
for (i = 0; i < listener->num_sockfds; i++)
|
||||
{
|
||||
peer_addr_size = sizeof(peer_addr);
|
||||
peer_sockfd = accept(listener->sockfds[i], (struct sockaddr *)&peer_addr, &peer_addr_size);
|
||||
peer_sockfd = accept(listener->sockfds[i], (struct sockaddr*) &peer_addr, &peer_addr_size);
|
||||
|
||||
if (peer_sockfd == -1)
|
||||
{
|
||||
|
@ -188,9 +188,10 @@ static boolean freerdp_listener_check_fds(freerdp_listener* instance)
|
|||
client = freerdp_peer_new(peer_sockfd);
|
||||
|
||||
if (peer_addr.ss_family == AF_INET)
|
||||
sin_addr = &(((struct sockaddr_in*)&peer_addr)->sin_addr);
|
||||
sin_addr = &(((struct sockaddr_in*) &peer_addr)->sin_addr);
|
||||
else
|
||||
sin_addr = &(((struct sockaddr_in6*)&peer_addr)->sin6_addr);
|
||||
sin_addr = &(((struct sockaddr_in6*) &peer_addr)->sin6_addr);
|
||||
|
||||
inet_ntop(peer_addr.ss_family, sin_addr, client->hostname, sizeof(client->hostname));
|
||||
|
||||
IFCALL(instance->PeerAccepted, instance, client);
|
||||
|
@ -213,7 +214,7 @@ freerdp_listener* freerdp_listener_new(void)
|
|||
listener = xnew(rdpListener);
|
||||
listener->instance = instance;
|
||||
|
||||
instance->listener = (void*)listener;
|
||||
instance->listener = (void*) listener;
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
@ -222,7 +223,7 @@ void freerdp_listener_free(freerdp_listener* instance)
|
|||
{
|
||||
rdpListener* listener;
|
||||
|
||||
listener = (rdpListener*)instance->listener;
|
||||
listener = (rdpListener*) instance->listener;
|
||||
xfree(listener);
|
||||
|
||||
xfree(instance);
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
|
||||
#include "certificate.h"
|
||||
#include <freerdp/utils/tcp.h>
|
||||
|
||||
#include "peer.h"
|
||||
|
||||
|
@ -25,7 +26,9 @@ static boolean freerdp_peer_initialize(freerdp_peer* client)
|
|||
{
|
||||
client->context->rdp->settings->server_mode = true;
|
||||
client->context->rdp->state = CONNECTION_STATE_INITIAL;
|
||||
if (client->context->rdp->settings->rdp_key_file != NULL) {
|
||||
|
||||
if (client->context->rdp->settings->rdp_key_file != NULL)
|
||||
{
|
||||
client->context->rdp->settings->server_key =
|
||||
key_new(client->context->rdp->settings->rdp_key_file);
|
||||
}
|
||||
|
@ -43,12 +46,13 @@ static boolean freerdp_peer_get_fds(freerdp_peer* client, void** rfds, int* rcou
|
|||
|
||||
static boolean freerdp_peer_check_fds(freerdp_peer* client)
|
||||
{
|
||||
rdpRdp* rdp;
|
||||
int status;
|
||||
rdpRdp* rdp;
|
||||
|
||||
rdp = client->context->rdp;
|
||||
|
||||
status = rdp_check_fds(rdp);
|
||||
|
||||
if (status < 0)
|
||||
return false;
|
||||
|
||||
|
@ -63,7 +67,6 @@ static boolean peer_recv_data_pdu(freerdp_peer* client, STREAM* s)
|
|||
uint8 compressed_type;
|
||||
uint16 compressed_len;
|
||||
|
||||
|
||||
if (!rdp_read_share_data_header(s, &length, &type, &share_id, &compressed_type, &compressed_len))
|
||||
return false;
|
||||
|
||||
|
@ -89,8 +92,10 @@ static boolean peer_recv_data_pdu(freerdp_peer* client, STREAM* s)
|
|||
break;
|
||||
|
||||
case DATA_PDU_TYPE_FONT_LIST:
|
||||
|
||||
if (!rdp_server_accept_client_font_list_pdu(client->context->rdp, s))
|
||||
return false;
|
||||
|
||||
if (client->PostConnect)
|
||||
{
|
||||
if (!client->PostConnect(client))
|
||||
|
@ -101,12 +106,14 @@ static boolean peer_recv_data_pdu(freerdp_peer* client, STREAM* s)
|
|||
*/
|
||||
client->PostConnect = NULL;
|
||||
}
|
||||
|
||||
if (client->Activate)
|
||||
{
|
||||
/* Activate will be called everytime after the client is activated/reactivated. */
|
||||
if (!client->Activate(client))
|
||||
return false;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case DATA_PDU_TYPE_SHUTDOWN_REQUEST:
|
||||
|
@ -123,7 +130,7 @@ static boolean peer_recv_data_pdu(freerdp_peer* client, STREAM* s)
|
|||
|
||||
static boolean peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
|
||||
{
|
||||
rdpRdp *rdp;
|
||||
rdpRdp* rdp;
|
||||
uint16 length;
|
||||
uint16 pduType;
|
||||
uint16 pduLength;
|
||||
|
@ -142,6 +149,7 @@ static boolean peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
|
|||
if (rdp->settings->encryption)
|
||||
{
|
||||
rdp_read_security_header(s, &securityFlags);
|
||||
|
||||
if (securityFlags & SEC_ENCRYPT)
|
||||
{
|
||||
if (!rdp_decrypt(rdp, s, length - 4, securityFlags))
|
||||
|
@ -181,8 +189,8 @@ static boolean peer_recv_tpkt_pdu(freerdp_peer* client, STREAM* s)
|
|||
|
||||
static boolean peer_recv_fastpath_pdu(freerdp_peer* client, STREAM* s)
|
||||
{
|
||||
uint16 length;
|
||||
rdpRdp* rdp;
|
||||
uint16 length;
|
||||
rdpFastPath* fastpath;
|
||||
|
||||
rdp = client->context->rdp;
|
||||
|
@ -254,7 +262,9 @@ static boolean peer_recv_callback(rdpTransport* transport, STREAM* s, void* extr
|
|||
case CONNECTION_STATE_ESTABLISH_KEYS:
|
||||
if (!rdp_server_accept_client_info(client->context->rdp, s))
|
||||
return false;
|
||||
|
||||
IFCALL(client->Capabilities, client);
|
||||
|
||||
if (!rdp_send_demand_active(client->context->rdp))
|
||||
return false;
|
||||
break;
|
||||
|
@ -332,6 +342,8 @@ freerdp_peer* freerdp_peer_new(int sockfd)
|
|||
|
||||
client = xnew(freerdp_peer);
|
||||
|
||||
freerdp_tcp_set_no_delay(sockfd, true);
|
||||
|
||||
if (client != NULL)
|
||||
{
|
||||
client->sockfd = sockfd;
|
||||
|
@ -354,4 +366,3 @@ void freerdp_peer_free(freerdp_peer* client)
|
|||
xfree(client);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -171,3 +171,16 @@ int freerdp_tcp_disconnect(int sockfd)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int freerdp_tcp_set_no_delay(int sockfd, boolean no_delay)
|
||||
{
|
||||
uint32 option_value;
|
||||
socklen_t option_len;
|
||||
|
||||
option_value = no_delay;
|
||||
option_len = sizeof(option_value);
|
||||
|
||||
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (void*) &option_value, option_len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -44,11 +44,15 @@ void xf_input_keyboard_event(rdpInput* input, uint16 flags, uint16 code)
|
|||
#ifdef WITH_XTEST
|
||||
pthread_mutex_lock(&(xfp->mutex));
|
||||
|
||||
XTestGrabControl(xfi->display, True);
|
||||
|
||||
if (flags & KBD_FLAGS_DOWN)
|
||||
XTestFakeKeyEvent(xfi->display, keycode, True, 0);
|
||||
else if (flags & KBD_FLAGS_RELEASE)
|
||||
XTestFakeKeyEvent(xfi->display, keycode, False, 0);
|
||||
|
||||
XTestGrabControl(xfi->display, False);
|
||||
|
||||
pthread_mutex_unlock(&(xfp->mutex));
|
||||
#endif
|
||||
}
|
||||
|
@ -68,6 +72,7 @@ void xf_input_mouse_event(rdpInput* input, uint16 flags, uint16 x, uint16 y)
|
|||
|
||||
pthread_mutex_lock(&(xfp->mutex));
|
||||
#ifdef WITH_XTEST
|
||||
XTestGrabControl(xfi->display, True);
|
||||
|
||||
if (flags & PTR_FLAGS_WHEEL)
|
||||
{
|
||||
|
@ -99,6 +104,8 @@ void xf_input_mouse_event(rdpInput* input, uint16 flags, uint16 x, uint16 y)
|
|||
if (button != 0)
|
||||
XTestFakeButtonEvent(xfi->display, button, down, 0);
|
||||
}
|
||||
|
||||
XTestGrabControl(xfi->display, False);
|
||||
#endif
|
||||
pthread_mutex_unlock(&(xfp->mutex));
|
||||
}
|
||||
|
@ -110,7 +117,9 @@ void xf_input_extended_mouse_event(rdpInput* input, uint16 flags, uint16 x, uint
|
|||
|
||||
pthread_mutex_lock(&(xfp->mutex));
|
||||
#ifdef WITH_XTEST
|
||||
XTestGrabControl(xfi->display, True);
|
||||
XTestFakeMotionEvent(xfi->display, 0, x, y, CurrentTime);
|
||||
XTestGrabControl(xfi->display, False);
|
||||
#endif
|
||||
pthread_mutex_unlock(&(xfp->mutex));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue