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

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