6 * Data transfer interface opening
10 #include <gpxe/tables.h>
12 struct xfer_interface;
18 /** Location is a URI string
20 * Parameter list for open() is:
22 * const char *uri_string;
25 /** Location is a socket
27 * Parameter list for open() is:
38 * This is the "scheme" portion of the URI, e.g. "http" or
44 * @v xfer Data transfer interface
46 * @ret rc Return status code
48 * This method takes ownership of the URI structure, and is
49 * responsible for eventually calling free_uri().
51 int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
54 /** Register a URI opener */
55 #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
57 /** A socket opener */
58 struct socket_opener {
59 /** Communication domain (e.g. PF_INET) */
61 /** Communication semantics (e.g. SOCK_STREAM) */
65 * @v xfer Data transfer interface
66 * @v peer Peer socket address
67 * @v local Local socket address, or NULL
68 * @ret rc Return status code
70 int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
71 struct sockaddr *local );
74 /** Register a socket opener */
75 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
77 extern int xfer_open_uri ( struct xfer_interface *xfer,
78 const char *uri_string );
79 extern int xfer_open_socket ( struct xfer_interface *xfer,
80 int domain, int type, struct sockaddr *peer,
81 struct sockaddr *local );
82 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
83 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
85 #endif /* _GPXE_OPEN_H */