xref: /aosp_15_r20/external/cronet/net/quic/network_connection.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef NET_QUIC_NETWORK_CONNECTION_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_QUIC_NETWORK_CONNECTION_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
9*6777b538SAndroid Build Coastguard Worker #include "net/base/network_change_notifier.h"
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker namespace net {
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker // This class stores information about the current network type and
14*6777b538SAndroid Build Coastguard Worker // provides a textual description of it.
15*6777b538SAndroid Build Coastguard Worker class NET_EXPORT NetworkConnection
16*6777b538SAndroid Build Coastguard Worker     : public NetworkChangeNotifier::IPAddressObserver,
17*6777b538SAndroid Build Coastguard Worker       public NetworkChangeNotifier::ConnectionTypeObserver {
18*6777b538SAndroid Build Coastguard Worker  public:
19*6777b538SAndroid Build Coastguard Worker   NetworkConnection();
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker   NetworkConnection(const NetworkConnection&) = delete;
22*6777b538SAndroid Build Coastguard Worker   NetworkConnection& operator=(const NetworkConnection&) = delete;
23*6777b538SAndroid Build Coastguard Worker 
24*6777b538SAndroid Build Coastguard Worker   ~NetworkConnection() override;
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker   // Returns the underlying connection type.
connection_type()27*6777b538SAndroid Build Coastguard Worker   NetworkChangeNotifier::ConnectionType connection_type() {
28*6777b538SAndroid Build Coastguard Worker     return connection_type_;
29*6777b538SAndroid Build Coastguard Worker   }
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker   // Return a string equivalent of current connection type. Callers don't need
32*6777b538SAndroid Build Coastguard Worker   // to make a copy of the returned C-string value. If the connection type is
33*6777b538SAndroid Build Coastguard Worker   // CONNECTION_WIFI, then we'll tease out some details when we are on WiFi, and
34*6777b538SAndroid Build Coastguard Worker   // hopefully leave only ethernet (with no WiFi available) in the
35*6777b538SAndroid Build Coastguard Worker   // CONNECTION_UNKNOWN category.  This *might* err if there is both ethernet,
36*6777b538SAndroid Build Coastguard Worker   // as well as WiFi, where WiFi was not being used that much. Most platforms
37*6777b538SAndroid Build Coastguard Worker   // don't distinguish Wifi vs Ethernet, and call everything CONNECTION_UNKNOWN
38*6777b538SAndroid Build Coastguard Worker   // :-(. For non CONNECTIION_WIFI, this returns the C-string returned by
39*6777b538SAndroid Build Coastguard Worker   // NetworkChangeNotifier::ConnectionTypeToString.
connection_description()40*6777b538SAndroid Build Coastguard Worker   const char* connection_description() { return connection_description_; }
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker   // NetworkChangeNotifier::IPAddressObserver methods:
43*6777b538SAndroid Build Coastguard Worker   void OnIPAddressChanged() override;
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker   // NetworkChangeNotifier::ConnectionTypeObserver methods:
46*6777b538SAndroid Build Coastguard Worker   void OnConnectionTypeChanged(
47*6777b538SAndroid Build Coastguard Worker       NetworkChangeNotifier::ConnectionType type) override;
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker  private:
50*6777b538SAndroid Build Coastguard Worker   // Cache the connection type to avoid calling the potentially expensive
51*6777b538SAndroid Build Coastguard Worker   // NetworkChangeNotifier::GetConnectionType() function.
52*6777b538SAndroid Build Coastguard Worker   NetworkChangeNotifier::ConnectionType connection_type_ =
53*6777b538SAndroid Build Coastguard Worker       NetworkChangeNotifier::CONNECTION_UNKNOWN;
54*6777b538SAndroid Build Coastguard Worker   // Cache the connection description string to avoid calling the expensive
55*6777b538SAndroid Build Coastguard Worker   // GetWifiPHYLayerProtocol() function.
56*6777b538SAndroid Build Coastguard Worker   const char* connection_description_ = nullptr;
57*6777b538SAndroid Build Coastguard Worker };
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker }  // namespace net
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker #endif  // NET_QUIC_NETWORK_CONNECTION_H_
62