xref: /aosp_15_r20/external/webrtc/api/packet_socket_factory.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2019 The WebRTC Project Authors. All rights reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #ifndef API_PACKET_SOCKET_FACTORY_H_
12*d9f75844SAndroid Build Coastguard Worker #define API_PACKET_SOCKET_FACTORY_H_
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker #include <memory>
15*d9f75844SAndroid Build Coastguard Worker #include <string>
16*d9f75844SAndroid Build Coastguard Worker #include <vector>
17*d9f75844SAndroid Build Coastguard Worker 
18*d9f75844SAndroid Build Coastguard Worker #include "api/async_dns_resolver.h"
19*d9f75844SAndroid Build Coastguard Worker #include "api/wrapping_async_dns_resolver.h"
20*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/async_packet_socket.h"
21*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/proxy_info.h"
22*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/system/rtc_export.h"
23*d9f75844SAndroid Build Coastguard Worker 
24*d9f75844SAndroid Build Coastguard Worker namespace rtc {
25*d9f75844SAndroid Build Coastguard Worker 
26*d9f75844SAndroid Build Coastguard Worker class SSLCertificateVerifier;
27*d9f75844SAndroid Build Coastguard Worker class AsyncResolverInterface;
28*d9f75844SAndroid Build Coastguard Worker 
29*d9f75844SAndroid Build Coastguard Worker struct PacketSocketTcpOptions {
30*d9f75844SAndroid Build Coastguard Worker   PacketSocketTcpOptions() = default;
31*d9f75844SAndroid Build Coastguard Worker   ~PacketSocketTcpOptions() = default;
32*d9f75844SAndroid Build Coastguard Worker 
33*d9f75844SAndroid Build Coastguard Worker   int opts = 0;
34*d9f75844SAndroid Build Coastguard Worker   std::vector<std::string> tls_alpn_protocols;
35*d9f75844SAndroid Build Coastguard Worker   std::vector<std::string> tls_elliptic_curves;
36*d9f75844SAndroid Build Coastguard Worker   // An optional custom SSL certificate verifier that an API user can provide to
37*d9f75844SAndroid Build Coastguard Worker   // inject their own certificate verification logic (not available to users
38*d9f75844SAndroid Build Coastguard Worker   // outside of the WebRTC repo).
39*d9f75844SAndroid Build Coastguard Worker   SSLCertificateVerifier* tls_cert_verifier = nullptr;
40*d9f75844SAndroid Build Coastguard Worker };
41*d9f75844SAndroid Build Coastguard Worker 
42*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT PacketSocketFactory {
43*d9f75844SAndroid Build Coastguard Worker  public:
44*d9f75844SAndroid Build Coastguard Worker   enum Options {
45*d9f75844SAndroid Build Coastguard Worker     OPT_STUN = 0x04,
46*d9f75844SAndroid Build Coastguard Worker 
47*d9f75844SAndroid Build Coastguard Worker     // The TLS options below are mutually exclusive.
48*d9f75844SAndroid Build Coastguard Worker     OPT_TLS = 0x02,           // Real and secure TLS.
49*d9f75844SAndroid Build Coastguard Worker     OPT_TLS_FAKE = 0x01,      // Fake TLS with a dummy SSL handshake.
50*d9f75844SAndroid Build Coastguard Worker     OPT_TLS_INSECURE = 0x08,  // Insecure TLS without certificate validation.
51*d9f75844SAndroid Build Coastguard Worker 
52*d9f75844SAndroid Build Coastguard Worker     // Deprecated, use OPT_TLS_FAKE.
53*d9f75844SAndroid Build Coastguard Worker     OPT_SSLTCP = OPT_TLS_FAKE,
54*d9f75844SAndroid Build Coastguard Worker   };
55*d9f75844SAndroid Build Coastguard Worker 
56*d9f75844SAndroid Build Coastguard Worker   PacketSocketFactory() = default;
57*d9f75844SAndroid Build Coastguard Worker   virtual ~PacketSocketFactory() = default;
58*d9f75844SAndroid Build Coastguard Worker 
59*d9f75844SAndroid Build Coastguard Worker   virtual AsyncPacketSocket* CreateUdpSocket(const SocketAddress& address,
60*d9f75844SAndroid Build Coastguard Worker                                              uint16_t min_port,
61*d9f75844SAndroid Build Coastguard Worker                                              uint16_t max_port) = 0;
62*d9f75844SAndroid Build Coastguard Worker   virtual AsyncListenSocket* CreateServerTcpSocket(
63*d9f75844SAndroid Build Coastguard Worker       const SocketAddress& local_address,
64*d9f75844SAndroid Build Coastguard Worker       uint16_t min_port,
65*d9f75844SAndroid Build Coastguard Worker       uint16_t max_port,
66*d9f75844SAndroid Build Coastguard Worker       int opts) = 0;
67*d9f75844SAndroid Build Coastguard Worker 
68*d9f75844SAndroid Build Coastguard Worker   virtual AsyncPacketSocket* CreateClientTcpSocket(
69*d9f75844SAndroid Build Coastguard Worker       const SocketAddress& local_address,
70*d9f75844SAndroid Build Coastguard Worker       const SocketAddress& remote_address,
71*d9f75844SAndroid Build Coastguard Worker       const ProxyInfo& proxy_info,
72*d9f75844SAndroid Build Coastguard Worker       const std::string& user_agent,
73*d9f75844SAndroid Build Coastguard Worker       const PacketSocketTcpOptions& tcp_options) = 0;
74*d9f75844SAndroid Build Coastguard Worker 
75*d9f75844SAndroid Build Coastguard Worker   // The AsyncResolverInterface is deprecated; users are encouraged
76*d9f75844SAndroid Build Coastguard Worker   // to switch to the AsyncDnsResolverInterface.
77*d9f75844SAndroid Build Coastguard Worker   // TODO(bugs.webrtc.org/12598): Remove once all downstream users
78*d9f75844SAndroid Build Coastguard Worker   // are converted.
CreateAsyncResolver()79*d9f75844SAndroid Build Coastguard Worker   virtual AsyncResolverInterface* CreateAsyncResolver() {
80*d9f75844SAndroid Build Coastguard Worker     // Default implementation, so that downstream users can remove this
81*d9f75844SAndroid Build Coastguard Worker     // immediately after changing to CreateAsyncDnsResolver
82*d9f75844SAndroid Build Coastguard Worker     RTC_DCHECK_NOTREACHED();
83*d9f75844SAndroid Build Coastguard Worker     return nullptr;
84*d9f75844SAndroid Build Coastguard Worker   }
85*d9f75844SAndroid Build Coastguard Worker 
86*d9f75844SAndroid Build Coastguard Worker   virtual std::unique_ptr<webrtc::AsyncDnsResolverInterface>
CreateAsyncDnsResolver()87*d9f75844SAndroid Build Coastguard Worker   CreateAsyncDnsResolver() {
88*d9f75844SAndroid Build Coastguard Worker     // Default implementation, to aid in transition to AsyncDnsResolverInterface
89*d9f75844SAndroid Build Coastguard Worker     return std::make_unique<webrtc::WrappingAsyncDnsResolver>(
90*d9f75844SAndroid Build Coastguard Worker         CreateAsyncResolver());
91*d9f75844SAndroid Build Coastguard Worker   }
92*d9f75844SAndroid Build Coastguard Worker 
93*d9f75844SAndroid Build Coastguard Worker  private:
94*d9f75844SAndroid Build Coastguard Worker   PacketSocketFactory(const PacketSocketFactory&) = delete;
95*d9f75844SAndroid Build Coastguard Worker   PacketSocketFactory& operator=(const PacketSocketFactory&) = delete;
96*d9f75844SAndroid Build Coastguard Worker };
97*d9f75844SAndroid Build Coastguard Worker 
98*d9f75844SAndroid Build Coastguard Worker }  // namespace rtc
99*d9f75844SAndroid Build Coastguard Worker 
100*d9f75844SAndroid Build Coastguard Worker #endif  // API_PACKET_SOCKET_FACTORY_H_
101