Loading packages/Osu/src/com/android/anqp/HSIconFileElement.java +15 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package com.android.anqp; import java.net.ProtocolException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.Arrays; import static com.android.anqp.Constants.BYTE_MASK; import static com.android.anqp.Constants.SHORT_MASK; Loading Loading @@ -49,6 +50,20 @@ public class HSIconFileElement extends ANQPElement { return mIconData; } @Override public boolean equals(Object thatObject) { if (thatObject == this) { return true; } else if (thatObject.getClass() != HSIconFileElement.class) { return false; } HSIconFileElement that = (HSIconFileElement) thatObject; if (getStatusCode() != that.getStatusCode() || getStatusCode() != StatusCode.Success) { return false; } return getType().equals(that.getType()) && Arrays.equals(getIconData(), that.getIconData()); } @Override public String toString() { return "HSIconFile{" + Loading packages/Osu/src/com/android/hotspot2/WifiNetworkAdapter.java +17 −21 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.net.CaptivePortal; import android.net.ConnectivityManager; import android.net.ICaptivePortal; import android.net.Network; import android.net.wifi.PasspointManagementObjectDefinition; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiInfo; Loading Loading @@ -85,18 +86,20 @@ public class WifiNetworkAdapter { } private void loadAllSps() { Log.d(OSUManager.TAG, "Loading all SPs"); WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); int count = 0; for (WifiConfiguration config : wifiManager.getPrivilegedConfiguredNetworks()) { String moTree = config.getMoTree(); if (moTree != null) { try { mPasspointConfigs.put(config.FQDN, new PasspointConfig(config)); count++; } catch (IOException | SAXException e) { Log.w(OSUManager.TAG, "Failed to parse MO: " + e); } } } Log.d(OSUManager.TAG, "Loaded " + count + " SPs"); } public Collection<HomeSP> getLoadedSPs() { Loading Loading @@ -131,21 +134,19 @@ public class WifiNetworkAdapter { mContext.startActivity(intent); } public HomeSP addSP(MOTree instanceTree) throws IOException, SAXException { public int addSP(String xml) throws IOException, SAXException { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); String xml = instanceTree.toXml(); wifiManager.addPasspointManagementObject(xml); return MOManager.buildSP(xml); return wifiManager.addPasspointManagementObject(xml); } public void removeSP(String fqdn) throws IOException { public int modifySP(HomeSP homeSP, Collection<MOData> mods) throws IOException { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); List<PasspointManagementObjectDefinition> defMods = new ArrayList<>(mods.size()); for (MOData mod : mods) { defMods.add(new PasspointManagementObjectDefinition(mod.getBaseURI(), mod.getURN(), mod.getMOTree().toXml())); } public HomeSP modifySP(HomeSP homeSP, Collection<MOData> mods) throws IOException { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); return null; return wifiManager.modifyPasspointManagementObject(homeSP.getFQDN(), defMods); } public Network getCurrentNetwork() { Loading Loading @@ -184,9 +185,9 @@ public class WifiNetworkAdapter { return passpointConfig != null ? passpointConfig.getWifiConfiguration() : null; } public WifiConfiguration getActivePasspointNetwork() { public HomeSP getCurrentSP() { PasspointConfig passpointConfig = getActivePasspointConfig(); return passpointConfig != null ? passpointConfig.getWifiConfiguration() : null; return passpointConfig != null ? passpointConfig.getHomeSP() : null; } private PasspointConfig getActivePasspointConfig() { Loading @@ -203,11 +204,6 @@ public class WifiNetworkAdapter { return null; } public HomeSP getCurrentSP() { PasspointConfig passpointConfig = getActivePasspointConfig(); return passpointConfig != null ? passpointConfig.getHomeSP() : null; } public void doIconQuery(long bssid, String fileName) { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); Log.d("ZXZ", String.format("Icon query for %012x '%s'", bssid, fileName)); Loading Loading @@ -289,11 +285,11 @@ public class WifiNetworkAdapter { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); WifiConfiguration config = new WifiConfiguration(); config.SSID = '"' + osuInfo.getSSID() + '"'; config.SSID = '"' + osuInfo.getOsuSsid() + '"'; if (osuInfo.getOSUBssid() != 0) { config.BSSID = Utils.macToString(osuInfo.getOSUBssid()); Log.d(OSUManager.TAG, String.format("Setting BSSID of '%s' to %012x", osuInfo.getSSID(), osuInfo.getOSUBssid())); osuInfo.getOsuSsid(), osuInfo.getOSUBssid())); } if (osuInfo.getOSUProvider().getOsuNai() == null) { Loading packages/Osu/src/com/android/hotspot2/est/ESTHandler.java +2 −1 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ import com.android.hotspot2.asn1.Asn1Object; import com.android.hotspot2.asn1.Asn1Oid; import com.android.hotspot2.asn1.OidMappings; import com.android.hotspot2.osu.HTTPHandler; import com.android.hotspot2.osu.OSUManager; import com.android.hotspot2.osu.OSUSocketFactory; import com.android.hotspot2.osu.commands.GetCertData; import com.android.hotspot2.pps.HomeSP; Loading Loading @@ -80,7 +81,7 @@ public class ESTHandler implements AutoCloseable { private PrivateKey mClientKey; public ESTHandler(GetCertData certData, Network network, OMADMAdapter omadmAdapter, KeyManager km, KeyStore ks, HomeSP homeSP, int flowType) KeyManager km, KeyStore ks, HomeSP homeSP, OSUManager.FlowType flowType) throws IOException, GeneralSecurityException { mURL = new URL(certData.getServer()); mUser = certData.getUserName(); Loading packages/Osu/src/com/android/hotspot2/omadm/MOManager.java +62 −17 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ public class MOManager { public HomeSP addSP(String xml, OSUManager osuManager) throws IOException, SAXException { OMAParser omaParser = new OMAParser(); return addSP(omaParser.parse(xml, OMAConstants.PPS_URN), osuManager); return addSP(omaParser.parse(xml, OMAConstants.PPS_URN)); } private static final List<String> FQDNPath = Arrays.asList(TAG_HomeSP, TAG_FQDN); Loading @@ -231,7 +231,7 @@ public class MOManager { * @param homeSP * @throws IOException */ public void addSP(HomeSP homeSP, OSUManager osuManager) throws IOException { public void addSP(HomeSP homeSP) throws IOException { if (!mEnabled) { throw new IOException("HS2.0 not enabled on this device"); } Loading @@ -245,18 +245,18 @@ public class MOManager { OMAConstructed dummyRoot = new OMAConstructed(null, TAG_PerProviderSubscription, null); buildHomeSPTree(homeSP, dummyRoot, mSPs.size() + 1); try { addSP(dummyRoot, osuManager); addSP(dummyRoot); } catch (FileNotFoundException fnfe) { MOTree tree = MOTree.buildMgmtTree(OMAConstants.PPS_URN, OMAConstants.OMAVersion, dummyRoot); // No file to load a pre-build MO tree from, create a new one and save it. //MOTree tree = new MOTree(OMAConstants.PPS_URN, OMAConstants.OMAVersion, dummyRoot); writeMO(tree, mPpsFile, osuManager); writeMO(tree, mPpsFile); } mSPs.put(homeSP.getFQDN(), homeSP); } public HomeSP addSP(MOTree instanceTree, OSUManager osuManager) throws IOException { public HomeSP addSP(MOTree instanceTree) throws IOException { List<HomeSP> spList = buildSPs(instanceTree); if (spList.size() != 1) { throw new OMAException("Expected exactly one HomeSP, got " + spList.size()); Loading @@ -272,11 +272,11 @@ public class MOManager { getChild(TAG_PerProviderSubscription); try { addSP(pps, osuManager); addSP(pps); } catch (FileNotFoundException fnfe) { MOTree tree = new MOTree(instanceTree.getUrn(), instanceTree.getDtdRev(), instanceTree.getRoot()); writeMO(tree, mPpsFile, osuManager); writeMO(tree, mPpsFile); } return sp; Loading @@ -289,7 +289,7 @@ public class MOManager { * @param mo The new MO * @throws IOException */ private void addSP(OMANode mo, OSUManager osuManager) throws IOException { private void addSP(OMANode mo) throws IOException { MOTree moTree; try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(mPpsFile))) { moTree = MOTree.unmarshal(in); Loading @@ -315,7 +315,7 @@ public class MOManager { } */ } writeMO(moTree, mPpsFile, osuManager); writeMO(moTree, mPpsFile); } private static OMAConstructed findTargetTree(MOTree moTree, String fqdn) throws OMAException { Loading Loading @@ -347,7 +347,53 @@ public class MOManager { throw new OMAException("Cannot find instance node"); } public HomeSP modifySP(HomeSP homeSP, Collection<MOData> mods, OSUManager osuManager) public static HomeSP modifySP(HomeSP homeSP, MOTree moTree, Collection<MOData> mods) throws OMAException { OMAConstructed ppsTree = (OMAConstructed) moTree.getRoot().getChildren().iterator().next(); OMAConstructed instance = getInstanceNode(ppsTree); int ppsMods = 0; int updateIdentifier = homeSP.getUpdateIdentifier(); for (MOData mod : mods) { LinkedList<String> tailPath = getTailPath(mod.getBaseURI(), TAG_PerProviderSubscription); OMAConstructed modRoot = mod.getMOTree().getRoot(); // modRoot is the MgmtTree with the actual object as a direct child // (e.g. Credential) if (tailPath.getFirst().equals(TAG_UpdateIdentifier)) { updateIdentifier = getInteger(modRoot.getChildren().iterator().next()); OMANode oldUdi = ppsTree.getChild(TAG_UpdateIdentifier); if (getInteger(oldUdi) != updateIdentifier) { ppsMods++; } if (oldUdi != null) { ppsTree.replaceNode(oldUdi, modRoot.getChild(TAG_UpdateIdentifier)); } else { ppsTree.addChild(modRoot.getChild(TAG_UpdateIdentifier)); } } else { tailPath.removeFirst(); // Drop the instance OMANode current = instance.getListValue(tailPath.iterator()); if (current == null) { throw new OMAException("No previous node for " + tailPath + " in " + homeSP.getFQDN()); } for (OMANode newNode : modRoot.getChildren()) { // newNode is something like Credential // current is the same existing node OMANode old = current.getParent().replaceNode(current, newNode); ppsMods++; } } } return ppsMods > 0 ? buildHomeSP(instance, updateIdentifier) : null; } public HomeSP modifySP(HomeSP homeSP, Collection<MOData> mods) throws IOException { Log.d(OSUManager.TAG, "modifying SP: " + mods); Loading Loading @@ -398,7 +444,7 @@ public class MOManager { } } } writeMO(moTree, mPpsFile, osuManager); writeMO(moTree, mPpsFile); if (ppsMods == 0) { return null; // HomeSP not modified. Loading @@ -419,7 +465,7 @@ public class MOManager { } private static LinkedList<String> getTailPath(String pathString, String rootName) throws IOException { throws OMAException { String[] path = pathString.split("/"); int pathIndex; for (pathIndex = 0; pathIndex < path.length; pathIndex++) { Loading @@ -429,7 +475,7 @@ public class MOManager { } } if (pathIndex >= path.length) { throw new IOException("Bad node-path: " + pathString); throw new OMAException("Bad node-path: " + pathString); } LinkedList<String> tailPath = new LinkedList<>(); while (pathIndex < path.length) { Loading @@ -443,7 +489,7 @@ public class MOManager { return mSPs.get(fqdn); } public void removeSP(String fqdn, OSUManager osuManager) throws IOException { public void removeSP(String fqdn) throws IOException { if (mSPs.remove(fqdn) == null) { Log.d(OSUManager.TAG, "No HS20 profile to delete for " + fqdn); return; Loading @@ -464,8 +510,7 @@ public class MOManager { throw new IOException("Failed to remove " + fqdn + " out of MO tree"); } } writeMO(moTree, mPpsFile, osuManager); osuManager.spDeleted(fqdn); writeMO(moTree, mPpsFile); } public MOTree getMOTree(HomeSP homeSP) throws IOException { Loading @@ -479,7 +524,7 @@ public class MOManager { } } private static void writeMO(MOTree moTree, File f, OSUManager osuManager) throws IOException { private static void writeMO(MOTree moTree, File f) throws IOException { try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f, false))) { moTree.marshal(out); Loading packages/Osu/src/com/android/hotspot2/omadm/MOTree.java +1 −1 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ public class MOTree { case OMAConstants.DevInfoURN: case OMAConstants.DevDetailURN: case OMAConstants.DevDetailXURN: realRoot = new OMAConstructed(null, MgmtTreeTag, urn, "xmlns", OMAConstants.SyncML); realRoot = new MgmtTreeRoot(OMAConstants.OMAVersion); realRoot.addChild(root); return new MOTree(urn, rev, realRoot); default: Loading Loading
packages/Osu/src/com/android/anqp/HSIconFileElement.java +15 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ package com.android.anqp; import java.net.ProtocolException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.Arrays; import static com.android.anqp.Constants.BYTE_MASK; import static com.android.anqp.Constants.SHORT_MASK; Loading Loading @@ -49,6 +50,20 @@ public class HSIconFileElement extends ANQPElement { return mIconData; } @Override public boolean equals(Object thatObject) { if (thatObject == this) { return true; } else if (thatObject.getClass() != HSIconFileElement.class) { return false; } HSIconFileElement that = (HSIconFileElement) thatObject; if (getStatusCode() != that.getStatusCode() || getStatusCode() != StatusCode.Success) { return false; } return getType().equals(that.getType()) && Arrays.equals(getIconData(), that.getIconData()); } @Override public String toString() { return "HSIconFile{" + Loading
packages/Osu/src/com/android/hotspot2/WifiNetworkAdapter.java +17 −21 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import android.net.CaptivePortal; import android.net.ConnectivityManager; import android.net.ICaptivePortal; import android.net.Network; import android.net.wifi.PasspointManagementObjectDefinition; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiInfo; Loading Loading @@ -85,18 +86,20 @@ public class WifiNetworkAdapter { } private void loadAllSps() { Log.d(OSUManager.TAG, "Loading all SPs"); WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); int count = 0; for (WifiConfiguration config : wifiManager.getPrivilegedConfiguredNetworks()) { String moTree = config.getMoTree(); if (moTree != null) { try { mPasspointConfigs.put(config.FQDN, new PasspointConfig(config)); count++; } catch (IOException | SAXException e) { Log.w(OSUManager.TAG, "Failed to parse MO: " + e); } } } Log.d(OSUManager.TAG, "Loaded " + count + " SPs"); } public Collection<HomeSP> getLoadedSPs() { Loading Loading @@ -131,21 +134,19 @@ public class WifiNetworkAdapter { mContext.startActivity(intent); } public HomeSP addSP(MOTree instanceTree) throws IOException, SAXException { public int addSP(String xml) throws IOException, SAXException { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); String xml = instanceTree.toXml(); wifiManager.addPasspointManagementObject(xml); return MOManager.buildSP(xml); return wifiManager.addPasspointManagementObject(xml); } public void removeSP(String fqdn) throws IOException { public int modifySP(HomeSP homeSP, Collection<MOData> mods) throws IOException { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); List<PasspointManagementObjectDefinition> defMods = new ArrayList<>(mods.size()); for (MOData mod : mods) { defMods.add(new PasspointManagementObjectDefinition(mod.getBaseURI(), mod.getURN(), mod.getMOTree().toXml())); } public HomeSP modifySP(HomeSP homeSP, Collection<MOData> mods) throws IOException { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); return null; return wifiManager.modifyPasspointManagementObject(homeSP.getFQDN(), defMods); } public Network getCurrentNetwork() { Loading Loading @@ -184,9 +185,9 @@ public class WifiNetworkAdapter { return passpointConfig != null ? passpointConfig.getWifiConfiguration() : null; } public WifiConfiguration getActivePasspointNetwork() { public HomeSP getCurrentSP() { PasspointConfig passpointConfig = getActivePasspointConfig(); return passpointConfig != null ? passpointConfig.getWifiConfiguration() : null; return passpointConfig != null ? passpointConfig.getHomeSP() : null; } private PasspointConfig getActivePasspointConfig() { Loading @@ -203,11 +204,6 @@ public class WifiNetworkAdapter { return null; } public HomeSP getCurrentSP() { PasspointConfig passpointConfig = getActivePasspointConfig(); return passpointConfig != null ? passpointConfig.getHomeSP() : null; } public void doIconQuery(long bssid, String fileName) { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); Log.d("ZXZ", String.format("Icon query for %012x '%s'", bssid, fileName)); Loading Loading @@ -289,11 +285,11 @@ public class WifiNetworkAdapter { WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); WifiConfiguration config = new WifiConfiguration(); config.SSID = '"' + osuInfo.getSSID() + '"'; config.SSID = '"' + osuInfo.getOsuSsid() + '"'; if (osuInfo.getOSUBssid() != 0) { config.BSSID = Utils.macToString(osuInfo.getOSUBssid()); Log.d(OSUManager.TAG, String.format("Setting BSSID of '%s' to %012x", osuInfo.getSSID(), osuInfo.getOSUBssid())); osuInfo.getOsuSsid(), osuInfo.getOSUBssid())); } if (osuInfo.getOSUProvider().getOsuNai() == null) { Loading
packages/Osu/src/com/android/hotspot2/est/ESTHandler.java +2 −1 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ import com.android.hotspot2.asn1.Asn1Object; import com.android.hotspot2.asn1.Asn1Oid; import com.android.hotspot2.asn1.OidMappings; import com.android.hotspot2.osu.HTTPHandler; import com.android.hotspot2.osu.OSUManager; import com.android.hotspot2.osu.OSUSocketFactory; import com.android.hotspot2.osu.commands.GetCertData; import com.android.hotspot2.pps.HomeSP; Loading Loading @@ -80,7 +81,7 @@ public class ESTHandler implements AutoCloseable { private PrivateKey mClientKey; public ESTHandler(GetCertData certData, Network network, OMADMAdapter omadmAdapter, KeyManager km, KeyStore ks, HomeSP homeSP, int flowType) KeyManager km, KeyStore ks, HomeSP homeSP, OSUManager.FlowType flowType) throws IOException, GeneralSecurityException { mURL = new URL(certData.getServer()); mUser = certData.getUserName(); Loading
packages/Osu/src/com/android/hotspot2/omadm/MOManager.java +62 −17 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ public class MOManager { public HomeSP addSP(String xml, OSUManager osuManager) throws IOException, SAXException { OMAParser omaParser = new OMAParser(); return addSP(omaParser.parse(xml, OMAConstants.PPS_URN), osuManager); return addSP(omaParser.parse(xml, OMAConstants.PPS_URN)); } private static final List<String> FQDNPath = Arrays.asList(TAG_HomeSP, TAG_FQDN); Loading @@ -231,7 +231,7 @@ public class MOManager { * @param homeSP * @throws IOException */ public void addSP(HomeSP homeSP, OSUManager osuManager) throws IOException { public void addSP(HomeSP homeSP) throws IOException { if (!mEnabled) { throw new IOException("HS2.0 not enabled on this device"); } Loading @@ -245,18 +245,18 @@ public class MOManager { OMAConstructed dummyRoot = new OMAConstructed(null, TAG_PerProviderSubscription, null); buildHomeSPTree(homeSP, dummyRoot, mSPs.size() + 1); try { addSP(dummyRoot, osuManager); addSP(dummyRoot); } catch (FileNotFoundException fnfe) { MOTree tree = MOTree.buildMgmtTree(OMAConstants.PPS_URN, OMAConstants.OMAVersion, dummyRoot); // No file to load a pre-build MO tree from, create a new one and save it. //MOTree tree = new MOTree(OMAConstants.PPS_URN, OMAConstants.OMAVersion, dummyRoot); writeMO(tree, mPpsFile, osuManager); writeMO(tree, mPpsFile); } mSPs.put(homeSP.getFQDN(), homeSP); } public HomeSP addSP(MOTree instanceTree, OSUManager osuManager) throws IOException { public HomeSP addSP(MOTree instanceTree) throws IOException { List<HomeSP> spList = buildSPs(instanceTree); if (spList.size() != 1) { throw new OMAException("Expected exactly one HomeSP, got " + spList.size()); Loading @@ -272,11 +272,11 @@ public class MOManager { getChild(TAG_PerProviderSubscription); try { addSP(pps, osuManager); addSP(pps); } catch (FileNotFoundException fnfe) { MOTree tree = new MOTree(instanceTree.getUrn(), instanceTree.getDtdRev(), instanceTree.getRoot()); writeMO(tree, mPpsFile, osuManager); writeMO(tree, mPpsFile); } return sp; Loading @@ -289,7 +289,7 @@ public class MOManager { * @param mo The new MO * @throws IOException */ private void addSP(OMANode mo, OSUManager osuManager) throws IOException { private void addSP(OMANode mo) throws IOException { MOTree moTree; try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(mPpsFile))) { moTree = MOTree.unmarshal(in); Loading @@ -315,7 +315,7 @@ public class MOManager { } */ } writeMO(moTree, mPpsFile, osuManager); writeMO(moTree, mPpsFile); } private static OMAConstructed findTargetTree(MOTree moTree, String fqdn) throws OMAException { Loading Loading @@ -347,7 +347,53 @@ public class MOManager { throw new OMAException("Cannot find instance node"); } public HomeSP modifySP(HomeSP homeSP, Collection<MOData> mods, OSUManager osuManager) public static HomeSP modifySP(HomeSP homeSP, MOTree moTree, Collection<MOData> mods) throws OMAException { OMAConstructed ppsTree = (OMAConstructed) moTree.getRoot().getChildren().iterator().next(); OMAConstructed instance = getInstanceNode(ppsTree); int ppsMods = 0; int updateIdentifier = homeSP.getUpdateIdentifier(); for (MOData mod : mods) { LinkedList<String> tailPath = getTailPath(mod.getBaseURI(), TAG_PerProviderSubscription); OMAConstructed modRoot = mod.getMOTree().getRoot(); // modRoot is the MgmtTree with the actual object as a direct child // (e.g. Credential) if (tailPath.getFirst().equals(TAG_UpdateIdentifier)) { updateIdentifier = getInteger(modRoot.getChildren().iterator().next()); OMANode oldUdi = ppsTree.getChild(TAG_UpdateIdentifier); if (getInteger(oldUdi) != updateIdentifier) { ppsMods++; } if (oldUdi != null) { ppsTree.replaceNode(oldUdi, modRoot.getChild(TAG_UpdateIdentifier)); } else { ppsTree.addChild(modRoot.getChild(TAG_UpdateIdentifier)); } } else { tailPath.removeFirst(); // Drop the instance OMANode current = instance.getListValue(tailPath.iterator()); if (current == null) { throw new OMAException("No previous node for " + tailPath + " in " + homeSP.getFQDN()); } for (OMANode newNode : modRoot.getChildren()) { // newNode is something like Credential // current is the same existing node OMANode old = current.getParent().replaceNode(current, newNode); ppsMods++; } } } return ppsMods > 0 ? buildHomeSP(instance, updateIdentifier) : null; } public HomeSP modifySP(HomeSP homeSP, Collection<MOData> mods) throws IOException { Log.d(OSUManager.TAG, "modifying SP: " + mods); Loading Loading @@ -398,7 +444,7 @@ public class MOManager { } } } writeMO(moTree, mPpsFile, osuManager); writeMO(moTree, mPpsFile); if (ppsMods == 0) { return null; // HomeSP not modified. Loading @@ -419,7 +465,7 @@ public class MOManager { } private static LinkedList<String> getTailPath(String pathString, String rootName) throws IOException { throws OMAException { String[] path = pathString.split("/"); int pathIndex; for (pathIndex = 0; pathIndex < path.length; pathIndex++) { Loading @@ -429,7 +475,7 @@ public class MOManager { } } if (pathIndex >= path.length) { throw new IOException("Bad node-path: " + pathString); throw new OMAException("Bad node-path: " + pathString); } LinkedList<String> tailPath = new LinkedList<>(); while (pathIndex < path.length) { Loading @@ -443,7 +489,7 @@ public class MOManager { return mSPs.get(fqdn); } public void removeSP(String fqdn, OSUManager osuManager) throws IOException { public void removeSP(String fqdn) throws IOException { if (mSPs.remove(fqdn) == null) { Log.d(OSUManager.TAG, "No HS20 profile to delete for " + fqdn); return; Loading @@ -464,8 +510,7 @@ public class MOManager { throw new IOException("Failed to remove " + fqdn + " out of MO tree"); } } writeMO(moTree, mPpsFile, osuManager); osuManager.spDeleted(fqdn); writeMO(moTree, mPpsFile); } public MOTree getMOTree(HomeSP homeSP) throws IOException { Loading @@ -479,7 +524,7 @@ public class MOManager { } } private static void writeMO(MOTree moTree, File f, OSUManager osuManager) throws IOException { private static void writeMO(MOTree moTree, File f) throws IOException { try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f, false))) { moTree.marshal(out); Loading
packages/Osu/src/com/android/hotspot2/omadm/MOTree.java +1 −1 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ public class MOTree { case OMAConstants.DevInfoURN: case OMAConstants.DevDetailURN: case OMAConstants.DevDetailXURN: realRoot = new OMAConstructed(null, MgmtTreeTag, urn, "xmlns", OMAConstants.SyncML); realRoot = new MgmtTreeRoot(OMAConstants.OMAVersion); realRoot.addChild(root); return new MOTree(urn, rev, realRoot); default: Loading