diff options
author | Vinit Deshpande <vinitd@google.com> | 2015-03-11 17:43:20 -0700 |
---|---|---|
committer | Vinit Deshpande <vinitd@google.com> | 2015-03-17 12:19:14 -0700 |
commit | af955ffa0082189fb688429732427c333f2491ce (patch) | |
tree | 896e613eef1e325d439e59776734c6e4533630cc /service/java/com/android/server/wifi/hotspot2/omadm | |
parent | fea443b1b8807443544dfdb29a9c237b3ccf964a (diff) | |
download | android_frameworks_opt_net_wifi-af955ffa0082189fb688429732427c333f2491ce.tar.gz android_frameworks_opt_net_wifi-af955ffa0082189fb688429732427c333f2491ce.tar.bz2 android_frameworks_opt_net_wifi-af955ffa0082189fb688429732427c333f2491ce.zip |
Integration fixes to add/save/restore passpoint networks
Change-Id: Ic7fad523e1fe2bdc7ac9509b5998576b62909fcd
Diffstat (limited to 'service/java/com/android/server/wifi/hotspot2/omadm')
5 files changed, 98 insertions, 8 deletions
diff --git a/service/java/com/android/server/wifi/hotspot2/omadm/MOManager.java b/service/java/com/android/server/wifi/hotspot2/omadm/MOManager.java index 7e5bd9661..43c01f210 100644 --- a/service/java/com/android/server/wifi/hotspot2/omadm/MOManager.java +++ b/service/java/com/android/server/wifi/hotspot2/omadm/MOManager.java @@ -1,5 +1,7 @@ package com.android.server.wifi.hotspot2.omadm; +import android.util.Log; + import com.android.server.wifi.anqp.eap.EAP; import com.android.server.wifi.anqp.eap.EAPMethod; import com.android.server.wifi.anqp.eap.ExpandedEAPMethod; @@ -66,6 +68,7 @@ public class MOManager { while (in.available() > 0) { MOTree tree = MOTree.unmarshal(in); if (tree != null) { + Log.d("PARSE-LOG", "adding tree no " + trees.size()); trees.add(tree); } else { break; @@ -81,18 +84,30 @@ public class MOManager { } } + Log.d("PARSE-LOG", "number of trees " + trees.size()); for (MOTree moTree : trees) { + Log.d("PARSE-LOG", "pasring a moTree"); List<HomeSP> sp = buildSPs(moTree); if (sp != null) { + Log.d("PARSE-LOG", "built " + sp.size() + " HomeSPs"); sps.addAll(sp); + } else { + Log.d("PARSE-LOG", "failed to build HomeSP"); } } + Log.d("PARSE-LOG", "collected " + sps.size()); for (HomeSP sp : sps) { + Log.d("PARSE-LOG", "adding " + sp.getFQDN()); if (mSPs.put(sp.getFQDN(), sp) != null) { + Log.d("PARSE-LOG", "failed to add " + sp.getFQDN()); throw new OMAException("Multiple SPs for FQDN '" + sp.getFQDN() + "'"); + } else { + Log.d("PARSE-LOG", "added " + sp.getFQDN() + " to list"); } } + + Log.d("PARSE-LOG", "found " + mSPs.size() + " configurations"); return sps; } @@ -128,19 +143,58 @@ public class MOManager { } public void saveAllSps(Collection<HomeSP> homeSPs) throws IOException { - OMAConstructed root = new OMAConstructed(null, TAG_PerProviderSubscription, ""); + + OMAConstructed root = new OMAConstructed(null, "MgmtTree", ""); for (HomeSP homeSP : homeSPs) { + OMANode providerNode = root.addChild(TAG_PerProviderSubscription, null, null, null); + OMANode providerSubNode = providerNode.addChild("Node", null, null, null); + + Log.d("PARSE-LOG", "creating node homeSP for " + homeSP.getFQDN()); + if (mSPs.put(homeSP.getFQDN(), homeSP) != null) { throw new OMAException("SP " + homeSP.getFQDN() + " already exists"); } - OMAConstructed homeSpNode = new OMAConstructed(root, TAG_HomeSP, ""); + OMANode homeSpNode = providerSubNode.addChild(TAG_HomeSP, null, null, null); homeSpNode.addChild(TAG_FQDN, null, homeSP.getFQDN(), null); homeSpNode.addChild(TAG_FriendlyName, null, homeSP.getFriendlyName(), null); - OMAConstructed credentialNode = new OMAConstructed(homeSpNode, TAG_Credential, ""); + OMANode credentialNode = providerSubNode.addChild(TAG_Credential, null, null, null); + Credential cred = homeSP.getCredential(); + EAPMethod method = cred.getEAPMethod(); + + if (method == null) { + throw new OMAException("SP " + homeSP.getFQDN() + " already exists"); + } + + OMANode credRootNode; + if (method.getEAPMethodID() == EAP.EAPMethodID.EAP_SIM + || method.getEAPMethodID() == EAP.EAPMethodID.EAP_AKA + || method.getEAPMethodID() == EAP.EAPMethodID.EAP_AKAPrim) { + + Log.d("PARSE-LOG", "Saving SIM credential"); + credRootNode = credentialNode.addChild(TAG_SIM, null, null, null); + credRootNode.addChild(TAG_IMSI, null, homeSP.getCredential().getImsi(), null); + + } else if (method.getEAPMethodID() == EAP.EAPMethodID.EAP_TTLS) { + + Log.d("PARSE-LOG", "Saving TTLS Credential"); + credRootNode = credentialNode.addChild(TAG_UsernamePassword, null, null, null); + + } else if (method.getEAPMethodID() == EAP.EAPMethodID.EAP_TLS) { + + Log.d("PARSE-LOG", "Saving TLS Credential"); + credRootNode = credentialNode.addChild(TAG_DigitalCertificate, null, null, null); + + } else { + throw new OMAException("Invalid credential on " + homeSP.getFQDN()); + } + credentialNode.addChild(TAG_Realm, null, homeSP.getCredential().getRealm(), null); - credentialNode.addChild(TAG_IMSI, null, homeSP.getCredential().getImsi(), null); + credentialNode.addChild(TAG_CheckAAAServerCertStatus, null, "true", null); + OMANode EapMethodNode = credRootNode.addChild(TAG_EAPMethod, null, null, null); + OMANode EapTypeNode = EapMethodNode.addChild(TAG_EAPType, + null, method.getEAPMethodID().toString(), null); StringBuilder builder = new StringBuilder(); for (Long roamingConsortium : homeSP.getRoamingConsortiums()) { @@ -149,6 +203,8 @@ public class MOManager { credentialNode.addChild(TAG_RoamingConsortiumOI, null, builder.toString(), null); } + Log.d("PARSE-LOG", "Saving all SPs"); + MOTree tree = new MOTree(OMAConstants.LOC_PPS + ":1.0", "1.2", root); BufferedOutputStream out = null; try { @@ -250,11 +306,14 @@ public class MOManager { List<HomeSP> homeSPs = new ArrayList<HomeSP>(); + Log.d("PARSE-LOG", " node-name = " + spList.getName()); if (spList == null) { return homeSPs; } + Log.d("PARSE-LOG", " num_children = " + spList.getChildren().size()); for (OMANode spRoot : spList.getChildren()) { + Log.d("PARSE-LOG", " node-name = " + spRoot.getName()); homeSPs.add(buildHomeSP(spRoot)); } @@ -262,6 +321,7 @@ public class MOManager { } private static HomeSP buildHomeSP(OMANode ppsRoot) throws OMAException { + Log.d("PARSE-LOG", " node-name = " + ppsRoot.getName()); OMANode spRoot = ppsRoot.getChild(TAG_HomeSP); String fqdn = spRoot.getScalarValue(Arrays.asList(TAG_FQDN).iterator()); @@ -312,11 +372,13 @@ public class MOManager { Credential credential = buildCredential(ppsRoot.getChild(TAG_Credential)); + Log.d("PARSE-LOG", " Building a new HomeSP for " + fqdn); return new HomeSP(ssids, fqdn, roamingConsortiums, otherHomePartners, matchAnyOIs, matchAllOIs, friendlyName, iconURL, credential); } private static Credential buildCredential(OMANode credNode) throws OMAException { + Log.d("PARSE-LOG", " Reading credential from " + credNode.getName()); long ctime = getTime(credNode.getChild(TAG_CreationDate)); long expTime = getTime(credNode.getChild(TAG_ExpirationDate)); String realm = getString(credNode.getChild(TAG_Realm)); @@ -465,7 +527,8 @@ public class MOManager { private static byte[] getOctets(OMANode octetNode) throws OMAException { if (octetNode == null) { - throw new OMAException("Missing byte value"); + // throw new OMAException("Missing byte value"); + return null; } return Utils.hexToBytes(octetNode.getValue()); } diff --git a/service/java/com/android/server/wifi/hotspot2/omadm/MOTree.java b/service/java/com/android/server/wifi/hotspot2/omadm/MOTree.java index aac7765b8..3d9bb99a5 100644 --- a/service/java/com/android/server/wifi/hotspot2/omadm/MOTree.java +++ b/service/java/com/android/server/wifi/hotspot2/omadm/MOTree.java @@ -1,5 +1,7 @@ package com.android.server.wifi.hotspot2.omadm; +import android.util.Log; + import org.xml.sax.SAXException; import java.io.IOException; @@ -197,7 +199,9 @@ public class MOTree { StringBuilder tree = new StringBuilder(); for (; ; ) { int octet = in.read(); + Log.d("PARSE-LOG", "octet = " + octet); if (octet < 0) { + Log.d("PARSE-LOG", "returning because octet < 0"); return null; } else if (octet > ' ') { tree.append((char) octet); @@ -211,8 +215,11 @@ public class MOTree { String version = OMAConstants.deserializeString(in); String urn = OMAConstants.readURN(in); + Log.d("PARSE-LOG", "version = " + version + ", urn = " + urn); + OMAConstructed root = OMANode.unmarshal(in); + Log.d("PARSE-LOG", "return new MOTree"); return new MOTree(urn, version, root); } } diff --git a/service/java/com/android/server/wifi/hotspot2/omadm/OMAConstructed.java b/service/java/com/android/server/wifi/hotspot2/omadm/OMAConstructed.java index 4ae32b746..9d926cf86 100644 --- a/service/java/com/android/server/wifi/hotspot2/omadm/OMAConstructed.java +++ b/service/java/com/android/server/wifi/hotspot2/omadm/OMAConstructed.java @@ -1,5 +1,7 @@ package com.android.server.wifi.hotspot2.omadm; +import android.util.Log; + import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; @@ -102,7 +104,9 @@ public class OMAConstructed extends OMANode { } out.write(new byte[] { '+', '\n' }); + Log.d("PARSE-LOG", "Node " + getName() + " has " + m_children.size() + " children"); for (OMANode child : m_children.values()) { + Log.d("PARSE-LOG", "marshalling " + child.getName()); child.marshal(out, level + 1); } OMAConstants.indent(level, out); diff --git a/service/java/com/android/server/wifi/hotspot2/omadm/OMANode.java b/service/java/com/android/server/wifi/hotspot2/omadm/OMANode.java index e07f92365..97121e279 100644 --- a/service/java/com/android/server/wifi/hotspot2/omadm/OMANode.java +++ b/service/java/com/android/server/wifi/hotspot2/omadm/OMANode.java @@ -1,5 +1,7 @@ package com.android.server.wifi.hotspot2.omadm; +import android.util.Log; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -92,26 +94,36 @@ public abstract class OMANode { private static OMANode buildNode(InputStream in, OMAConstructed parent) throws IOException { String name = OMAConstants.deserializeString(in); - if (name == null) + if (name == null) { + Log.d("PARSE-LOG", "Could not read node name"); return null; + } + + Log.d("PARSE-LOG", "name = " + name); String urn = null; int next = in.read(); if (next == '(') { urn = OMAConstants.readURN(in); + Log.d("PARSE-LOG", "Urn = " + urn); next = in.read(); } if (next == '=') { String value = OMAConstants.deserializeString(in); + Log.d("PARSE-LOG", "value = " + value); return parent.addChild(name, urn, value, null); } else if (next == '+') { - if (parent != null) + if (parent != null) { + Log.d("PARSE-LOG", "added child node " + name); return parent.addChild(name, urn, null, null); - else + } else { + Log.d("PARSE-LOG", "created new node " + name); return new OMAConstructed(null, name, urn); + } } else { + Log.d("PARSE-LOG", "parsing error"); throw new IOException("Parse error: expected = or + after node name"); } } diff --git a/service/java/com/android/server/wifi/hotspot2/omadm/OMAScalar.java b/service/java/com/android/server/wifi/hotspot2/omadm/OMAScalar.java index 94a121e45..7802a435a 100644 --- a/service/java/com/android/server/wifi/hotspot2/omadm/OMAScalar.java +++ b/service/java/com/android/server/wifi/hotspot2/omadm/OMAScalar.java @@ -1,5 +1,7 @@ package com.android.server.wifi.hotspot2.omadm; +import android.util.Log; + import java.io.IOException; import java.io.OutputStream; import java.util.Collection; @@ -59,6 +61,8 @@ public class OMAScalar extends OMANode { @Override public void marshal(OutputStream out, int level) throws IOException { + Log.d("PARSE-LOG", "Node " + getName() + " has value " + getValue()); + OMAConstants.indent(level, out); OMAConstants.serializeString(getName(), out); out.write((byte) '='); |