Eliminate PF_INET; just use the AF_INET from the struct sockaddr instead.
[people/dverkamp/gpxe.git] / src / include / gpxe / open.h
1 #ifndef _GPXE_OPEN_H
2 #define _GPXE_OPEN_H
3
4 /** @file
5  *
6  * Data transfer interface opening
7  *
8  */
9
10 #include <gpxe/tables.h>
11
12 struct xfer_interface;
13 struct uri;
14 struct sockaddr;
15
16 /** Location types */
17 enum {
18         /** Location is a URI string
19          *
20          * Parameter list for open() is:
21          *
22          * const char *uri_string;
23          */
24         LOCATION_URI = 1,
25         /** Location is a socket
26          *
27          * Parameter list for open() is:
28          *
29          * int semantics;
30          * struct sockaddr *peer;
31          * struct sockaddr *local;
32          */
33         LOCATION_SOCKET,
34 };
35
36 /** A URI opener */
37 struct uri_opener {
38         /** URI protocol name
39          *
40          * This is the "scheme" portion of the URI, e.g. "http" or
41          * "file".
42          */
43         const char *scheme;
44         /** Open URI
45          *
46          * @v xfer              Data transfer interface
47          * @v uri               URI
48          * @ret rc              Return status code
49          *
50          * This method takes ownership of the URI structure, and is
51          * responsible for eventually calling free_uri().
52          */
53         int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
54 };
55
56 /** Register a URI opener */
57 #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
58
59 /** A socket opener */
60 struct socket_opener {
61         /** Communication semantics (e.g. SOCK_STREAM) */
62         int semantics;
63         /** Address family (e.g. AF_INET) */
64         int family;
65         /** Open socket
66          *
67          * @v xfer              Data transfer interface
68          * @v peer              Peer socket address
69          * @v local             Local socket address, or NULL
70          * @ret rc              Return status code
71          */
72         int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
73                          struct sockaddr *local );
74 };
75
76 /** Register a socket opener */
77 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
78
79 extern int xfer_open_uri ( struct xfer_interface *xfer,
80                            const char *uri_string );
81 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
82                                     int semantics, struct sockaddr *peer,
83                                     const char *name, struct sockaddr *local );
84 extern int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
85                               struct sockaddr *peer, struct sockaddr *local );
86 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
87 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
88
89 #endif /* _GPXE_OPEN_H */