socket_factory.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef SERVICES_NETWORK_SOCKET_FACTORY_H_
  5. #define SERVICES_NETWORK_SOCKET_FACTORY_H_
  6. #include <memory>
  7. #include <vector>
  8. #include "base/component_export.h"
  9. #include "base/memory/raw_ptr.h"
  10. #include "mojo/public/cpp/bindings/pending_receiver.h"
  11. #include "mojo/public/cpp/bindings/pending_remote.h"
  12. #include "mojo/public/cpp/bindings/receiver_set.h"
  13. #include "mojo/public/cpp/bindings/unique_receiver_set.h"
  14. #include "net/socket/ssl_client_socket.h"
  15. #include "net/socket/tcp_socket.h"
  16. #include "net/traffic_annotation/network_traffic_annotation.h"
  17. #include "services/network/public/mojom/network_service.mojom.h"
  18. #include "services/network/public/mojom/tcp_socket.mojom.h"
  19. #include "services/network/public/mojom/udp_socket.mojom.h"
  20. #include "services/network/tcp_bound_socket.h"
  21. #include "services/network/tcp_connected_socket.h"
  22. #include "services/network/tcp_server_socket.h"
  23. #include "services/network/tls_socket_factory.h"
  24. namespace net {
  25. class ClientSocketFactory;
  26. class NetLog;
  27. } // namespace net
  28. namespace network {
  29. // Helper class that handles socket requests. It takes care of destroying
  30. // socket implementation instances when mojo pipes are broken.
  31. class COMPONENT_EXPORT(NETWORK_SERVICE) SocketFactory
  32. : public TCPServerSocket::Delegate {
  33. public:
  34. // Constructs a SocketFactory. If |net_log| is non-null, it is used to
  35. // log NetLog events when logging is enabled. |net_log| used to must outlive
  36. // |this|.
  37. SocketFactory(net::NetLog* net_log,
  38. net::URLRequestContext* url_request_context);
  39. SocketFactory(const SocketFactory&) = delete;
  40. SocketFactory& operator=(const SocketFactory&) = delete;
  41. virtual ~SocketFactory();
  42. // These all correspond to the NetworkContext methods of the same name.
  43. void CreateUDPSocket(mojo::PendingReceiver<mojom::UDPSocket> receiver,
  44. mojo::PendingRemote<mojom::UDPSocketListener> listener);
  45. void CreateTCPServerSocket(
  46. const net::IPEndPoint& local_addr,
  47. int backlog,
  48. const net::NetworkTrafficAnnotationTag& traffic_annotation,
  49. mojo::PendingReceiver<mojom::TCPServerSocket> receiver,
  50. mojom::NetworkContext::CreateTCPServerSocketCallback callback);
  51. void CreateTCPConnectedSocket(
  52. const absl::optional<net::IPEndPoint>& local_addr,
  53. const net::AddressList& remote_addr_list,
  54. mojom::TCPConnectedSocketOptionsPtr tcp_connected_socket_options,
  55. const net::NetworkTrafficAnnotationTag& traffic_annotation,
  56. mojo::PendingReceiver<mojom::TCPConnectedSocket> receiver,
  57. mojo::PendingRemote<mojom::SocketObserver> observer,
  58. mojom::NetworkContext::CreateTCPConnectedSocketCallback callback);
  59. void CreateTCPBoundSocket(
  60. const net::IPEndPoint& local_addr,
  61. const net::NetworkTrafficAnnotationTag& traffic_annotation,
  62. mojo::PendingReceiver<mojom::TCPBoundSocket> receiver,
  63. mojom::NetworkContext::CreateTCPBoundSocketCallback callback);
  64. // Destroys the specified BoundSocket object.
  65. void DestroyBoundSocket(mojo::ReceiverId bound_socket_id);
  66. // Invoked when a BoundSocket successfully starts listening. Destroys the
  67. // BoundSocket object, adding a binding for the provided TCPServerSocket in
  68. // its place.
  69. void OnBoundSocketListening(
  70. mojo::ReceiverId bound_socket_id,
  71. std::unique_ptr<TCPServerSocket> server_socket,
  72. mojo::PendingReceiver<mojom::TCPServerSocket> server_socket_receiver);
  73. // Invoked when a BoundSocket successfully establishes a connection. Destroys
  74. // the BoundSocket object, adding a binding for the provided
  75. // TCPConnectedSocket in its place.
  76. void OnBoundSocketConnected(
  77. mojo::ReceiverId bound_socket_id,
  78. std::unique_ptr<TCPConnectedSocket> connected_socket,
  79. mojo::PendingReceiver<mojom::TCPConnectedSocket>
  80. connected_socket_receiver);
  81. TLSSocketFactory* tls_socket_factory() { return &tls_socket_factory_; }
  82. private:
  83. // TCPServerSocket::Delegate implementation:
  84. void OnAccept(
  85. std::unique_ptr<TCPConnectedSocket> socket,
  86. mojo::PendingReceiver<mojom::TCPConnectedSocket> receiver) override;
  87. const raw_ptr<net::NetLog> net_log_;
  88. raw_ptr<net::ClientSocketFactory> client_socket_factory_;
  89. TLSSocketFactory tls_socket_factory_;
  90. mojo::UniqueReceiverSet<mojom::UDPSocket> udp_socket_receivers_;
  91. mojo::UniqueReceiverSet<mojom::TCPServerSocket> tcp_server_socket_receivers_;
  92. mojo::UniqueReceiverSet<mojom::TCPConnectedSocket>
  93. tcp_connected_socket_receiver_;
  94. mojo::UniqueReceiverSet<mojom::TCPBoundSocket> tcp_bound_socket_receivers_;
  95. };
  96. } // namespace network
  97. #endif // SERVICES_NETWORK_SOCKET_FACTORY_H_