Prefix all the open()-family routines with xfer_, to disambiguate them
[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          * 
30          */
31         LOCATION_SOCKET,
32 };
33
34 /** A URI opener */
35 struct uri_opener {
36         /** URI protocol name
37          *
38          * This is the "scheme" portion of the URI, e.g. "http" or
39          * "file".
40          */
41         const char *scheme;
42         /** Open URI
43          *
44          * @v xfer              Data transfer interface
45          * @v uri               URI
46          * @ret rc              Return status code
47          *
48          * This method takes ownership of the URI structure, and is
49          * responsible for eventually calling free_uri().
50          */
51         int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
52 };
53
54 /** Register a URI opener */
55 #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
56
57 /** A socket opener */
58 struct socket_opener {
59         /** Communication domain (e.g. PF_INET) */
60         int domain;
61         /** Communication semantics (e.g. SOCK_STREAM) */
62         int type;
63         /** Open socket
64          *
65          * @v xfer              Data transfer interface
66          * @v sa                Socket address
67          * @ret rc              Return status code
68          */
69         int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *sa );
70 };
71
72 /** Register a socket opener */
73 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
74
75 extern int xfer_open_uri ( struct xfer_interface *xfer,
76                            const char *uri_string );
77 extern int xfer_open_socket ( struct xfer_interface *xfer,
78                               int domain, int type, struct sockaddr *sa );
79 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
80 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
81
82 #endif /* _GPXE_OPEN_H */