initial commit

This commit is contained in:
2026-02-12 00:45:31 -08:00
commit 5f168f370b
3024 changed files with 804889 additions and 0 deletions

View File

@@ -0,0 +1,209 @@
#pragma once
#ifdef FASTLED_HAS_NETWORKING && 0
#ifdef _WIN32
#include "fl/string.h"
#include "fl/stdint.h"
// Essential Windows header isolation
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif
#ifndef NOGDI
#define NOGDI
#endif
#ifndef NOUSER
#define NOUSER
#endif
// Minimal Windows includes for type definitions
#include <winsock2.h>
#include <ws2tcpip.h>
namespace fl {
//=============================================================================
// Normalized POSIX-Style Socket Types
//=============================================================================
// POSIX-style type definitions that normalize Windows socket types
// Use existing Windows types when available to avoid conflicts
using socklen_t = int;
using ssize_t = int;
// Windows already defines sockaddr, sockaddr_in, sockaddr_in6, in_addr, in6_addr
// We use the existing Windows types directly via using declarations
using ::sockaddr;
using ::sockaddr_in;
using ::sockaddr_in6;
using ::in_addr;
using ::in6_addr;
// Type aliases for consistency with POSIX
using sa_family_t = unsigned short; // Same as ADDRESS_FAMILY
using in_port_t = unsigned short; // Same as USHORT
//=============================================================================
// POSIX Socket Constants (Windows Normalization)
//=============================================================================
// Address families
#ifndef AF_INET
#define AF_INET 2
#endif
#ifndef AF_INET6
#define AF_INET6 23
#endif
// Socket types
#ifndef SOCK_STREAM
#define SOCK_STREAM 1
#endif
#ifndef SOCK_DGRAM
#define SOCK_DGRAM 2
#endif
// Protocols
#ifndef IPPROTO_TCP
#define IPPROTO_TCP 6
#endif
#ifndef IPPROTO_UDP
#define IPPROTO_UDP 17
#endif
// Socket options
#ifndef SOL_SOCKET
#define SOL_SOCKET 0xffff
#endif
#ifndef SO_REUSEADDR
#define SO_REUSEADDR 0x0004
#endif
#ifndef SO_REUSEPORT
#define SO_REUSEPORT 0x0200 // Not supported on Windows - will return error
#endif
#ifndef TCP_NODELAY
#define TCP_NODELAY 1
#endif
// fcntl flags for non-blocking
#ifndef F_GETFL
#define F_GETFL 3
#endif
#ifndef F_SETFL
#define F_SETFL 4
#endif
#ifndef O_NONBLOCK
#define O_NONBLOCK 0x4000
#endif
// Shutdown options
#ifndef SHUT_RD
#define SHUT_RD 0
#endif
#ifndef SHUT_WR
#define SHUT_WR 1
#endif
#ifndef SHUT_RDWR
#define SHUT_RDWR 2
#endif
//=============================================================================
// Helper Functions for Windows Socket Normalization
//=============================================================================
bool initialize_winsock();
void cleanup_winsock();
int translate_windows_error(int wsa_error);
//=============================================================================
// Normalized POSIX-Style Socket API Functions
//=============================================================================
// Core Socket Operations
int socket(int domain, int type, int protocol);
int socketpair(int domain, int type, int protocol, int sv[2]);
// Addressing
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
int listen(int sockfd, int backlog);
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
// Data Transfer
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
// Connection Teardown
int shutdown(int sockfd, int how);
int close(int fd);
// Socket Options
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
// Address Information
int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
// Address Resolution
int inet_pton(int af, const char *src, void *dst);
const char* inet_ntop(int af, const void *src, char *dst, socklen_t size);
// fcntl emulation for non-blocking sockets
int fcntl(int fd, int cmd, ...);
// Error handling
int get_errno();
// WASM CONSTRAINTS: The following functions are blocking calls and are
// DISALLOWED and NOT AVAILABLE on WASM due to proxying limitations:
// - select()
// - poll()
// These functions are not declared in this API and MUST NOT be used.
// Use per-call non-blocking flags like MSG_DONTWAIT instead.
// (Note: This constraint applies to WASM builds only - Windows builds are not affected)
// POSIX errno constants for Windows
#ifndef EWOULDBLOCK
#define EWOULDBLOCK WSAEWOULDBLOCK
#endif
#ifndef ECONNREFUSED
#define ECONNREFUSED WSAECONNREFUSED
#endif
#ifndef ETIMEDOUT
#define ETIMEDOUT WSAETIMEDOUT
#endif
#ifndef ENETUNREACH
#define ENETUNREACH WSAENETUNREACH
#endif
#ifndef EACCES
#define EACCES WSAEACCES
#endif
#ifndef EADDRINUSE
#define EADDRINUSE WSAEADDRINUSE
#endif
#ifndef EINVAL
#define EINVAL WSAEINVAL
#endif
#ifndef ENOTCONN
#define ENOTCONN WSAENOTCONN
#endif
#ifndef ECONNRESET
#define ECONNRESET WSAECONNRESET
#endif
#ifndef ECONNABORTED
#define ECONNABORTED WSAECONNABORTED
#endif
} // namespace fl
#endif // _WIN32
#endif // FASTLED_HAS_NETWORKING