| package com.android.hotspot2.osu; |
| |
| import com.android.hotspot2.omadm.OMAConstants; |
| import com.android.hotspot2.omadm.OMAException; |
| import com.android.hotspot2.omadm.XMLNode; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| public abstract class OSUResponse { |
| private static final String SPPVersionAttribute = "sppVersion"; |
| private static final String SPPStatusAttribute = "sppStatus"; |
| private static final String SPPSessionIDAttribute = "sessionID"; |
| |
| private final OSUMessageType mMessageType; |
| private final String mVersion; |
| private final String mSessionID; |
| private final OSUStatus mStatus; |
| private final OSUError mError; |
| private final Map<String, String> mAttributes; |
| |
| protected OSUResponse(XMLNode root, OSUMessageType messageType, String... attributes) |
| throws OMAException { |
| mMessageType = messageType; |
| String ns = root.getNameSpace() + ":"; |
| mVersion = root.getAttributeValue(ns + SPPVersionAttribute); |
| mSessionID = root.getAttributeValue(ns + SPPSessionIDAttribute); |
| |
| String status = root.getAttributeValue(ns + SPPStatusAttribute); |
| if (status == null) { |
| throw new OMAException("Missing status"); |
| } |
| mStatus = OMAConstants.mapStatus(status); |
| |
| if (mVersion == null || mSessionID == null || mStatus == null) { |
| throw new OMAException("Incomplete request: " + root.getAttributes()); |
| } |
| |
| if (attributes != null) { |
| mAttributes = new HashMap<>(); |
| for (String attribute : attributes) { |
| String value = root.getAttributeValue(ns + attribute); |
| if (value == null) { |
| throw new OMAException("Missing attribute: " + attribute); |
| } |
| mAttributes.put(attribute, value); |
| } |
| } else { |
| mAttributes = null; |
| } |
| |
| if (mStatus == OSUStatus.Error) { |
| OSUError error = null; |
| String errorTag = ns + "sppError"; |
| for (XMLNode child : root.getChildren()) { |
| if (child.getTag().equals(errorTag)) { |
| error = OMAConstants.mapError(child.getAttributeValue("errorCode")); |
| break; |
| } |
| } |
| mError = error; |
| } else { |
| mError = null; |
| } |
| } |
| |
| public OSUMessageType getMessageType() { |
| return mMessageType; |
| } |
| |
| public String getVersion() { |
| return mVersion; |
| } |
| |
| public String getSessionID() { |
| return mSessionID; |
| } |
| |
| public OSUStatus getStatus() { |
| return mStatus; |
| } |
| |
| public OSUError getError() { |
| return mError; |
| } |
| |
| protected Map<String, String> getAttributes() { |
| return mAttributes; |
| } |
| |
| @Override |
| public String toString() { |
| return String.format("%s version '%s', status %s, session-id '%s'%s", |
| mMessageType, mVersion, mStatus, mSessionID, mError != null |
| ? (" (" + mError + ")") : ""); |
| } |
| } |