diff options
author | 2016-03-13 13:54:57 +1100 | |
---|---|---|
committer | 2016-03-14 18:55:00 +1100 | |
commit | 42fbb9c3967fcda37f2d9ae17d5796a79cf027b9 (patch) | |
tree | a43047ee00431e5e22bfc5f8f612ff775586e415 /src/osd/windows/winsocket.cpp | |
parent | 5fc27747031b6ed6f6c0582502098ebfb960be67 (diff) |
Make osd_file a polymorphic class that's held with smart pointers
Make avi_file a class that's held with smart pointers, encapsulate various AVI I/O structures
Make zip_file and _7z_file classes rather than having free functions everywhere
Hide zip/7z class implementation behind an interface, no longer need to call close() to send back to the cache
Don't dump as much crap in global namespace
Add solaris PTY implementation
Improve variable expansion for SDL OSD - supports ~/$FOO/${BAR} syntax
Rearrange stuff so the same things are in file module for all OSDs
Move file stuff into its own module
7z/zip open and destruct are still not thread-safe due to lack of interlocks around cache access
Directory functions still need to be moved to file module
SDL OSD may not initialise WinSock on Windows
Diffstat (limited to 'src/osd/windows/winsocket.cpp')
-rw-r--r-- | src/osd/windows/winsocket.cpp | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/src/osd/windows/winsocket.cpp b/src/osd/windows/winsocket.cpp deleted file mode 100644 index cfa22dbbcb1..00000000000 --- a/src/osd/windows/winsocket.cpp +++ /dev/null @@ -1,204 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -//============================================================ -// -// winsocket.c - Windows socket (inet) access functions -// -//============================================================ -// standard windows headers -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#include <winioctl.h> -#include <tchar.h> -#include <stdlib.h> -#include <ctype.h> - -// MAME headers -#include "osdcore.h" - -#include "winfile.h" - -const char *winfile_socket_identifier = "socket."; - -bool win_init_sockets() -{ - WSADATA wsaData; - WORD version; - int error; - - version = MAKEWORD( 2, 0 ); - - error = WSAStartup( version, &wsaData ); - - /* check for error */ - if ( error != 0 ) - { - /* error occurred */ - return FALSE; - } - - - /* check for correct version */ - if ( LOBYTE( wsaData.wVersion ) != 2 || - HIBYTE( wsaData.wVersion ) != 0 ) - { - /* incorrect WinSock version */ - WSACleanup(); - return FALSE; - } - /* WinSock has been initialized */ - return TRUE; -} - -void win_cleanup_sockets() -{ - WSACleanup(); -} - -bool win_check_socket_path(const char *path) -{ - if (strlen(winfile_socket_identifier) > 0 && - strncmp(path, winfile_socket_identifier, strlen(winfile_socket_identifier)) == 0 && - strchr(path, ':') != nullptr) return true; - return false; -} - -file_error win_open_socket(const char *path, UINT32 openflags, osd_file **file, UINT64 *filesize) -{ - char hostname[256]; - struct hostent *localhost; - struct sockaddr_in sai; - int flag = 1; - int port; - - sscanf( path+strlen(winfile_socket_identifier), "%255[^:]:%d", hostname, &port ); - - if (((*file)->socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) - { - return FILERR_ACCESS_DENIED; - } - - if (setsockopt((*file)->socket, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag)) == -1) - { - return FILERR_ACCESS_DENIED; - } - localhost = gethostbyname(hostname); - - memset(&sai, 0, sizeof(sai)); - sai.sin_family = AF_INET; - sai.sin_port = htons(port); - sai.sin_addr = *((struct in_addr *)localhost->h_addr); - - // listening socket support - if (openflags & OPEN_FLAG_CREATE) - { -// printf("Listening for client at '%s' on port '%d'\n", hostname, port); - // bind socket... - if (bind((*file)->socket, (struct sockaddr *)&sai, sizeof(struct sockaddr)) == -1) - { - return FILERR_ACCESS_DENIED; - } - - // start to listen... - if (listen((*file)->socket, 1) == -1) { - return FILERR_ACCESS_DENIED; - } - - // mark socket as "listening" - (*file)->handle = nullptr; - *filesize = 0; - return FILERR_NONE; - } - -// printf("Connecting to server '%s' on port '%d'\n", hostname, port); - if (connect((*file)->socket, (struct sockaddr *)&sai, sizeof(struct sockaddr)) == -1) - { - return FILERR_ACCESS_DENIED; - } - *filesize = 0; - (*file)->handle = INVALID_HANDLE_VALUE; - return FILERR_NONE; -} - -file_error win_read_socket(osd_file *file, void *buffer, UINT64 offset, UINT32 count, UINT32 *actual) -{ - int result; - char line[80]; - struct timeval timeout; - fd_set readfds; - - FD_ZERO(&readfds); - FD_SET(file->socket, &readfds); - timeout.tv_sec = timeout.tv_usec = 0; - - if (select(file->socket + 1, &readfds, nullptr, nullptr, &timeout) < 0) - { - sprintf(line, "win_read_socket : %s : %d ", __FILE__, __LINE__); - perror(line); - return win_error_to_mame_file_error(GetLastError()); - } - else if (FD_ISSET(file->socket, &readfds)) - { - if (file->handle == INVALID_HANDLE_VALUE) - { - // connected socket - result = recv(file->socket, (char*)buffer, count, 0); - } - else - { - // listening socket - SOCKET AcceptSocket; - AcceptSocket = accept(file->socket, nullptr, nullptr); - if (AcceptSocket == INVALID_SOCKET) - { - return FILERR_FAILURE; - } - closesocket(file->socket); - file->socket = AcceptSocket; - file->handle = INVALID_HANDLE_VALUE; - if (actual != nullptr ) - { - *actual = 0; - } - - return FILERR_NONE; - } - } - else - { - return FILERR_FAILURE; - } - - if (result < 0) - { - return win_error_to_mame_file_error(GetLastError()); - } - - if (actual != nullptr ) - { - *actual = result; - } - return FILERR_NONE; -} - -file_error win_write_socket(osd_file *file, const void *buffer, UINT64 offset, UINT32 count, UINT32 *actual) -{ - int result; - result = send(file->socket, (const char*)buffer, count, 0); - if (result < 0) - { - return win_error_to_mame_file_error(GetLastError()); - } - - if (actual != nullptr ) - { - *actual = result; - } - return FILERR_NONE; -} - -file_error win_close_socket(osd_file *file) -{ - closesocket(file->socket); - return FILERR_NONE; -} |