ANQPData.java revision 8366a82ee1bff4c66d3f3642bf0a60538de5d9da
1package com.android.server.wifi.hotspot2;
2
3import com.android.server.wifi.anqp.ANQPElement;
4import com.android.server.wifi.anqp.Constants;
5
6import java.util.Collections;
7import java.util.List;
8import java.util.Map;
9
10public class ANQPData {
11    private static final long ANQP_QUALIFIED_CACHE_TIMEOUT = 3600000L;
12    private static final long ANQP_UNQUALIFIED_CACHE_TIMEOUT = 60000L;
13    private static final long ANQP_HOLDOFF_TIME =              60000L;
14    private static final long ANQP_RECACHE_TIME =             300000L;
15
16    private final NetworkDetail mNetwork;
17    private final Map<Constants.ANQPElementType, ANQPElement> mANQPElements;
18    private final long mCtime;
19    private final long mExpiry;
20    private volatile long mAtime;
21
22    public ANQPData(NetworkDetail network,
23                    Map<Constants.ANQPElementType, ANQPElement> anqpElements) {
24
25        mNetwork = network;
26        mANQPElements = anqpElements != null ? Collections.unmodifiableMap(anqpElements) : null;
27        mCtime = System.currentTimeMillis();
28        mExpiry = mCtime +
29                ( network.getAnqpDomainID() == 0 ?
30                ANQP_UNQUALIFIED_CACHE_TIMEOUT :
31                ANQP_QUALIFIED_CACHE_TIMEOUT );
32        mAtime = mCtime;
33    }
34
35    public Map<Constants.ANQPElementType, ANQPElement> getANQPElements() {
36        mAtime = System.currentTimeMillis();
37        return mANQPElements;
38    }
39
40    public NetworkDetail getNetwork() {
41        return mNetwork;
42    }
43
44    public int getDomainID() {
45        return mNetwork.getAnqpDomainID();
46    }
47
48    public long getCtime() {
49        return mCtime;
50    }
51
52    public long getAtime() {
53        return mAtime;
54    }
55
56    public boolean expired(long at) {
57        return mExpiry < at;
58    }
59
60    public boolean recacheable(long at) {
61        return mNetwork.getAnqpDomainID() == 0 || mCtime + ANQP_RECACHE_TIME < at;
62    }
63
64    public boolean isResolved() {
65        return mANQPElements != null;
66    }
67
68    public boolean expendable(long at) {
69        return mANQPElements == null && mCtime + ANQP_HOLDOFF_TIME < at;
70    }
71
72    @Override
73    public String toString() {
74        StringBuilder sb = new StringBuilder();
75        sb.append(mNetwork.toKeyString()).append(", domid ").append(mNetwork.getAnqpDomainID());
76        if (mANQPElements == null) {
77            sb.append(", unresolved, ");
78        }
79        else {
80            sb.append(", ").append(mANQPElements.size()).append(" elements, ");
81        }
82        long now = System.currentTimeMillis();
83        sb.append(Utils.toHMS(now-mCtime)).append(" old, expires in ").
84                append(Utils.toHMS(mExpiry-now)).append(' ');
85        sb.append(expired(now) ? 'x' : '-');
86        sb.append(recacheable(now) ? 'c' : '-');
87        sb.append(isResolved() ? '-' : 'u');
88        return sb.toString();
89    }
90}
91