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