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:
30 * struct sockaddr *peer;
31 * struct sockaddr *local;
40 * This is the "scheme" portion of the URI, e.g. "http" or
46 * @v xfer Data transfer interface
48 * @ret rc Return status code
50 int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
53 /** Register a URI opener */
54 #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
56 /** A socket opener */
57 struct socket_opener {
58 /** Communication semantics (e.g. SOCK_STREAM) */
60 /** Address family (e.g. AF_INET) */
64 * @v xfer Data transfer interface
65 * @v peer Peer socket address
66 * @v local Local socket address, or NULL
67 * @ret rc Return status code
69 int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
70 struct sockaddr *local );
73 /** Register a socket opener */
74 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
76 extern int xfer_open_uri ( struct xfer_interface *xfer,
77 const char *uri_string );
78 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
79 int semantics, struct sockaddr *peer,
80 const char *name, struct sockaddr *local );
81 extern int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
82 struct sockaddr *peer, struct sockaddr *local );
83 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
84 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
86 #endif /* _GPXE_OPEN_H */