You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

open.h 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #ifndef _GPXE_OPEN_H
  2. #define _GPXE_OPEN_H
  3. /** @file
  4. *
  5. * Data transfer interface opening
  6. *
  7. */
  8. #include <gpxe/tables.h>
  9. struct xfer_interface;
  10. struct uri;
  11. struct sockaddr;
  12. /** Location types */
  13. enum {
  14. /** Location is a URI
  15. *
  16. * Parameter list for open() is:
  17. *
  18. * struct uri *uri;
  19. */
  20. LOCATION_URI = 1,
  21. /** Location is a URI string
  22. *
  23. * Parameter list for open() is:
  24. *
  25. * const char *uri_string;
  26. */
  27. LOCATION_URI_STRING,
  28. /** Location is a socket
  29. *
  30. * Parameter list for open() is:
  31. *
  32. * int semantics;
  33. * struct sockaddr *peer;
  34. * struct sockaddr *local;
  35. */
  36. LOCATION_SOCKET,
  37. };
  38. /** A URI opener */
  39. struct uri_opener {
  40. /** URI protocol name
  41. *
  42. * This is the "scheme" portion of the URI, e.g. "http" or
  43. * "file".
  44. */
  45. const char *scheme;
  46. /** Open URI
  47. *
  48. * @v xfer Data transfer interface
  49. * @v uri URI
  50. * @ret rc Return status code
  51. */
  52. int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
  53. };
  54. /** Register a URI opener */
  55. #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) */
  59. int semantics;
  60. /** Address family (e.g. AF_INET) */
  61. int family;
  62. /** Open socket
  63. *
  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
  68. */
  69. int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *peer,
  70. struct sockaddr *local );
  71. };
  72. /** Register a socket opener */
  73. #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
  74. extern int xfer_open_uri ( struct xfer_interface *xfer, struct uri *uri );
  75. extern int xfer_open_uri_string ( struct xfer_interface *xfer,
  76. const char *uri_string );
  77. extern int xfer_open_named_socket ( struct xfer_interface *xfer,
  78. int semantics, struct sockaddr *peer,
  79. const char *name, struct sockaddr *local );
  80. extern int xfer_open_socket ( struct xfer_interface *xfer, int semantics,
  81. struct sockaddr *peer, 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, ... );
  84. #endif /* _GPXE_OPEN_H */