16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.anqp.eap; 26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException; 46a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer; 5a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvistimport java.util.EnumMap; 6a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvistimport java.util.HashMap; 7a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvistimport java.util.Map; 86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport static com.android.server.wifi.anqp.Constants.BYTE_MASK; 106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/** 126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * An EAP authentication parameter, IEEE802.11-2012, table 8-188 136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */ 146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class NonEAPInnerAuth implements AuthParam { 156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public enum NonEAPType {Reserved, PAP, CHAP, MSCHAP, MSCHAPv2} 17a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist private static final Map<NonEAPType, String> sOmaMap = new EnumMap<>(NonEAPType.class); 18a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist private static final Map<String, NonEAPType> sRevOmaMap = new HashMap<>(); 196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final NonEAPType mType; 216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 22a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist static { 23a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist sOmaMap.put(NonEAPType.PAP, "PAP"); 24a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist sOmaMap.put(NonEAPType.CHAP, "CHAP"); 25a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist sOmaMap.put(NonEAPType.MSCHAP, "MS-CHAP"); 26a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist sOmaMap.put(NonEAPType.MSCHAPv2, "MS-CHAP-V2"); 27a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist 28a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist for (Map.Entry<NonEAPType, String> entry : sOmaMap.entrySet()) { 29a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist sRevOmaMap.put(entry.getValue(), entry.getKey()); 30a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist } 31a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist } 32a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist 333be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist public NonEAPInnerAuth(int length, ByteBuffer payload) throws ProtocolException { 34777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist if (length != 1) { 353be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist throw new ProtocolException("Bad length: " + payload.remaining()); 36777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist } 373be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist 386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist int typeID = payload.get() & BYTE_MASK; 396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mType = typeID < NonEAPType.values().length ? 406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist NonEAPType.values()[typeID] : 416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist NonEAPType.Reserved; 426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 44a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist public NonEAPInnerAuth(NonEAPType type) { 45a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist mType = type; 46a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist } 47a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist 4871a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist /** 4971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist * Construct from the OMA-DM PPS data 5071a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist * @param eapType as defined in the HS2.0 spec. 5171a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist */ 5271a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist public NonEAPInnerAuth(String eapType) { 53a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist mType = sRevOmaMap.get(eapType); 5471a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist } 5571a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist 566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public EAP.AuthInfoID getAuthInfoID() { 586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return EAP.AuthInfoID.NonEAPInnerAuthType; 596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public NonEAPType getType() { 626a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mType; 636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 65a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist public String getOMAtype() { 66a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist return sOmaMap.get(mType); 67a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist } 68a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist 691d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist public static String mapInnerType(NonEAPType type) { 701d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist return sOmaMap.get(type); 711d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist } 721d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist 736a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public int hashCode() { 756a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mType.hashCode(); 766a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 776a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 786a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 796a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public boolean equals(Object thatObject) { 806a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (thatObject == this) { 816a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return true; 826a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } else if (thatObject == null || thatObject.getClass() != NonEAPInnerAuth.class) { 836a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return false; 846a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } else { 856a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return ((NonEAPInnerAuth) thatObject).getType() == getType(); 866a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 876a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 886a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 896a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 906a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String toString() { 917b2caa25fb57f2d95e0d0421704c49d3af4b8e6fJan Nordqvist return "Auth method NonEAPInnerAuthEAP, inner = " + mType + '\n'; 926a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 936a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist} 94