6 * Data transfer interface opening
11 #include <gpxe/tables.h>
12 #include <gpxe/socket.h>
14 struct xfer_interface;
21 * Parameter list for open() is:
26 /** Location is a URI string
28 * Parameter list for open() is:
30 * const char *uri_string;
33 /** Location is a socket
35 * Parameter list for open() is:
38 * struct sockaddr *peer;
39 * struct sockaddr *local;
48 * This is the "scheme" portion of the URI, e.g. "http" or
54 * @v xfer Data transfer interface
56 * @ret rc Return status code
58 int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
61 /** URI opener table */
62 #define URI_OPENERS "uri_openers"
64 /** Register a URI opener */
65 #define __uri_opener __table ( struct uri_opener, URI_OPENERS, 01 )
67 /** A socket opener */
68 struct socket_opener {
69 /** Communication semantics (e.g. SOCK_STREAM) */
71 /** Address family (e.g. AF_INET) */
75 * @v xfer Data transfer interface
76 * @v peer Peer socket address
77 * @v local Local socket address, or NULL
78 * @ret rc Return status code
80 int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
81 struct sockaddr *local );
84 /** Socket opener table */
85 #define SOCKET_OPENERS "socket_openers"
87 /** Register a socket opener */
88 #define __socket_opener __table ( struct socket_opener, SOCKET_OPENERS, 01 )
90 extern int xfer_open_uri ( struct xfer_interface *xfer, struct uri *uri );
91 extern int xfer_open_uri_string ( struct xfer_interface *xfer,
92 const char *uri_string );
93 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
94 int semantics, struct sockaddr *peer,
95 const char *name, struct sockaddr *local );
96 extern int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
97 struct sockaddr *peer, struct sockaddr *local );
98 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
99 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
101 #endif /* _GPXE_OPEN_H */