diff options
author | Yan Yan <evitayan@google.com> | 2020-05-20 18:20:32 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-05-20 18:20:32 +0000 |
commit | 953cc3d8eef9726de36eb785e30fd38c1f2697b6 (patch) | |
tree | eba40ee5462fa72fbcbaca9df1d165a2a0421984 | |
parent | e2306a62207b33720754331c792c1c128fe1c802 (diff) | |
parent | 778f73f9c4de4be0c01649206c2764ba59c0e5b2 (diff) | |
download | ike-953cc3d8eef9726de36eb785e30fd38c1f2697b6.tar.gz |
Merge "Fix NullPointException in creating first Child"
-rw-r--r-- | src/java/com/android/internal/net/ipsec/ike/IkeSessionStateMachine.java | 57 |
1 files changed, 16 insertions, 41 deletions
diff --git a/src/java/com/android/internal/net/ipsec/ike/IkeSessionStateMachine.java b/src/java/com/android/internal/net/ipsec/ike/IkeSessionStateMachine.java index 2955b038..e86bc841 100644 --- a/src/java/com/android/internal/net/ipsec/ike/IkeSessionStateMachine.java +++ b/src/java/com/android/internal/net/ipsec/ike/IkeSessionStateMachine.java @@ -132,7 +132,6 @@ import com.android.internal.net.ipsec.ike.message.IkeNotifyPayload; import com.android.internal.net.ipsec.ike.message.IkePayload; import com.android.internal.net.ipsec.ike.message.IkeSaPayload; import com.android.internal.net.ipsec.ike.message.IkeSaPayload.IkeProposal; -import com.android.internal.net.ipsec.ike.message.IkeTsPayload; import com.android.internal.net.ipsec.ike.message.IkeVendorPayload; import com.android.internal.net.ipsec.ike.utils.IkeAlarmReceiver; import com.android.internal.net.ipsec.ike.utils.IkeSecurityParameterIndex; @@ -3089,50 +3088,26 @@ public class IkeSessionStateMachine extends AbstractSessionStateMachine { protected List<IkePayload> extractChildPayloadsFromMessage(IkeMessage ikeMessage) throws InvalidSyntaxException { - IkeSaPayload saPayload = - ikeMessage.getPayloadForType(IkePayload.PAYLOAD_TYPE_SA, IkeSaPayload.class); - IkeTsPayload tsInitPayload = - ikeMessage.getPayloadForType( - IkePayload.PAYLOAD_TYPE_TS_INITIATOR, IkeTsPayload.class); - IkeTsPayload tsRespPayload = - ikeMessage.getPayloadForType( - IkePayload.PAYLOAD_TYPE_TS_RESPONDER, IkeTsPayload.class); - - List<IkeNotifyPayload> notifyPayloads = - ikeMessage.getPayloadListForType( - IkePayload.PAYLOAD_TYPE_NOTIFY, IkeNotifyPayload.class); - - IkeConfigPayload configPayload = - ikeMessage.getPayloadForType( - IkePayload.PAYLOAD_TYPE_CP, IkeConfigPayload.class); - - boolean hasErrorNotify = false; List<IkePayload> list = new LinkedList<>(); - for (IkeNotifyPayload payload : notifyPayloads) { - if (payload.isNewChildSaNotify()) { - list.add(payload); - if (payload.isErrorNotify()) { - hasErrorNotify = true; - } + for (IkePayload payload : ikeMessage.ikePayloadList) { + switch (payload.payloadType) { + case PAYLOAD_TYPE_SA: // fall through + case PAYLOAD_TYPE_TS_INITIATOR: // fall through + case PAYLOAD_TYPE_TS_RESPONDER: // fall through + case PAYLOAD_TYPE_CP: + list.add(payload); + break; + case PAYLOAD_TYPE_NOTIFY: + if (((IkeNotifyPayload) payload).isNewChildSaNotify()) { + list.add(payload); + } + break; + default: + // Ignore payloads unrelated with Child negotiation } } - // If there is no error notification, SA, TS-initiator and TS-responder MUST all be - // included in this message. - if (!hasErrorNotify - && (saPayload == null || tsInitPayload == null || tsRespPayload == null)) { - throw new InvalidSyntaxException( - "SA, TS-Initiator or TS-Responder payload is missing."); - } - - list.add(saPayload); - list.add(tsInitPayload); - list.add(tsRespPayload); - - if (configPayload != null) { - list.add(configPayload); - } - + // Payload validation is done in ChildSessionStateMachine return list; } |