NetworkAgentInfo.java revision 562cc54536f1e75d80855de4d1eccaeefd689a32
1/*
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
19import android.content.Context;
20import android.net.LinkProperties;
21import android.net.Network;
22import android.net.NetworkCapabilities;
23import android.net.NetworkInfo;
24import android.net.NetworkRequest;
25import android.os.Handler;
26import android.os.Messenger;
27import android.util.SparseArray;
28
29import com.android.internal.util.AsyncChannel;
30import com.android.server.connectivity.NetworkMonitor;
31
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;
46    public final NetworkMonitor networkMonitor;
47
48    /**
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;
59
60    // The list of NetworkRequests being satisfied by this Network.
61    public final SparseArray<NetworkRequest> networkRequests = new SparseArray<NetworkRequest>();
62    public final ArrayList<NetworkRequest> networkLingered = new ArrayList<NetworkRequest>();
63
64    public final Messenger messenger;
65    public final AsyncChannel asyncChannel;
66
67    public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, int netId, NetworkInfo info,
68            LinkProperties lp, NetworkCapabilities nc, int score, Context context,
69            Handler handler) {
70        this.messenger = messenger;
71        asyncChannel = ac;
72        network = new Network(netId);
73        networkInfo = info;
74        linkProperties = lp;
75        networkCapabilities = nc;
76        currentScore = score;
77        networkMonitor = new NetworkMonitor(context, handler, this);
78    }
79
80    public void addRequest(NetworkRequest networkRequest) {
81        if (networkRequest.needsBroadcasts) needsBroadcasts = true;
82
83        networkRequests.put(networkRequest.requestId, networkRequest);
84    }
85
86    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}
98