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