remove const from TPL_OpenTPLFromMemory since the memory is altered
[libogc.git] / gc / network.h
blob41e503a0b848d54a321397d2836258dbc465d696
1 #ifndef __NETWORK_H__
2 #define __NETWORK_H__
4 #include <gctypes.h>
5 #include <sys/time.h>
6 #include <sys/types.h>
8 #define INVALID_SOCKET (~0)
9 #define SOCKET_ERROR (-1)
11 #define SOCK_STREAM 1
12 #define SOCK_DGRAM 2
13 #define SOCK_RAW 3
16 * Option flags per-socket.
18 #define SO_DEBUG 0x0001 /* turn on debugging info recording */
19 #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
20 #define SO_REUSEADDR 0x0004 /* allow local address reuse */
21 #define SO_KEEPALIVE 0x0008 /* keep connections alive */
22 #define SO_DONTROUTE 0x0010 /* just use interface addresses */
23 #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
24 #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
25 #define SO_LINGER 0x0080 /* linger on close if data present */
26 #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
27 #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */
29 #define SO_DONTLINGER (int)(~SO_LINGER)
32 * Additional options, not kept in so_options.
34 #define SO_SNDBUF 0x1001 /* send buffer size */
35 #define SO_RCVBUF 0x1002 /* receive buffer size */
36 #define SO_SNDLOWAT 0x1003 /* send low-water mark */
37 #define SO_RCVLOWAT 0x1004 /* receive low-water mark */
38 #define SO_SNDTIMEO 0x1005 /* send timeout */
39 #define SO_RCVTIMEO 0x1006 /* receive timeout */
40 #define SO_ERROR 0x1007 /* get error status and clear */
41 #define SO_TYPE 0x1008 /* get socket type */
46 * Structure used for manipulating linger option.
48 struct linger {
49 int l_onoff; /* option on/off */
50 int l_linger; /* linger time */
54 * Level number for (get/set)sockopt() to apply to socket itself.
56 #define SOL_SOCKET 0xffff /* options for socket level */
58 #define AF_UNSPEC 0
59 #define AF_INET 2
60 #define PF_INET AF_INET
61 #define PF_UNSPEC AF_UNSPEC
63 #define IPPROTO_IP 0
64 #define IPPROTO_TCP 6
65 #define IPPROTO_UDP 17
67 #define INADDR_ANY 0
68 #define INADDR_BROADCAST 0xffffffff
70 /* Flags we can use with send and recv. */
71 #define MSG_DONTWAIT 0x40 /* Nonblocking i/o for this operation only */
74 * Options for level IPPROTO_IP
76 #define IP_TOS 1
77 #define IP_TTL 2
80 #define IPTOS_TOS_MASK 0x1E
81 #define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
82 #define IPTOS_LOWDELAY 0x10
83 #define IPTOS_THROUGHPUT 0x08
84 #define IPTOS_RELIABILITY 0x04
85 #define IPTOS_LOWCOST 0x02
86 #define IPTOS_MINCOST IPTOS_LOWCOST
89 * Definitions for IP precedence (also in ip_tos) (hopefully unused)
91 #define IPTOS_PREC_MASK 0xe0
92 #define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
93 #define IPTOS_PREC_NETCONTROL 0xe0
94 #define IPTOS_PREC_INTERNETCONTROL 0xc0
95 #define IPTOS_PREC_CRITIC_ECP 0xa0
96 #define IPTOS_PREC_FLASHOVERRIDE 0x80
97 #define IPTOS_PREC_FLASH 0x60
98 #define IPTOS_PREC_IMMEDIATE 0x40
99 #define IPTOS_PREC_PRIORITY 0x20
100 #define IPTOS_PREC_ROUTINE 0x00
104 * Commands for ioctlsocket(), taken from the BSD file fcntl.h.
107 * Ioctl's have the command encoded in the lower word,
108 * and the size of any in or out parameters in the upper
109 * word. The high 2 bits of the upper word are used
110 * to encode the in/out status of the parameter; for now
111 * we restrict parameters to at most 128 bytes.
113 #if !defined(FIONREAD) || !defined(FIONBIO)
114 #define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */
115 #define IOC_VOID 0x20000000 /* no parameters */
116 #define IOC_OUT 0x40000000 /* copy out parameters */
117 #define IOC_IN 0x80000000 /* copy in parameters */
118 #define IOC_INOUT (IOC_IN|IOC_OUT)
119 /* 0x20000000 distinguishes new &
120 old ioctl's */
121 #define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
123 #define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
125 #define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
126 #endif
128 #ifndef FIONREAD
129 #define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */
130 #endif
131 #ifndef FIONBIO
132 #define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */
133 #endif
135 /* Socket I/O Controls */
136 #ifndef SIOCSHIWAT
137 #define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */
138 #define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */
139 #define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */
140 #define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */
141 #define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */
142 #endif
144 #ifndef O_NONBLOCK
145 #define O_NONBLOCK 04000U
146 #endif
148 #ifndef FD_SET
149 #undef FD_SETSIZE
150 #define FD_SETSIZE 16
151 #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7)))
152 #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7)))
153 #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7)))
154 #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p)))
156 typedef struct fd_set {
157 u8 fd_bits [(FD_SETSIZE+7)/8];
158 } fd_set;
160 struct timeval {
161 s32 tv_sec; /* seconds */
162 s32 tv_usec; /* and microseconds */
165 #endif
167 #ifndef TCP_NODELAY
168 #define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */
169 #endif
170 #ifndef TCP_KEEPALIVE
171 #define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keepalive miliseconds */
172 #endif
174 #ifndef socklen_t
175 #define socklen_t u32
176 #endif
178 #ifndef htons
179 #define htons(x) (x)
180 #endif
181 #ifndef ntohs
182 #define ntohs(x) (x)
183 #endif
184 #ifndef htonl
185 #define htonl(x) (x)
186 #endif
187 #ifndef ntohl
188 #define ntohl(x) (x)
189 #endif
191 #ifndef h_addr
192 #define h_addr h_addr_list[0]
193 #endif
195 #ifndef IP4_ADDR
196 #define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->s_addr = htonl(((u32)(a&0xff)<<24)|((u32)(b&0xff)<<16)|((u32)(c&0xff)<<8)|(u32)(d&0xff))
197 #define ip4_addr1(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 24) & 0xff)
198 #define ip4_addr2(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 16) & 0xff)
199 #define ip4_addr3(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 8) & 0xff)
200 #define ip4_addr4(ipaddr) ((u32)(ntohl((ipaddr)->s_addr)) & 0xff)
201 #endif
203 #define POLLIN 0x0001
204 #define POLLPRI 0x0002
205 #define POLLOUT 0x0004
206 #define POLLERR 0x0008
207 #define POLLHUP 0x0010
208 #define POLLNVAL 0x0020
210 #ifdef __cplusplus
211 extern "C" {
212 #endif
214 #ifndef HAVE_IN_ADDR
215 #define HAVE_IN_ADDR
216 struct in_addr {
217 u32 s_addr;
219 #endif
221 struct sockaddr_in {
222 u8 sin_len;
223 u8 sin_family;
224 u16 sin_port;
225 struct in_addr sin_addr;
226 s8 sin_zero[8];
229 struct sockaddr {
230 u8 sa_len;
231 u8 sa_family;
232 s8 sa_data[14];
235 struct hostent {
236 char *h_name; /* official name of host */
237 char **h_aliases; /* alias list */
238 u16 h_addrtype; /* host address type */
239 u16 h_length; /* length of address */
240 char **h_addr_list; /* list of addresses from name server */
243 struct pollsd {
244 s32 socket;
245 u32 events;
246 u32 revents;
249 u32 inet_addr(const char *cp);
250 s8 inet_aton(const char *cp, struct in_addr *addr);
251 char *inet_ntoa(struct in_addr addr); /* returns ptr to static buffer; not reentrant! */
253 s32 if_config( char *local_ip, char *netmask, char *gateway,bool use_dhcp);
254 s32 if_configex(struct in_addr *local_ip,struct in_addr *netmask,struct in_addr *gateway,bool use_dhcp);
256 s32 net_init();
257 #ifdef HW_RVL
258 typedef s32 (*netcallback)(s32 result, void *usrdata);
259 s32 net_init_async(netcallback cb, void *usrdata);
260 s32 net_get_status(void);
261 void net_wc24cleanup();
262 s32 net_get_mac_address(void *mac_buf);
263 #endif
264 void net_deinit();
266 u32 net_gethostip();
267 s32 net_socket(u32 domain,u32 type,u32 protocol);
268 s32 net_bind(s32 s,struct sockaddr *name,socklen_t namelen);
269 s32 net_listen(s32 s,u32 backlog);
270 s32 net_accept(s32 s,struct sockaddr *addr,socklen_t *addrlen);
271 s32 net_connect(s32 s,struct sockaddr *,socklen_t);
272 s32 net_write(s32 s,const void *data,s32 size);
273 s32 net_send(s32 s,const void *data,s32 size,u32 flags);
274 s32 net_sendto(s32 s,const void *data,s32 len,u32 flags,struct sockaddr *to,socklen_t tolen);
275 s32 net_recv(s32 s,void *mem,s32 len,u32 flags);
276 s32 net_recvfrom(s32 s,void *mem,s32 len,u32 flags,struct sockaddr *from,socklen_t *fromlen);
277 s32 net_read(s32 s,void *mem,s32 len);
278 s32 net_close(s32 s);
279 s32 net_select(s32 maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,struct timeval *timeout);
280 s32 net_setsockopt(s32 s,u32 level,u32 optname,const void *optval,socklen_t optlen);
281 s32 net_ioctl(s32 s, u32 cmd, void *argp);
282 s32 net_fcntl(s32 s, u32 cmd, u32 flags);
283 s32 net_poll(struct pollsd *sds,s32 nsds,s32 timeout);
284 s32 net_shutdown(s32 s, u32 how);
286 struct hostent * net_gethostbyname(const char *addrString);
288 #ifdef __cplusplus
290 #endif
292 #endif