ANQPData.java revision a1edc185d46d85e04930a5e12b465de9fea64afe
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 private int mRetry; 22 23 public ANQPData(NetworkDetail network, 24 Map<Constants.ANQPElementType, ANQPElement> anqpElements) { 25 26 mNetwork = network; 27 mANQPElements = anqpElements != null ? Collections.unmodifiableMap(anqpElements) : null; 28 mCtime = System.currentTimeMillis(); 29 mExpiry = mCtime + 30 ( network.getAnqpDomainID() == 0 ? 31 ANQP_UNQUALIFIED_CACHE_TIMEOUT : 32 ANQP_QUALIFIED_CACHE_TIMEOUT ); 33 mAtime = mCtime; 34 } 35 36 public Map<Constants.ANQPElementType, ANQPElement> getANQPElements() { 37 mAtime = System.currentTimeMillis(); 38 return mANQPElements; 39 } 40 41 public NetworkDetail getNetwork() { 42 return mNetwork; 43 } 44 45 public int getDomainID() { 46 return mNetwork.getAnqpDomainID(); 47 } 48 49 public long getCtime() { 50 return mCtime; 51 } 52 53 public long getAtime() { 54 return mAtime; 55 } 56 57 public boolean expired(long at) { 58 return mExpiry < at; 59 } 60 61 public boolean recacheable(long at) { 62 return mNetwork.getAnqpDomainID() == 0 || mCtime + ANQP_RECACHE_TIME < at; 63 } 64 65 public boolean isResolved() { 66 return mANQPElements != null; 67 } 68 69 public boolean expendable(long at) { 70 return mANQPElements == null && mCtime + ANQP_HOLDOFF_TIME < at; 71 } 72 73 public int incrementAndGetRetry() { 74 if (mANQPElements != null) { 75 return -1; 76 } 77 return ++mRetry; 78 } 79 80 @Override 81 public String toString() { 82 StringBuilder sb = new StringBuilder(); 83 sb.append(mNetwork.toKeyString()).append(", domid ").append(mNetwork.getAnqpDomainID()); 84 if (mANQPElements == null) { 85 sb.append(", unresolved, "); 86 } 87 else { 88 sb.append(", ").append(mANQPElements.size()).append(" elements, "); 89 } 90 long now = System.currentTimeMillis(); 91 sb.append(Utils.toHMS(now-mCtime)).append(" old, expires in "). 92 append(Utils.toHMS(mExpiry-now)).append(' '); 93 sb.append(expired(now) ? 'x' : '-'); 94 sb.append(recacheable(now) ? 'c' : '-'); 95 sb.append(isResolved() ? '-' : 'u'); 96 return sb.toString(); 97 } 98} 99