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 * This method takes ownership of the URI structure, and is
51 * responsible for eventually calling free_uri().
53 int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
56 /** Register a URI opener */
57 #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
59 /** A socket opener */
60 struct socket_opener {
61 /** Communication semantics (e.g. SOCK_STREAM) */
63 /** Address family (e.g. AF_INET) */
67 * @v xfer Data transfer interface
68 * @v peer Peer socket address
69 * @v local Local socket address, or NULL
70 * @ret rc Return status code
72 int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
73 struct sockaddr *local );
76 /** Register a socket opener */
77 #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
79 extern int xfer_open_uri ( struct xfer_interface *xfer,
80 const char *uri_string );
81 extern int xfer_open_named_socket ( struct xfer_interface *xfer,
82 int semantics, struct sockaddr *peer,
83 const char *name, struct sockaddr *local );
84 extern int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
85 struct sockaddr *peer, struct sockaddr *local );
86 extern int xfer_vopen ( struct xfer_interface *xfer, int type, va_list args );
87 extern int xfer_open ( struct xfer_interface *xfer, int type, ... );
89 #endif /* _GPXE_OPEN_H */