Avi Drissman | 6459548 | 2022-09-14 20:52:29 | [diff] [blame] | 1 | // Copyright 2011 The Chromium Authors |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef NET_SOCKET_UDP_CLIENT_SOCKET_H_ |
| 6 | #define NET_SOCKET_UDP_CLIENT_SOCKET_H_ |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 7 | |
tfarina | c40df1c | 2015-11-30 22:31:47 | [diff] [blame] | 8 | #include <stdint.h> |
| 9 | |
bnc | 81c46c1f | 2016-10-04 16:25:59 | [diff] [blame] | 10 | #include "net/base/net_export.h" |
tfarina | 5dd13c2 | 2016-11-16 12:08:26 | [diff] [blame] | 11 | #include "net/socket/datagram_client_socket.h" |
| 12 | #include "net/socket/udp_socket.h" |
[email protected] | a2b2cfc | 2017-12-06 09:06:08 | [diff] [blame] | 13 | #include "net/traffic_annotation/network_traffic_annotation.h" |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 14 | |
| 15 | namespace net { |
| 16 | |
mikecirone | f22f981 | 2016-10-04 03:40:19 | [diff] [blame] | 17 | class NetLog; |
| 18 | struct NetLogSource; |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 19 | |
| 20 | // A client socket that uses UDP as the transport layer. |
[email protected] | 172da1b | 2011-08-12 15:52:26 | [diff] [blame] | 21 | class NET_EXPORT_PRIVATE UDPClientSocket : public DatagramClientSocket { |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 22 | public: |
Stefano Duo | a44b119 | 2022-01-25 15:24:59 | [diff] [blame] | 23 | // If `network` is specified, the socket will be bound to it. All data traffic |
| 24 | // on the socket will be sent and received via `network`. Communication using |
| 25 | // this socket will fail if `network` disconnects. |
Stefano Duo | 6527ed4 | 2022-07-29 09:25:44 | [diff] [blame] | 26 | UDPClientSocket( |
| 27 | DatagramSocket::BindType bind_type, |
| 28 | net::NetLog* net_log, |
| 29 | const net::NetLogSource& source, |
| 30 | handles::NetworkHandle network = handles::kInvalidNetworkHandle); |
Peter Boström | 293b134 | 2021-09-22 17:31:43 | [diff] [blame] | 31 | |
| 32 | UDPClientSocket(const UDPClientSocket&) = delete; |
| 33 | UDPClientSocket& operator=(const UDPClientSocket&) = delete; |
| 34 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 35 | ~UDPClientSocket() override; |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 36 | |
[email protected] | 3f55aa1 | 2011-12-07 02:03:33 | [diff] [blame] | 37 | // DatagramClientSocket implementation. |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 38 | int Connect(const IPEndPoint& address) override; |
Stefano Duo | 6527ed4 | 2022-07-29 09:25:44 | [diff] [blame] | 39 | int ConnectUsingNetwork(handles::NetworkHandle network, |
jri | d248945 | 2016-03-31 22:42:08 | [diff] [blame] | 40 | const IPEndPoint& address) override; |
| 41 | int ConnectUsingDefaultNetwork(const IPEndPoint& address) override; |
Liza Burakova | 892ce1c | 2022-09-19 16:44:46 | [diff] [blame] | 42 | int ConnectAsync(const IPEndPoint& address, |
| 43 | CompletionOnceCallback callback) override; |
| 44 | int ConnectUsingNetworkAsync(handles::NetworkHandle network, |
| 45 | const IPEndPoint& address, |
| 46 | CompletionOnceCallback callback) override; |
| 47 | int ConnectUsingDefaultNetworkAsync(const IPEndPoint& address, |
| 48 | CompletionOnceCallback callback) override; |
| 49 | |
Stefano Duo | 6527ed4 | 2022-07-29 09:25:44 | [diff] [blame] | 50 | handles::NetworkHandle GetBoundNetwork() const override; |
Paul Jensen | 0f49dec | 2017-12-12 23:39:58 | [diff] [blame] | 51 | void ApplySocketTag(const SocketTag& tag) override; |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 52 | int Read(IOBuffer* buf, |
| 53 | int buf_len, |
Brad Lassey | 3a81417 | 2018-04-26 03:30:21 | [diff] [blame] | 54 | CompletionOnceCallback callback) override; |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 55 | int Write(IOBuffer* buf, |
| 56 | int buf_len, |
Brad Lassey | 3a81417 | 2018-04-26 03:30:21 | [diff] [blame] | 57 | CompletionOnceCallback callback, |
[email protected] | 578968d4 | 2017-12-13 15:39:32 | [diff] [blame] | 58 | const NetworkTrafficAnnotationTag& traffic_annotation) override; |
Charles 'Buck' Krasic | 762317f | 2018-03-30 20:08:09 | [diff] [blame] | 59 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 60 | void Close() override; |
| 61 | int GetPeerAddress(IPEndPoint* address) const override; |
| 62 | int GetLocalAddress(IPEndPoint* address) const override; |
Charles 'Buck' Krasic | 762317f | 2018-03-30 20:08:09 | [diff] [blame] | 63 | // Switch to use non-blocking IO. Must be called right after construction and |
| 64 | // before other calls. |
rch | a7c6592 | 2016-08-18 13:49:08 | [diff] [blame] | 65 | void UseNonBlockingIO() override; |
tfarina | c40df1c | 2015-11-30 22:31:47 | [diff] [blame] | 66 | int SetReceiveBufferSize(int32_t size) override; |
| 67 | int SetSendBufferSize(int32_t size) override; |
rch | ff006a1 | 2016-08-24 23:56:31 | [diff] [blame] | 68 | int SetDoNotFragment() override; |
Yixin Wang | 3ae76ca | 2018-03-15 17:18:52 | [diff] [blame] | 69 | void SetMsgConfirm(bool confirm) override; |
tfarina | 42834111 | 2016-09-22 13:38:20 | [diff] [blame] | 70 | const NetLogWithSource& NetLog() const override; |
kapishnikov | 7f8dd1e | 2018-01-24 06:10:49 | [diff] [blame] | 71 | void EnableRecvOptimization() override; |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 72 | |
Qingsi Wang | eb99403 | 2019-01-11 02:36:14 | [diff] [blame] | 73 | int SetMulticastInterface(uint32_t interface_index) override; |
Yu Su | ca37f3c | 2020-10-09 20:02:23 | [diff] [blame] | 74 | void SetIOSNetworkServiceType(int ios_network_service_type) override; |
Nidhi Jaju | 6f46e08 | 2022-12-14 09:09:20 | [diff] [blame] | 75 | void SetDontClose(bool dont_close) override; |
Charles 'Buck' Krasic | 762317f | 2018-03-30 20:08:09 | [diff] [blame] | 76 | |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 77 | private: |
| 78 | UDPSocket socket_; |
Stefano Duo | a44b119 | 2022-01-25 15:24:59 | [diff] [blame] | 79 | // The network the socket is currently bound to. |
Stefano Duo | 6527ed4 | 2022-07-29 09:25:44 | [diff] [blame] | 80 | handles::NetworkHandle network_; |
| 81 | handles::NetworkHandle connect_using_network_; |
[email protected] | a2798d9 | 2011-03-02 22:56:18 | [diff] [blame] | 82 | }; |
| 83 | |
| 84 | } // namespace net |
| 85 | |
| 86 | #endif // NET_SOCKET_UDP_CLIENT_SOCKET_H_ |