lhnet: Use the generic linked list
[xonotic/darkplaces.git] / lhnet.h
1
2 // Written by Ashley Rose Hale (LadyHavoc) 2003-06-15 and placed into public domain.
3
4 #ifndef LHNET_H
5 #define LHNET_H
6
7 #include <stddef.h>
8 #include "com_list.h"
9
10 typedef enum lhnetaddresstype_e
11 {
12         LHNETADDRESSTYPE_NONE,
13         LHNETADDRESSTYPE_LOOP,
14         LHNETADDRESSTYPE_INET4,
15         LHNETADDRESSTYPE_INET6
16 }
17 lhnetaddresstype_t;
18
19 typedef struct lhnetaddress_s
20 {
21         lhnetaddresstype_t addresstype;
22         int port; // used by LHNETADDRESSTYPE_LOOP
23         unsigned char storage[256]; // sockaddr_in or sockaddr_in6
24 }
25 lhnetaddress_t;
26
27 int LHNETADDRESS_FromPort(lhnetaddress_t *address, lhnetaddresstype_t addresstype, int port);
28 int LHNETADDRESS_FromString(lhnetaddress_t *address, const char *string, int defaultport);
29 int LHNETADDRESS_ToString(const lhnetaddress_t *address, char *string, int stringbuffersize, int includeport);
30 int LHNETADDRESS_GetAddressType(const lhnetaddress_t *address);
31 const char *LHNETADDRESS_GetInterfaceName(const lhnetaddress_t *address, char *ifname, size_t ifnamelength);
32 int LHNETADDRESS_GetPort(const lhnetaddress_t *address);
33 int LHNETADDRESS_SetPort(lhnetaddress_t *address, int port);
34 int LHNETADDRESS_Compare(const lhnetaddress_t *address1, const lhnetaddress_t *address2);
35
36 typedef struct lhnetsocket_s
37 {
38         lhnetaddress_t address;
39         int inetsocket;
40         llist_t list;
41 }
42 lhnetsocket_t;
43
44 void LHNET_Init(void);
45 void LHNET_Shutdown(void);
46 int LHNET_DefaultDSCP(int dscp); // < 0: query; >= 0: set (returns previous value)
47 void LHNET_SleepUntilPacket_Microseconds(int microseconds);
48 lhnetsocket_t *LHNET_OpenSocket_Connectionless(lhnetaddress_t *address);
49 void LHNET_CloseSocket(lhnetsocket_t *lhnetsocket);
50 lhnetaddress_t *LHNET_AddressFromSocket(lhnetsocket_t *sock);
51 int LHNET_Read(lhnetsocket_t *lhnetsocket, void *content, int maxcontentlength, lhnetaddress_t *address);
52 int LHNET_Write(lhnetsocket_t *lhnetsocket, const void *content, int contentlength, const lhnetaddress_t *address);
53
54 #endif
55