Added missing #include
[people/adir/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 <stdarg.h>
11 #include <gpxe/tables.h>
12
13 struct xfer_interface;
14 struct uri;
15 struct sockaddr;
16
17 /** Location types */
18 enum {
19         /** Location is a URI
20          *
21          * Parameter list for open() is:
22          *
23          * struct uri *uri;
24          */
25         LOCATION_URI = 1,
26         /** Location is a URI string
27          *
28          * Parameter list for open() is:
29          *
30          * const char *uri_string;
31          */
32         LOCATION_URI_STRING,
33         /** Location is a socket
34          *
35          * Parameter list for open() is:
36          *
37          * int semantics;
38          * struct sockaddr *peer;
39          * struct sockaddr *local;
40          */
41         LOCATION_SOCKET,
42 };
43
44 /** A URI opener */
45 struct uri_opener {
46         /** URI protocol name
47          *
48          * This is the "scheme" portion of the URI, e.g. "http" or
49          * "file".
50          */
51         const char *scheme;
52         /** Open URI
53          *
54          * @v xfer              Data transfer interface
55          * @v uri               URI
56          * @ret rc              Return status code
57          */
58         int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
59 };
60
61 /** Register a URI opener */
62 #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
63
64 /** A socket opener */
65 struct socket_opener {
66         /** Communication semantics (e.g. SOCK_STREAM) */
67         int semantics;
68         /** Address family (e.g. AF_INET) */
69         int family;
70         /** Open socket
71          *
72          * @v xfer              Data transfer interface
73          * @v peer              Peer socket address
74          * @v local             Local socket address, or NULL
75          * @ret rc              Return status code
76          */
77         int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
78                          struct sockaddr *local );
79 };
80
81 /** Register a socket opener */
82 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
83
84 extern int xfer_open_uri ( struct xfer_interface *xfer, struct uri *uri );
85 extern int xfer_open_uri_string ( struct xfer_interface *xfer,
86                                   const char *uri_string );
87 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
88                                     int semantics, struct sockaddr *peer,
89                                     const char *name, struct sockaddr *local );
90 extern int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
91                               struct sockaddr *peer, struct sockaddr *local );
92 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
93 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
94
95 #endif /* _GPXE_OPEN_H */