blob: e9f968377f9f5781e8ed5829c0c2c5ff3954147c [file] [log] [blame]
Robert Greenwalt7b816022014-04-18 15:25:25 -07001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.server.connectivity;
18
Paul Jensenca8f16a2014-05-09 12:47:55 -040019import android.content.Context;
Robert Greenwalt7b816022014-04-18 15:25:25 -070020import android.net.LinkProperties;
21import android.net.Network;
22import android.net.NetworkCapabilities;
23import android.net.NetworkInfo;
24import android.net.NetworkRequest;
Paul Jensenca8f16a2014-05-09 12:47:55 -040025import android.os.Handler;
Robert Greenwalt7b816022014-04-18 15:25:25 -070026import android.os.Messenger;
27import android.util.SparseArray;
28
29import com.android.internal.util.AsyncChannel;
Paul Jensenca8f16a2014-05-09 12:47:55 -040030import com.android.server.connectivity.NetworkMonitor;
Robert Greenwalt7b816022014-04-18 15:25:25 -070031
32import java.util.ArrayList;
33
34/**
35 * A bag class used by ConnectivityService for holding a collection of most recent
36 * information published by a particular NetworkAgent as well as the
37 * AsyncChannel/messenger for reaching that NetworkAgent and lists of NetworkRequests
38 * interested in using it.
39 */
40public class NetworkAgentInfo {
41 public NetworkInfo networkInfo;
42 public final Network network;
43 public LinkProperties linkProperties;
44 public NetworkCapabilities networkCapabilities;
45 public int currentScore;
Paul Jensenca8f16a2014-05-09 12:47:55 -040046 public final NetworkMonitor networkMonitor;
47
Robert Greenwalt71bf33a2014-05-15 18:07:26 -070048 /**
49 * Indicates we need to send CONNECTIVITY_ACTION broadcasts for this network.
50 * For example the built-in default network request and any requsts coming from
51 * the deprecated startUsingNetworkFeature API will have this set. Networks
52 * responding to the new requestNetwork API will rely on point to point callbacks.
53 *
54 * Gets set if any legacy requests get affiliated with this network and
55 * stays set for life so we send disconnected bcasts to match the connected,
56 * even if the legacy request has moved on.
57 */
58 public boolean needsBroadcasts = false;
Robert Greenwalt7b816022014-04-18 15:25:25 -070059
60 // The list of NetworkRequests being satisfied by this Network.
61 public final SparseArray<NetworkRequest> networkRequests = new SparseArray<NetworkRequest>();
Robert Greenwalt9258c642014-03-26 16:47:06 -070062 public final ArrayList<NetworkRequest> networkLingered = new ArrayList<NetworkRequest>();
Robert Greenwalt7b816022014-04-18 15:25:25 -070063
Robert Greenwalt7b816022014-04-18 15:25:25 -070064 public final Messenger messenger;
65 public final AsyncChannel asyncChannel;
66
67 public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, int netId, NetworkInfo info,
Paul Jensenca8f16a2014-05-09 12:47:55 -040068 LinkProperties lp, NetworkCapabilities nc, int score, Context context,
69 Handler handler) {
Robert Greenwalt7b816022014-04-18 15:25:25 -070070 this.messenger = messenger;
71 asyncChannel = ac;
72 network = new Network(netId);
73 networkInfo = info;
74 linkProperties = lp;
75 networkCapabilities = nc;
76 currentScore = score;
Paul Jensenca8f16a2014-05-09 12:47:55 -040077 networkMonitor = new NetworkMonitor(context, handler, this);
Robert Greenwalt7b816022014-04-18 15:25:25 -070078 }
79
Robert Greenwalt71bf33a2014-05-15 18:07:26 -070080 public void addRequest(NetworkRequest networkRequest) {
81 if (networkRequest.needsBroadcasts) needsBroadcasts = true;
82
83 networkRequests.put(networkRequest.requestId, networkRequest);
84 }
85
Robert Greenwalt7b816022014-04-18 15:25:25 -070086 public String toString() {
87 return "NetworkAgentInfo{ ni{" + networkInfo + "} network{" +
88 network + "} lp{" +
89 linkProperties + "} nc{" +
90 networkCapabilities + "} Score{" + currentScore + "} }";
91 }
92
93 public String name() {
94 return "NetworkAgentInfo [" + networkInfo.getTypeName() + " (" +
95 networkInfo.getSubtypeName() + ")]";
96 }
97}