open.h 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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 string
  15. *
  16. * Parameter list for open() is:
  17. *
  18. * const char *uri_string;
  19. */
  20. LOCATION_URI = 1,
  21. /** Location is a socket
  22. *
  23. * Parameter list for open() is:
  24. *
  25. *
  26. */
  27. LOCATION_SOCKET,
  28. };
  29. /** A URI opener */
  30. struct uri_opener {
  31. /** URI protocol name
  32. *
  33. * This is the "scheme" portion of the URI, e.g. "http" or
  34. * "file".
  35. */
  36. const char *scheme;
  37. /** Open URI
  38. *
  39. * @v xfer Data transfer interface
  40. * @v uri URI
  41. * @ret rc Return status code
  42. *
  43. * This method takes ownership of the URI structure, and is
  44. * responsible for eventually calling free_uri().
  45. */
  46. int ( * open ) ( struct xfer_interface *xfer, struct uri *uri );
  47. };
  48. /** Register a URI opener */
  49. #define __uri_opener __table ( struct uri_opener, uri_openers, 01 )
  50. /** A socket opener */
  51. struct socket_opener {
  52. /** Communication domain (e.g. PF_INET) */
  53. int domain;
  54. /** Communication semantics (e.g. SOCK_STREAM) */
  55. int type;
  56. /** Open socket
  57. *
  58. * @v xfer Data transfer interface
  59. * @v sa Socket address
  60. * @ret rc Return status code
  61. */
  62. int ( * open ) ( struct xfer_interface *xfer, struct sockaddr *sa );
  63. };
  64. /** Register a socket opener */
  65. #define __socket_opener __table ( struct socket_opener, socket_openers, 01 )
  66. extern int open_uri ( struct xfer_interface *xfer, const char *uri_string );
  67. extern int open_socket ( struct xfer_interface *xfer,
  68. int domain, int type, struct sockaddr *sa );
  69. extern int vopen ( struct xfer_interface *xfer, int type, va_list args );
  70. extern int open ( struct xfer_interface *xfer, int type, ... );
  71. #endif /* _GPXE_OPEN_H */