[sundance] Add reset completion check
[gpxe.git] / src / include / gpxe / open.h
blob81d5fc24601089511acbe6e39504b13131cedeac
1 #ifndef _GPXE_OPEN_H
2 #define _GPXE_OPEN_H
4 /** @file
6 * Data transfer interface opening
8 */
10 #include <stdarg.h>
11 #include <gpxe/tables.h>
12 #include <gpxe/socket.h>
14 struct xfer_interface;
15 struct uri;
17 /** Location types */
18 enum {
19 /** Location is a URI
21 * Parameter list for open() is:
23 * struct uri *uri;
25 LOCATION_URI = 1,
26 /** Location is a URI string
28 * Parameter list for open() is:
30 * const char *uri_string;
32 LOCATION_URI_STRING,
33 /** Location is a socket
35 * Parameter list for open() is:
37 * int semantics;
38 * struct sockaddr *peer;
39 * struct sockaddr *local;
41 LOCATION_SOCKET,
44 /** A URI opener */
45 struct uri_opener {
46 /** URI protocol name
48 * This is the "scheme" portion of the URI, e.g. "http" or
49 * "file".
51 const char *scheme;
52 /** Open URI
54 * @v xfer Data transfer interface
55 * @v uri URI
56 * @ret rc Return status code
58 int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
61 /** Register a URI opener */
62 #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
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
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
77 int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
78 struct sockaddr *local );
81 /** Register a socket opener */
82 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
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, ... );
95 #endif /* _GPXE_OPEN_H */