Subversion Repositories Kolibri OS

Rev

Rev 4257 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1882 clevermous 1
#ifndef __MENUET_NET_H
2
#define __MENUET_NET_H
3
 
4
#ifdef __cplusplus
5
extern "C" {
6
#endif
7
 
8
#include
9
 
4248 esevece 10
 
11
// System functions
12
#define _SOCKETF 75
13
 
14
// Socket subfunctions
15
#define _OPENSF    0
16
#define _CLOSESF   1
17
#define _BINDSF    2
18
#define _LISTENSF  3
19
#define _CONNECTSF 4
20
#define _ACCEPTSF  5
21
#define _SENDSF    6
22
#define _RECEIVESF 7
23
 
24
// Socket types
25
#define SOCK_STREAM 1
26
#define SOCK_DGRAM  2
27
#define SOCK_RAW    3
28
 
29
// Socket options
4257 esevece 30
#define SO_NONBLOCK 1 << 31
4248 esevece 31
 
32
// IP protocols
33
#define IPPROTO_IP   0
34
#define IPPROTO_ICMP 1
35
#define IPPROTO_TCP  6
36
#define IPPROTO_UDP  17
37
 
38
// Address families
39
#define AF_UNSPEC 0
40
#define AF_LOCAL  1
41
#define AF_INET   2  // IPv4
42
#define AF_INET6  28 // IPv6 (not supported yet)
43
 
44
#define PF_UNSPEC AF_UNSPEC
45
#define PF_LOCAL  AF_LOCAL
46
#define PF_INET4  AF_INET4
47
#define PF_INET6  AF_INET6
48
 
49
// Flags for addrinfo
50
#define AI_PASSIVE     1
51
#define AI_CANONNAME   2
52
#define AI_NUMERICHOST 4
53
#define AI_NUMERICSERV 8
54
#define AI_ADDRCONFIG  0x400
55
 
56
// Internal definition
57
#define AI_SUPPORTED 0x40F
58
 
59
// For system function 76
4257 esevece 60
#define API_ETH   0 << 16
61
#define API_IPv4  1 << 16
62
#define API_ICMP  2 << 16
63
#define API_UDP   3 << 16
64
#define API_TCP   4 << 16
65
#define API_ARP   5 << 16
66
#define API_PPPOE 6 << 16
4248 esevece 67
 
68
// Socket flags for user calls
69
#define MSG_PEEK     0x02
70
#define MSG_DONTWAIT 0x40
71
 
72
 
73
struct in_addr {
4282 esevece 74
    unsigned int s_addr;
4248 esevece 75
};
76
 
77
struct sockaddr {
78
    unsigned short    sa_family;    // address family, AF_xxx
79
    char              sa_data[14];  // 14 bytes of protocol address
80
};
81
 
4282 esevece 82
struct sockaddr_in { // IPv4 only, we need sockaddr_in6 for IPv6
83
    short int          sin_family;  // Address family, AF_INET
84
    unsigned short int sin_port;    // Port number
85
    struct in_addr     sin_addr;    // Internet address
86
    unsigned char      sin_zero[8]; // Same size as struct sockaddr
4248 esevece 87
};
88
 
89
struct addrinfo {
4282 esevece 90
    int              ai_flags;     // AI_PASSIVE, AI_CANONNAME, etc.
91
    int              ai_family;    // AF_INET, AF_INET6, AF_UNSPEC
92
    int              ai_socktype;  // SOCK_STREAM, SOCK_DGRAM
93
    int              ai_protocol;  // use 0 for "any"
94
    int              ai_addrlen;   // size of ai_addr in bytes
95
    struct sockaddr *ai_addr;      // struct sockaddr_in or _in6
96
    char            *ai_canonname; // full canonical hostname
97
    struct addrinfo *ai_next;      // linked list, next node
4248 esevece 98
};
99
 
100
#define EAI_ADDRFAMILY 1
101
#define EAI_AGAIN      2
102
#define EAI_BADFLAGS   3
103
#define EAI_FAIL       4
104
#define EAI_FAMILY     5
105
#define EAI_MEMORY     6
106
#define EAI_NONAME     8
107
#define EAI_SERVICE    9
108
#define EAI_SOCKTYPE   10
109
#define EAI_BADHINTS   12
110
#define EAI_PROTOCOL   13
111
#define EAI_OVERFLOW   14
112
 
113
// Socket error codes
114
// Error Codes
115
#define ENOBUFS       1
116
#define EINPROGRESS   2
117
#define EOPNOTSUPP    4
118
#define EWOULDBLOCK   6
119
#define ENOTCONN      9
120
#define EALREADY      10
121
#define EINVAL        11
122
#define EMSGSIZE      12
123
#define ENOMEM        18
124
#define EADDRINUSE    20
125
#define ECONNREFUSED  61
126
#define ECONNRESET    52
127
#define EISCONN       56
128
#define ETIMEDOUT     60
129
#define ECONNABORTED  53
130
 
131
 
132
int socket(int domain, int type, int protocol);
4249 esevece 133
int closesocket(int s);
4248 esevece 134
int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
135
int listen(int s, int backlog);
136
int connect(int sockfd, const struct sockaddr *serv_addr, int addrlen);
137
int accept(int s, struct sockaddr *addr, int *addrlen);
138
int send(int s, const void *buf, int len, int flags);
139
int recv(int sockfd, void *buf, int len, int flags);
140
 
4282 esevece 141
// extern from src/libc/menuetos/netowrk.c
142
#define __stdcall __attribute__((stdcall))
143
extern void NETWORK_INIT();
144
extern void (* __stdcall freeaddrinfo)(struct addrinfo* ai);
145
extern int (* __stdcall getaddrinfo)( const char* hostname, const char* servname, const struct addrinfo* hints, struct addrinfo **res);
146
extern char * (* __stdcall inet_ntoa)(struct in_addr in);
147
extern unsigned long (* __stdcall inet_addr)( const char* hostname);
4248 esevece 148
 
4282 esevece 149
 
150
// Old stuff
4248 esevece 151
//---------------------------------------------
152
 
1882 clevermous 153
#define __NET_stack_rd_cfg_word	0
154
#define __NET_stack_get_ip	1
155
#define __NET_stack_wr_cfg_word	2
156
#define __NET_stack_put_ip	3
157
 
158
#define __NET_sock_open_UDP	0
159
#define __NET_sock_open_TCP	5
160
#define __NET_sock_close_UDP	1
161
#define __NET_sock_close_TCP	8
162
#define __NET_sock_poll		2
163
#define __NET_sock_read		3
164
#define __NET_sock_write_UDP	4
165
#define __NET_sock_get_status	6
166
#define __NET_sock_write_TCP	7
167
#define __NET_sock_check_port   9
168
 
169
#define __NET_socket		53
170
#define __NET_stack		52
171
 
172
int __menuet__get_stack_config_word(void);
173
__u32 __menuet__get_my_IP(void);
174
void __menuet__set_stack_config_word(int cfg);
175
void __menuet__set_my_IP(__u32 my_IP);
176
 
177
__u32 __menuet__open_UDP_socket(__u32 local_port,__u32 remote_port,__u32 remote_ip);
178
__u32 __menuet__open_TCP_socket(__u32 local_port,__u32 remote_port,__u32 remote_ip,int mode);
179
int __menuet__close_UDP_socket(int socket);
180
int __menuet__close_TCP_socket(int socket);
181
int __menuet__poll_socket(int sock);
182
int __menuet__read_socket(int sock,__u8 * return_data);
183
int __menuet__get_TCP_socket_status(int sock);
184
int __menuet__write_UDP_socket(int sock,int count,void * buffer);
185
int __menuet__write_TCP_socket(int sock,int count,void * buffer);
186
int __menuet__check_net_port_availability(int port);
187
 
188
/* Values returned by __menuet__check_net_port_availability */
189
#define PORT_AVAILABLE		(1)
190
#define PORT_UNAVAILABLE	(0)
191
 
192
#define NET_OP_OK		((int)(0))
193
#define NET_OP_ERR		((int)(-1))
194
 
195
/* These are socket modes */
196
#define SOCKET_PASSIVE		0
197
#define SOCKET_ACTIVE		1
198
 
199
/* These belong to socket status */
200
#define TCB_LISTEN		1
201
#define TCB_SYN_SENT		2
202
#define TCB_SYN_RECEIVED	3
203
#define TCB_ESTABLISHED		4
204
#define TCB_FIN_WAIT_1		5
205
#define TCB_FIN_WAIT_2		6
206
#define TCB_CLOSE_WAIT		7
207
#define TCB_CLOSING		8
208
#define TCB_LAST_ACK		9
209
#define TCB_TIME_AWAIT		10
210
#define TCB_CLOSED		11
211
 
212
#ifdef __cplusplus
213
}
214
#endif
215
 
216
#endif