1 /* url-socket.h - decls for the socket URLs file system
2  *
3  ****************************************************************
4  * Copyright (C) 1999, 2000 Thomas Lord
5  *
6  * See the file "COPYING" for further information about
7  * the copyright and warranty status of this work.
8  */
9 
10 
11 #ifndef INCLUDE__VU_NETWORK__URL_SOCKET_H
12 #define INCLUDE__VU_NETWORK__URL_SOCKET_H
13 
14 
15 #include "hackerlab/os/sys/socket.h"
16 #include "hackerlab/os/sys/param.h"
17 #include "hackerlab/os/sys/un.h"
18 #include "hackerlab/os/netinet/in.h"
19 #include "hackerlab/os/arpa/inet.h"
20 #include "hackerlab/os/netdb.h"
21 #include "hackerlab/vu/vu.h"
22 
23 
24 /* enum url_socket_type
25  *
26  * A single file name regexp can be used to name client sockets,
27  * server sockets, or both.
28  */
29 enum url_socket_type
30 {
31   url_socket_client,
32   url_socket_server,
33   url_socket_server_or_client,
34 };
35 
36 
37 /* enum url_socket_domains
38  *
39  * A single file name regexp can be associated with
40  * sockets in the inet domain, the unix domain, or both.
41  */
42 enum url_socket_domains
43 {
44   url_socket_unix,
45   url_socket_inet,
46   url_socket_inet_or_unix,
47 };
48 
49 
50 /* A client-supplied function that is called when a new server socket
51  * is created.
52  */
53 typedef void (*url_socket_server_callback) (const char * path,
54 					    int server_flags,
55 					    int flags,
56 					    int mode,
57 					    int server_fd,
58 					    struct sockaddr * server_addr,
59 					    int server_addr_len,
60 					    void * closure);
61 
62 /* A client-supplied function that is called when a new client
63  * connection is received.
64  */
65 typedef void (*url_socket_connect_callback) (const char * path,
66 					     int flags,
67 					     int mode,
68 					     int server_fd,
69 					     int connection_fd,
70 					     struct sockaddr * client_addr,
71 					     int client_addr_len,
72 					     void * closure);
73 
74 
75 /* A client-supplied function that is called when a server socket is closed.
76  */
77 typedef void (*url_socket_server_close_callback) (int server_fd,
78 						  struct sockaddr * server_addr,
79 						  int server_addr_len,
80 						  void * closure);
81 
82 
83 /* automatically generated __STDC__ prototypes */
84 extern void url_socket_push_client_handler (enum url_socket_domains domains,
85                                             int default_port,
86                                             int is_optional);
87 extern void url_socket_push_server_handler (enum url_socket_domains domains,
88                                             int server_flags,
89                                             int may_be_client,
90                                             int only_server_url,
91                                             int default_port,
92                                             int backlog,
93                                             url_socket_server_callback server_callback,
94                                             url_socket_connect_callback connection_callback,
95                                             url_socket_server_close_callback server_close_callback,
96                                             void * closure,
97                                             int is_optional);
98 extern int url_socket_create_server_socket (int * errn, char * path);
99 extern int url_inet_client (int * errn, t_uchar * host, int port);
100 extern int url_inet_client_addr (int * errn, t_ulong host, int port);
101 extern int url_inet_server_accept (int * errn, int server_fd);
102 extern int url_inet_server (alloc_limits limits,
103                             t_ulong * host_addr_is,
104                             t_uchar ** host_id_is,
105                             int * port_is,
106                             int * errn,
107                             t_uchar * host,
108                             int port);
109 #endif  /* INCLUDE__VU_NETWORK__URL_SOCKET_H */
110