16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.anqp; 26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException; 46a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer; 56a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.ArrayList; 66a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Collections; 76a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.EnumMap; 86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.List; 96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Map; 106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/** 126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The Venue Name ANQP Element, IEEE802.11-2012 section 8.4.4.4 136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */ 146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class VenueNameElement extends ANQPElement { 156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final VenueGroup mGroup; 166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final VenueType mType; 176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private final List<I18Name> mNames; 186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 19777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist private static final Map<VenueGroup, Integer> sGroupBases = 206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist new EnumMap<VenueGroup, Integer>(VenueGroup.class); 216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public VenueNameElement(Constants.ANQPElementType infoID, ByteBuffer payload) 236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist throws ProtocolException { 246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist super(infoID); 256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (payload.remaining() < 2) 276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist throw new ProtocolException("Runt Venue Name"); 286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist int group = payload.get() & Constants.BYTE_MASK; 306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist int type = payload.get() & Constants.BYTE_MASK; 316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 326a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (group >= VenueGroup.values().length) { 336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mGroup = VenueGroup.Reserved; 346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mType = VenueType.Reserved; 356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } else { 366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mGroup = VenueGroup.values()[group]; 37777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist type += sGroupBases.get(mGroup); 386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (type >= VenueType.values().length) { 396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mType = VenueType.Reserved; 406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } else { 416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mType = VenueType.values()[type]; 426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mNames = new ArrayList<I18Name>(); 466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist while (payload.hasRemaining()) { 476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist mNames.add(new I18Name(payload)); 486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public VenueGroup getGroup() { 526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mGroup; 536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 556a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public VenueType getType() { 566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return mType; 576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public List<I18Name> getNames() { 606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return Collections.unmodifiableList(mNames); 616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 626a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String toString() { 6577f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist return "VenueName{" + 666a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist "m_group=" + mGroup + 676a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ", m_type=" + mType + 686a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ", m_names=" + mNames + 696a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist '}'; 706a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 716a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 726a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public enum VenueGroup { 736a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Unspecified, 746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Assembly, 756a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Business, 766a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Educational, 776a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist FactoryIndustrial, 786a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Institutional, 796a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Mercantile, 806a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Residential, 816a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Storage, 826a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UtilityMiscellaneous, 836a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Vehicular, 846a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Outdoor, 856a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Reserved 866a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 876a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 886a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public enum VenueType { 896a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Unspecified, 906a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 916a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedAssembly, 926a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Arena, 936a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Stadium, 946a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist PassengerTerminal, 956a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Amphitheater, 966a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist AmusementPark, 976a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist PlaceOfWorship, 986a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ConventionCenter, 996a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Library, 1006a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Museum, 1016a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Restaurant, 1026a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Theater, 1036a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Bar, 1046a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist CoffeeShop, 1056a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ZooOrAquarium, 1066a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist EmergencyCoordinationCenter, 1076a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1086a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedBusiness, 1096a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist DoctorDentistoffice, 1106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Bank, 1116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist FireStation, 1126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist PoliceStation, 1136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist PostOffice, 1146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ProfessionalOffice, 1156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ResearchDevelopmentFacility, 1166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist AttorneyOffice, 1176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedEducational, 1196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist SchoolPrimary, 1206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist SchoolSecondary, 1216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UniversityCollege, 1226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedFactoryIndustrial, 1246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Factory, 1256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedInstitutional, 1276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Hospital, 1286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist LongTermCareFacility, 1296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist AlcoholAndDrugRehabilitationCenter, 1306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist GroupHome, 1316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist PrisonJail, 1326a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedMercantile, 1346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist RetailStore, 1356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist GroceryMarket, 1366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist AutomotiveServiceStation, 1376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ShoppingMall, 1386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist GasStation, 1396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedResidential, 1416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist PrivateResidence, 1426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist HotelMotel, 1436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Dormitory, 1446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist BoardingHouse, 1456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedStorage, 1476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedUtilityMiscellaneous, 1496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 15077f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist UnspecifiedVehicular, 1516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist AutomobileOrTruck, 1526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Airplane, 1536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Bus, 1546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Ferry, 1556a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist ShipOrBoat, 1566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Train, 1576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist MotorBike, 1586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist UnspecifiedOutdoor, 1606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist MuniMeshNetwork, 1616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist CityPark, 1626a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist RestArea, 1636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist TrafficControl, 1646a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist BusStop, 1656a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Kiosk, 1666a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1676a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist Reserved 1686a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1696a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1706a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist private static final VenueType[] PerGroup = 1716a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist { 1726a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.Unspecified, 1736a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedAssembly, 1746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedBusiness, 1756a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedEducational, 1766a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedFactoryIndustrial, 1776a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedInstitutional, 1786a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedMercantile, 1796a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedResidential, 1806a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedStorage, 1816a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist VenueType.UnspecifiedUtilityMiscellaneous, 18277f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist VenueType.UnspecifiedVehicular, 183777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist VenueType.UnspecifiedOutdoor 1846a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist }; 1856a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1866a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist static { 1876a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist int index = 0; 1886a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist for (VenueType venue : PerGroup) { 189777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist sGroupBases.put(VenueGroup.values()[index++], venue.ordinal()); 1906a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1916a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1926a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist} 193