From a18cc37dfac60a6072912e7728131b739a90406f Mon Sep 17 00:00:00 2001 From: Dave Murphy Date: Wed, 7 May 2014 17:17:36 +0100 Subject: [PATCH] add network headers, remove libnds dependencies --- libctru/Makefile | 2 +- libctru/include/netdb.h | 24 +++++++ libctru/include/netinet/in.h | 34 ++++++++++ libctru/include/netinet/tcp.h | 0 libctru/include/sys/socket.h | 119 ++++++++++++++++++++++++++++++++++ 5 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 libctru/include/netdb.h create mode 100644 libctru/include/netinet/in.h create mode 100644 libctru/include/netinet/tcp.h create mode 100644 libctru/include/sys/socket.h diff --git a/libctru/Makefile b/libctru/Makefile index 7279fec..92c78e4 100644 --- a/libctru/Makefile +++ b/libctru/Makefile @@ -1,6 +1,6 @@ CC = arm-none-eabi-gcc AR = arm-none-eabi-ar -CFLAGS += -Wall -std=c99 -march=armv6 -O0 -I"$(CURDIR)/include/" -I$(DEVKITPRO)/libnds/include +CFLAGS += -Wall -std=c99 -march=armv6 -O0 -I"$(CURDIR)/include/" CFILES = $(wildcard source/*.c) OFILES = $(CFILES:source/%.c=build/%.o) diff --git a/libctru/include/netdb.h b/libctru/include/netdb.h new file mode 100644 index 0000000..e24c8ca --- /dev/null +++ b/libctru/include/netdb.h @@ -0,0 +1,24 @@ +#ifndef NETDB_H +#define NETDB_H + +struct hostent { + char * h_name; + char ** h_aliases; + int h_addrtype; + int h_length; + char ** h_addr_list; +}; + + +#ifdef __cplusplus +extern "C" { +#endif + + struct hostent * gethostbyname(const char * name); + +#ifdef __cplusplus +}; +#endif + + +#endif // NETDB_H diff --git a/libctru/include/netinet/in.h b/libctru/include/netinet/in.h new file mode 100644 index 0000000..5e3acd3 --- /dev/null +++ b/libctru/include/netinet/in.h @@ -0,0 +1,34 @@ +#ifndef NETINET_IN_H +#define NETINET_IN_H + +#include "sys/socket.h" + +#define INADDR_ANY 0x00000000 +#define INADDR_BROADCAST 0xFFFFFFFF +#define INADDR_NONE 0xFFFFFFFF + +struct in_addr { + unsigned long s_addr; +}; + +struct sockaddr_in { + unsigned short sin_family; + unsigned short sin_port; + struct in_addr sin_addr; + unsigned char sin_zero[8]; +}; + +#ifdef __cplusplus +extern "C" { +#endif + + // actually from arpa/inet.h - but is included through netinet/in.h + unsigned long inet_addr(const char *cp); + int inet_aton(const char *cp, struct in_addr *inp); + char *inet_ntoa(struct in_addr in); + +#ifdef __cplusplus +}; +#endif + +#endif // NETINET_IN_H diff --git a/libctru/include/netinet/tcp.h b/libctru/include/netinet/tcp.h new file mode 100644 index 0000000..e69de29 diff --git a/libctru/include/sys/socket.h b/libctru/include/sys/socket.h new file mode 100644 index 0000000..1ee3502 --- /dev/null +++ b/libctru/include/sys/socket.h @@ -0,0 +1,119 @@ +#ifndef SYS_SOCKET_H +#define SYS_SOCKET_H + +#include + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define SOL_SOCKET 0xfff /* options for socket level */ +# define SOL_TCP 6 /* TCP level */ + +#define PF_UNSPEC 0 +#define PF_INET 2 +#define PF_INET6 10 + +#define AF_UNSPEC PF_UNSPEC +#define AF_INET PF_INET +#define AF_INET6 PF_INET6 + +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 + +// need to sync FIO* values with commonly accepted ones sometime +#define FIONBIO 1 +#define FIONREAD 2 + +#define SOCKET_ERROR -1 + +// send()/recv()/etc flags +// at present, only MSG_PEEK is implemented though. +#define MSG_WAITALL 0x40000000 +#define MSG_TRUNC 0x20000000 +#define MSG_PEEK 0x10000000 +#define MSG_OOB 0x08000000 +#define MSG_EOR 0x04000000 +#define MSG_DONTROUTE 0x02000000 +#define MSG_CTRUNC 0x01000000 + +// shutdown() flags: +#define SHUT_RD 1 +#define SHUT_WR 2 +#define SHUT_RDWR 3 + +/* + * Option flags per-socket. + */ +#define SO_DEBUG 0x0001 /* turn on debugging info recording */ +#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define SO_REUSEADDR 0x0004 /* allow local address reuse */ +#define SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define SO_DONTROUTE 0x0010 /* just use interface addresses */ +#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ +#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ +#define SO_LINGER 0x0080 /* linger on close if data present */ +#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ +#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ + +#define SO_DONTLINGER (int)(~SO_LINGER) + +/* + * Additional options, not kept in so_options. + */ +#define SO_SNDBUF 0x1001 /* send buffer size */ +#define SO_RCVBUF 0x1002 /* receive buffer size */ +#define SO_SNDLOWAT 0x1003 /* send low-water mark */ +#define SO_RCVLOWAT 0x1004 /* receive low-water mark */ +#define SO_SNDTIMEO 0x1005 /* send timeout */ +#define SO_RCVTIMEO 0x1006 /* receive timeout */ +#define SO_ERROR 0x1007 /* get error status and clear */ +#define SO_TYPE 0x1008 /* get socket type */ + +struct sockaddr { + unsigned short sa_family; + char sa_data[14]; +}; + +#ifndef ntohs +#define ntohs(num) htons(num) +#define ntohl(num) htonl(num) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + int socket(int domain, int type, int protocol); + int bind(int socket, const struct sockaddr * addr, int addr_len); + int connect(int socket, const struct sockaddr * addr, int addr_len); + int send(int socket, const void * data, int sendlength, int flags); + int recv(int socket, void * data, int recvlength, int flags); + int sendto(int socket, const void * data, int sendlength, int flags, const struct sockaddr * addr, int addr_len); + int recvfrom(int socket, void * data, int recvlength, int flags, struct sockaddr * addr, int * addr_len); + int listen(int socket, int max_connections); + int accept(int socket, struct sockaddr * addr, int * addr_len); + int shutdown(int socket, int shutdown_type); + int closesocket(int socket); + + int ioctl(int socket, long cmd, void * arg); + + int setsockopt(int socket, int level, int option_name, const void * data, int data_len); + int getsockopt(int socket, int level, int option_name, void * data, int * data_len); + + int getpeername(int socket, struct sockaddr *addr, int * addr_len); + int getsockname(int socket, struct sockaddr *addr, int * addr_len); + + int gethostname(char *name, size_t len); + int sethostname(const char *name, size_t len); + + unsigned short htons(unsigned short num); + unsigned long htonl(unsigned long num); + + extern int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); + +#ifdef __cplusplus +}; +#endif + + +#endif // SYS_SOCKET_H