summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/hotspot2/omadm
diff options
context:
space:
mode:
authorVinit Deshpande <vinitd@google.com>2015-03-11 17:43:20 -0700
committerVinit Deshpande <vinitd@google.com>2015-03-17 12:19:14 -0700
commitaf955ffa0082189fb688429732427c333f2491ce (patch)
tree896e613eef1e325d439e59776734c6e4533630cc /service/java/com/android/server/wifi/hotspot2/omadm
parentfea443b1b8807443544dfdb29a9c237b3ccf964a (diff)
downloadandroid_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')
-rw-r--r--service/java/com/android/server/wifi/hotspot2/omadm/MOManager.java73
-rw-r--r--service/java/com/android/server/wifi/hotspot2/omadm/MOTree.java7
-rw-r--r--service/java/com/android/server/wifi/hotspot2/omadm/OMAConstructed.java4
-rw-r--r--service/java/com/android/server/wifi/hotspot2/omadm/OMANode.java18
-rw-r--r--service/java/com/android/server/wifi/hotspot2/omadm/OMAScalar.java4
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) '=');