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