From ddedc574f3fde62f8b743b7d72d4e0c819f17e5d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Moreau?= Date: Wed, 12 Nov 2014 14:06:34 -0500 Subject: [PATCH] freerdp: remove tcp, uds utils --- include/freerdp/utils/tcp.h | 46 ----- include/freerdp/utils/uds.h | 36 ---- libfreerdp/core/gateway/rpc_client.c | 5 - libfreerdp/core/peer.c | 12 +- libfreerdp/core/tcp.c | 58 ++++++- libfreerdp/core/transport.c | 1 - libfreerdp/crypto/tls.c | 1 - libfreerdp/utils/CMakeLists.txt | 4 +- libfreerdp/utils/tcp.c | 313 ----------------------------------- libfreerdp/utils/uds.c | 81 --------- server/Sample/sfreerdp.c | 15 +- server/Windows/wf_interface.c | 12 +- 12 files changed, 77 insertions(+), 507 deletions(-) delete mode 100644 include/freerdp/utils/tcp.h delete mode 100644 include/freerdp/utils/uds.h delete mode 100644 libfreerdp/utils/tcp.c delete mode 100644 libfreerdp/utils/uds.c diff --git a/include/freerdp/utils/tcp.h b/include/freerdp/utils/tcp.h deleted file mode 100644 index 3ed2153..0000000 --- a/include/freerdp/utils/tcp.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * TCP Utils - * - * Copyright 2012 Marc-Andre Moreau - * - * 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. - */ - -#ifndef FREERDP_TCP_UTILS_H -#define FREERDP_TCP_UTILS_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -FREERDP_API int freerdp_tcp_connect(const char* hostname, int port); -FREERDP_API int freerdp_tcp_read(int sockfd, BYTE* data, int length); -FREERDP_API int freerdp_tcp_write(int sockfd, BYTE* data, int length); -FREERDP_API int freerdp_tcp_wait_read(int sockfd); -FREERDP_API int freerdp_tcp_wait_write(int sockfd); -FREERDP_API int freerdp_tcp_disconnect(int sockfd); - -FREERDP_API int freerdp_tcp_set_no_delay(int sockfd, BOOL no_delay); - -FREERDP_API int freerdp_wsa_startup(void); -FREERDP_API int freerdp_wsa_cleanup(void); - -#ifdef __cplusplus -} -#endif - -#endif /* FREERDP_TCP_UTILS_H */ diff --git a/include/freerdp/utils/uds.h b/include/freerdp/utils/uds.h deleted file mode 100644 index 2c6a747..0000000 --- a/include/freerdp/utils/uds.h +++ /dev/null @@ -1,36 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * Unix Domain Socket Utils - * - * Copyright 2012 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. - */ - -#ifndef FREERDP_UTILS_UDS_H -#define FREERDP_UTILS_UDS_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -FREERDP_API int freerdp_uds_connect(const char* path); - -#ifdef __cplusplus -} -#endif - -#endif /* FREERDP_UTILS_UDS_H */ diff --git a/libfreerdp/core/gateway/rpc_client.c b/libfreerdp/core/gateway/rpc_client.c index 9cedda0..f9271c8 100644 --- a/libfreerdp/core/gateway/rpc_client.c +++ b/libfreerdp/core/gateway/rpc_client.c @@ -21,11 +21,6 @@ #include "config.h" #endif -#include -#include -#include - -#include #include #include diff --git a/libfreerdp/core/peer.c b/libfreerdp/core/peer.c index 0d7b56f..f960255 100644 --- a/libfreerdp/core/peer.c +++ b/libfreerdp/core/peer.c @@ -22,12 +22,12 @@ #endif #include +#include #include "info.h" #include "certificate.h" #include -#include #include "peer.h" @@ -648,11 +648,19 @@ void freerdp_peer_context_free(freerdp_peer* client) freerdp_peer* freerdp_peer_new(int sockfd) { + UINT32 option_value; + socklen_t option_len; freerdp_peer* client; client = (freerdp_peer*) calloc(1, sizeof(freerdp_peer)); - freerdp_tcp_set_no_delay(sockfd, TRUE); + if (!client) + return NULL; + + option_value = TRUE; + option_len = sizeof(option_value); + + setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (void*) &option_value, option_len); if (client) { diff --git a/libfreerdp/core/tcp.c b/libfreerdp/core/tcp.c index 060f9a4..ee33310 100644 --- a/libfreerdp/core/tcp.c +++ b/libfreerdp/core/tcp.c @@ -32,7 +32,8 @@ #include #include -#ifndef _WIN32 +#if !defined(_WIN32) + #include #include #include @@ -65,11 +66,19 @@ #endif #endif +#else + +#include + +#include + +#define SHUT_RDWR SD_BOTH +#define close(_fd) closesocket(_fd) + #endif #include -#include -#include + #include #include "tcp.h" @@ -490,6 +499,38 @@ void tcp_get_mac_address(rdpTcp* tcp) mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); */ } +int uds_connect(const char* path) +{ +#ifndef _WIN32 + int status; + int sockfd; + struct sockaddr_un addr; + + sockfd = socket(AF_UNIX, SOCK_STREAM, 0); + + if (sockfd == -1) + { + WLog_ERR(TAG, "socket"); + return -1; + } + + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path, sizeof(addr.sun_path)); + status = connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)); + + if (status < 0) + { + WLog_ERR(TAG, "connect"); + close(sockfd); + return -1; + } + + return sockfd; +#else /* ifndef _WIN32 */ + return -1; +#endif +} + BOOL tcp_connect(rdpTcp* tcp, const char* hostname, int port, int timeout) { int status; @@ -504,7 +545,7 @@ BOOL tcp_connect(rdpTcp* tcp, const char* hostname, int port, int timeout) if (tcp->ipcSocket) { - tcp->sockfd = freerdp_uds_connect(hostname); + tcp->sockfd = uds_connect(hostname); if (tcp->sockfd < 0) return FALSE; @@ -685,8 +726,13 @@ BOOL tcp_connect(rdpTcp* tcp, const char* hostname, int port, int timeout) BOOL tcp_disconnect(rdpTcp* tcp) { - freerdp_tcp_disconnect(tcp->sockfd); - tcp->sockfd = -1; + if (tcp->sockfd != -1) + { + shutdown(tcp->sockfd, SHUT_RDWR); + close(tcp->sockfd); + + tcp->sockfd = -1; + } return TRUE; } diff --git a/libfreerdp/core/transport.c b/libfreerdp/core/transport.c index 7fc8d61..01f648a 100644 --- a/libfreerdp/core/transport.c +++ b/libfreerdp/core/transport.c @@ -33,7 +33,6 @@ #include #include -#include #include #include diff --git a/libfreerdp/crypto/tls.c b/libfreerdp/crypto/tls.c index 1b9d165..2252295 100644 --- a/libfreerdp/crypto/tls.c +++ b/libfreerdp/crypto/tls.c @@ -28,7 +28,6 @@ #include #include -#include #include #include diff --git a/libfreerdp/utils/CMakeLists.txt b/libfreerdp/utils/CMakeLists.txt index d7d6a69..3c4aff0 100644 --- a/libfreerdp/utils/CMakeLists.txt +++ b/libfreerdp/utils/CMakeLists.txt @@ -24,9 +24,7 @@ set(${MODULE_PREFIX}_SRCS profiler.c ringbuffer.c signal.c - stopwatch.c - tcp.c - uds.c) + stopwatch.c) if(NOT WIN32) set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} msusb.c) diff --git a/libfreerdp/utils/tcp.c b/libfreerdp/utils/tcp.c deleted file mode 100644 index a64c49c..0000000 --- a/libfreerdp/utils/tcp.c +++ /dev/null @@ -1,313 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * TCP Utils - * - * Copyright 2012 Marc-Andre Moreau - * - * 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include - -#ifndef _WIN32 - -#include -#include -#include -#include -#include -#include -#include - -#ifdef HAVE_POLL_H -#include -#else -#include -#endif - -#ifdef __APPLE__ -#ifndef TCP_KEEPIDLE -#define TCP_KEEPIDLE TCP_KEEPALIVE -#endif -#endif - -#else /* ifdef _WIN32 */ - -#include - -#include - -#define SHUT_RDWR SD_BOTH -#define close(_fd) closesocket(_fd) -#endif - -#ifndef MSG_NOSIGNAL -#define MSG_NOSIGNAL 0 - -#endif - -#define TAG FREERDP_TAG("utils") - -int freerdp_tcp_connect(const char* hostname, int port) -{ - int status; - int sockfd; - char servname[32]; - struct addrinfo hints; - struct addrinfo* ai = NULL; - struct addrinfo* res = NULL; - - ZeroMemory(&hints, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_PASSIVE; - hints.ai_protocol = 0; - hints.ai_canonname = NULL; - hints.ai_addr = NULL; - hints.ai_next = NULL; - - sprintf_s(servname, 32, "%d", port); - status = getaddrinfo(hostname, servname, &hints, &res); - - if (status != 0) - { - //WLog_ERR(TAG, "tcp_connect: getaddrinfo (%s)", gai_strerror(status)); - return -1; - } - - sockfd = -1; - - for (ai = res; ai; ai = ai->ai_next) - { - sockfd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); - - if (sockfd < 0) - continue; - - if (connect(sockfd, ai->ai_addr, ai->ai_addrlen) == 0) - { - WLog_ERR(TAG, "connected to %s:%s", hostname, servname); - break; - } - - close(sockfd); - sockfd = -1; - } - - freeaddrinfo(res); - - if (sockfd == -1) - { - WLog_ERR(TAG, "unable to connect to %s:%s", hostname, servname); - return -1; - } - - return sockfd; -} - -int freerdp_tcp_read(int sockfd, BYTE* data, int length) -{ - int status; - - status = recv(sockfd, data, length, 0); - - if (status == 0) - { - return -1; /* peer disconnected */ - } - else if (status < 0) - { -#ifdef _WIN32 - int wsa_error = WSAGetLastError(); - - /* No data available */ - if (wsa_error == WSAEWOULDBLOCK) - return 0; - - WLog_ERR(TAG, "recv() error: %d", wsa_error); -#else - /* No data available */ - if (errno == EAGAIN || errno == EWOULDBLOCK) - return 0; - - WLog_ERR(TAG, "recv"); -#endif - return -1; - } - - return status; -} - -int freerdp_tcp_write(int sockfd, BYTE* data, int length) -{ - int status; - - status = send(sockfd, data, length, MSG_NOSIGNAL); - - if (status < 0) - { -#ifdef _WIN32 - int wsa_error = WSAGetLastError(); - - /* No data available */ - if (wsa_error == WSAEWOULDBLOCK) - status = 0; - else - WLog_ERR(TAG, "send"); - -#else - if (errno == EAGAIN || errno == EWOULDBLOCK) - status = 0; - else - WLog_ERR(TAG, "send"); - -#endif - } - - return status; -} - -int freerdp_tcp_wait_read(int sockfd) -{ - int status; - -#ifdef HAVE_POLL_H - struct pollfd pollfds; -#else - fd_set fds; - struct timeval timeout; -#endif - - if (sockfd < 1) - { - WLog_ERR(TAG, "Invalid socket to watch: %d", sockfd); - return 0 ; - } - -#ifdef HAVE_POLL_H - pollfds.fd = sockfd; - pollfds.events = POLLIN; - pollfds.revents = 0; - do - { - status = poll(&pollfds, 1, 5 * 1000); - } - while ((status < 0) && (errno == EINTR)); -#else - FD_ZERO(&fds); - FD_SET(sockfd, &fds); - timeout.tv_sec = 5; - timeout.tv_usec = 0; - status = _select(sockfd+1, &fds, NULL, NULL, &timeout); -#endif - - return status > 0 ? 1 : 0; -} - -int freerdp_tcp_wait_write(int sockfd) -{ - int status; - -#ifdef HAVE_POLL_H - struct pollfd pollfds; -#else - fd_set fds; - struct timeval timeout; -#endif - - if (sockfd < 1) - { - WLog_ERR(TAG, "Invalid socket to watch: %d", sockfd); - return 0 ; - } - -#ifdef HAVE_POLL_H - pollfds.fd = sockfd; - pollfds.events = POLLOUT; - pollfds.revents = 0; - do - { - status = poll(&pollfds, 1, 5 * 1000); - } - while ((status < 0) && (errno == EINTR)); -#else - FD_ZERO(&fds); - FD_SET(sockfd, &fds); - timeout.tv_sec = 5; - timeout.tv_usec = 0; - status = _select(sockfd+1, NULL, &fds, NULL, &timeout); -#endif - - return status > 0 ? 1 : 0; -} - -int freerdp_tcp_disconnect(int sockfd) -{ - if (sockfd != -1) - { - shutdown(sockfd, SHUT_RDWR); - close(sockfd); - } - - return 0; -} - -int freerdp_tcp_set_no_delay(int sockfd, BOOL 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; -} - -int freerdp_wsa_startup() -{ -#ifdef _WIN32 - WSADATA wsaData; - return WSAStartup(0x101, &wsaData); -#else - return 0; -#endif -} - -int freerdp_wsa_cleanup() -{ -#ifdef _WIN32 - return WSACleanup(); -#else - return 0; -#endif -} diff --git a/libfreerdp/utils/uds.c b/libfreerdp/utils/uds.c deleted file mode 100644 index 9aa6258..0000000 --- a/libfreerdp/utils/uds.c +++ /dev/null @@ -1,81 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * Unix Domain Socket Utils - * - * Copyright 2012 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include -#include -#include -#include -#include -#include - -#ifndef _WIN32 - -#include -#include -#include -#include -#include -#include -#include -#include - -#endif - -#define TAG FREERDP_TAG("utils") - -int freerdp_uds_connect(const char* path) -{ -#ifndef _WIN32 - - int status; - int sockfd; - struct sockaddr_un addr; - - sockfd = socket(AF_UNIX, SOCK_STREAM, 0); - if (sockfd == -1) - { - WLog_ERR(TAG, "socket"); - return -1; - } - - addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, path, sizeof(addr.sun_path)); - status = connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)); - if (status < 0) - { - WLog_ERR(TAG, "connect"); - close(sockfd); - return -1; - } - - return sockfd; - -#else /* ifndef _WIN32 */ - - return -1; - -#endif -} diff --git a/server/Sample/sfreerdp.c b/server/Sample/sfreerdp.c index c39b956..405933d 100644 --- a/server/Sample/sfreerdp.c +++ b/server/Sample/sfreerdp.c @@ -22,21 +22,17 @@ #include "config.h" #endif -#include -#include -#include #include #include #include #include +#include #include #include - #include -#include #include #include "sf_audin.h" @@ -838,6 +834,7 @@ static void test_server_mainloop(freerdp_listener* instance) int main(int argc, char* argv[]) { + WSADATA wsaData; freerdp_listener* instance; WTSRegisterWtsApiFunctionTable(FreeRDP_InitWtsApi()); @@ -851,18 +848,22 @@ int main(int argc, char* argv[]) if (argc > 2 && !strcmp(argv[2], "--fast")) test_dump_rfx_realtime = FALSE; + if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) + return 0; + /* Open the server socket and start listening. */ - freerdp_wsa_startup(); + if (instance->Open(instance, NULL, 3389) && instance->OpenLocal(instance, "/tmp/tfreerdp-server.0")) { /* Entering the server main loop. In a real server the listener can be run in its own thread. */ test_server_mainloop(instance); } - freerdp_wsa_cleanup(); freerdp_listener_free(instance); + WSACleanup(); + return 0; } diff --git a/server/Windows/wf_interface.c b/server/Windows/wf_interface.c index e2ece59..5e93463 100644 --- a/server/Windows/wf_interface.c +++ b/server/Windows/wf_interface.c @@ -24,11 +24,11 @@ #include #include +#include #include #include #include -#include #include #include @@ -170,12 +170,13 @@ BOOL wfreerdp_server_stop(wfServer* server) wfServer* wfreerdp_server_new() { + WSADATA wsaData; wfServer* server; - server = (wfServer*) malloc(sizeof(wfServer)); - ZeroMemory(server, sizeof(wfServer)); + if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) + return NULL; - freerdp_wsa_startup(); + server = (wfServer*) calloc(1, sizeof(wfServer)); if (server) { @@ -196,10 +197,9 @@ void wfreerdp_server_free(wfServer* server) free(server); } - freerdp_wsa_cleanup(); + WSACleanup(); } - FREERDP_API BOOL wfreerdp_server_is_running(wfServer* server) { DWORD tStatus; -- 2.7.4