File: network_util.h

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (158 lines) | stat: -rw-r--r-- 6,621 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_ASH_COMPONENTS_NETWORK_NETWORK_UTIL_H_
#define CHROMEOS_ASH_COMPONENTS_NETWORK_NETWORK_UTIL_H_

// This header is introduced to make it easy to switch from chromeos_network.cc
// to Chrome's own DBus code.  crosbug.com/16557
// All calls to functions in chromeos_network.h should be made through
// functions provided by this header.

#include <stdint.h>

#include <memory>
#include <string>
#include <vector>

#include "base/component_export.h"
#include "base/functional/callback.h"
#include "base/time/time.h"
#include "base/values.h"

namespace ash {

class NetworkState;
class NetworkTypePattern;

// Struct for passing wifi access point data.
struct COMPONENT_EXPORT(CHROMEOS_NETWORK) WifiAccessPoint {
  WifiAccessPoint();
  WifiAccessPoint(const WifiAccessPoint& other);
  ~WifiAccessPoint();
  std::string ssid;  // The ssid of the WiFi node if available.
  std::string mac_address;  // The mac address of the WiFi node.
  base::Time timestamp;  // Timestamp when this AP was detected.
  int signal_strength;  // Radio signal strength measured in dBm.
  int signal_to_noise;  // Current signal to noise ratio measured in dB.
  int channel;  // Wifi channel number.
};

// Struct for passing cellular location data
// The age, signalStrength, and timingAdvance fields are currently unused:
// https://developers.google.com/maps/documentation/geolocation/intro#cell_tower_object
struct COMPONENT_EXPORT(CHROMEOS_NETWORK) CellTower {
  CellTower();
  CellTower(const CellTower& other);
  ~CellTower();
  std::string mcc;       // The mobile country code if available
  std::string mnc;       // The mobile network code if available
  std::string lac;       // The location area code if available
  std::string ci;        // The cell id if availabe
  base::Time timestamp;  // Timestamp when this location was detected.
};

// Struct for passing network scan result data.
struct COMPONENT_EXPORT(CHROMEOS_NETWORK) CellularScanResult {
  CellularScanResult();
  CellularScanResult(const CellularScanResult& other);
  ~CellularScanResult();
  std::string status;  // The network's availability status. (One of "unknown",
                       // "available", "current", or "forbidden")
  std::string network_id;  // 3GPP operator code ("MCCMNC").
  std::string short_name;  // Short-format name of the operator.
  std::string long_name;  // Long-format name of the operator.
  std::string technology;  // Access technology.
};

// Struct for passing cellular SIM slot info data.
struct COMPONENT_EXPORT(CHROMEOS_NETWORK) CellularSIMSlotInfo {
  CellularSIMSlotInfo();
  CellularSIMSlotInfo(const CellularSIMSlotInfo& other);
  ~CellularSIMSlotInfo();
  int32_t slot_id;      // The physical slot number.
  std::string eid;      // For eSIM capable SIM cards only, the EID of
                        // the SIM Card.
  std::string iccid;    // The ICCID of the SIM Card.
  bool primary;         // True if the slot is primary (active).
};

typedef std::vector<WifiAccessPoint> WifiAccessPointVector;
typedef std::vector<CellTower> CellTowerVector;

// Describes whether there is an error and whether the error came from
// the local system or from the server implementing the connect
// method.
enum NetworkMethodErrorType {
  NETWORK_METHOD_ERROR_NONE = 0,
  NETWORK_METHOD_ERROR_LOCAL = 1,
  NETWORK_METHOD_ERROR_REMOTE = 2,
};

namespace network_util {

// Converts a |prefix_length| to a netmask. (for IPv4 only)
// e.g. a |prefix_length| of 24 is converted to a netmask of "255.255.255.0".
// Invalid prefix lengths will return the empty string.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
std::string PrefixLengthToNetmask(int32_t prefix_length);

// Converts a |netmask| to a prefixlen. (for IPv4 only)
// e.g. a |netmask| of 255.255.255.0 is converted to a prefixlen of 24
COMPONENT_EXPORT(CHROMEOS_NETWORK)
int32_t NetmaskToPrefixLength(const std::string& netmask);

// Returns |shill_mac_address| in aa:bb format.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
std::string FormattedMacAddress(const std::string& shill_mac_address);

// Parses |list|, which contains dictionary Values and returns a vector of
// CellularScanResult in |scan_results|. Returns false if parsing fails,
// in which case the contents of |scan_results| will be undefined.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
bool ParseCellularScanResults(const base::Value::List& list,
                              std::vector<CellularScanResult>* scan_results);

// Parses |list|, which contains dictionary Values and returns a vector of
// CellularSIMSlotInfo in |sim_slot_infos|. Returns false if parsing fails,
// in which case the contents of |sim_slot_infos| will be undefined.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
bool ParseCellularSIMSlotInfo(const base::Value::List& list,
                              std::vector<CellularSIMSlotInfo>* sim_slot_infos);

// Retrieves the ONC state dictionary for |network| using GetStateProperties.
// This includes properties from the corresponding NetworkState if it exists.
// Assumed to be called from the primary user profile.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
base::Value::Dict TranslateNetworkStateToONC(const NetworkState* network);

// Retrieves the list of network services by passing |pattern|,
// |configured_only|, and |visible_only| to NetworkStateHandler::
// GetNetworkListByType(). Translates the result into a list of ONC
// dictionaries using TranslateShillServiceToONCPart. |limit| is used to limit
// the number of results.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
base::Value::List TranslateNetworkListToONC(NetworkTypePattern pattern,
                                            bool configured_only,
                                            bool visible_only,
                                            int limit);

// Returns the Shill type corresponding to ONC |type| or an empty string if
// there is no match. Only valid for ethernet, wifi, cellular, and vpn.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
std::string TranslateONCTypeToShill(const std::string& type);

// Returns the Shill security type corresponding to ONC |security| or an empty
// string if there is no match. Only valid for wifi.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
std::string TranslateONCSecurityToShill(const std::string& security);

// Inverse of TranslateONCTypeToShill.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
std::string TranslateShillTypeToONC(const std::string& type);

}  // namespace network_util
}  // namespace ash

#endif  // CHROMEOS_ASH_COMPONENTS_NETWORK_NETWORK_UTIL_H_