Home | History | Annotate | Download | only in anqp
      1 package com.android.server.wifi.anqp;
      2 
      3 import java.net.ProtocolException;
      4 import java.nio.ByteBuffer;
      5 import java.nio.charset.StandardCharsets;
      6 import java.util.ArrayList;
      7 import java.util.Collections;
      8 import java.util.List;
      9 
     10 import static com.android.server.wifi.anqp.Constants.BYTE_MASK;
     11 
     12 /**
     13  * The Network Authentication Type ANQP Element, IEEE802.11-2012 section 8.4.4.6
     14  */
     15 public class NetworkAuthenticationTypeElement extends ANQPElement {
     16 
     17     private final List<NetworkAuthentication> m_authenticationTypes;
     18 
     19     public enum NwkAuthTypeEnum {
     20         TermsAndConditions,
     21         OnLineEnrollment,
     22         HTTPRedirection,
     23         DNSRedirection,
     24         Reserved
     25     }
     26 
     27     public static class NetworkAuthentication {
     28         private final NwkAuthTypeEnum m_type;
     29         private final String m_url;
     30 
     31         private NetworkAuthentication(NwkAuthTypeEnum type, String url) {
     32             m_type = type;
     33             m_url = url;
     34         }
     35 
     36         public NwkAuthTypeEnum getType() {
     37             return m_type;
     38         }
     39 
     40         public String getURL() {
     41             return m_url;
     42         }
     43 
     44         @Override
     45         public String toString() {
     46             return "NetworkAuthentication{" +
     47                     "m_type=" + m_type +
     48                     ", m_url='" + m_url + '\'' +
     49                     '}';
     50         }
     51     }
     52 
     53     public NetworkAuthenticationTypeElement(Constants.ANQPElementType infoID, ByteBuffer payload)
     54             throws ProtocolException {
     55 
     56         super(infoID);
     57 
     58         m_authenticationTypes = new ArrayList<NetworkAuthentication>();
     59 
     60         while (payload.hasRemaining()) {
     61             int typeNumber = payload.get() & BYTE_MASK;
     62             NwkAuthTypeEnum type;
     63             type = typeNumber >= NwkAuthTypeEnum.values().length ?
     64                     NwkAuthTypeEnum.Reserved :
     65                     NwkAuthTypeEnum.values()[typeNumber];
     66 
     67             m_authenticationTypes.add(new NetworkAuthentication(type,
     68                     Constants.getPrefixedString(payload, 2, StandardCharsets.UTF_8)));
     69         }
     70     }
     71 
     72     public List<NetworkAuthentication> getAuthenticationTypes() {
     73         return Collections.unmodifiableList(m_authenticationTypes);
     74     }
     75 
     76     @Override
     77     public String toString() {
     78         return "NetworkAuthenticationType{" +
     79                 "m_authenticationTypes=" + m_authenticationTypes +
     80                 '}';
     81     }
     82 }
     83