diff --git a/rosjava/src/main/java/org/ros/internal/node/topic/SubscriberHandshake.java b/rosjava/src/main/java/org/ros/internal/node/topic/SubscriberHandshake.java index c8fde19650f7b8359a0fdbbb6ba62d1dffeb5d7a..ce1a036062ca238c807ec897c04a6835fe54de80 100644 --- a/rosjava/src/main/java/org/ros/internal/node/topic/SubscriberHandshake.java +++ b/rosjava/src/main/java/org/ros/internal/node/topic/SubscriberHandshake.java @@ -16,6 +16,8 @@ package org.ros.internal.node.topic; +import com.google.common.base.Preconditions; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.ros.internal.node.BaseClientHandshake; @@ -31,9 +33,12 @@ public class SubscriberHandshake extends BaseClientHandshake { private static final boolean DEBUG = false; private static final Log log = LogFactory.getLog(SubscriberHandshake.class); - + public SubscriberHandshake(ConnectionHeader outgoingConnectionHeader) { super(outgoingConnectionHeader); + Preconditions.checkNotNull(outgoingConnectionHeader.getField(ConnectionHeaderFields.TYPE)); + Preconditions.checkNotNull(outgoingConnectionHeader + .getField(ConnectionHeaderFields.MD5_CHECKSUM)); } @Override @@ -43,12 +48,18 @@ public class SubscriberHandshake extends BaseClientHandshake { log.info("Incoming publisher connection header: " + incommingConnectionHeader); } setErrorMessage(incommingConnectionHeader.getField(ConnectionHeaderFields.ERROR)); - if (!incommingConnectionHeader.getField(ConnectionHeaderFields.TYPE).equals( - outgoingConnectionHeader.getField(ConnectionHeaderFields.TYPE))) { + String incomingType = incommingConnectionHeader.getField(ConnectionHeaderFields.TYPE); + if (incomingType == null) { + setErrorMessage("Incoming type cannot be null."); + } else if (!incomingType.equals(outgoingConnectionHeader.getField(ConnectionHeaderFields.TYPE))) { setErrorMessage("Message types don't match."); } - if (!incommingConnectionHeader.getField(ConnectionHeaderFields.MD5_CHECKSUM).equals( - outgoingConnectionHeader.getField(ConnectionHeaderFields.MD5_CHECKSUM))) { + String incomingMd5Checksum = + incommingConnectionHeader.getField(ConnectionHeaderFields.MD5_CHECKSUM); + if (incomingMd5Checksum == null) { + setErrorMessage("Incoming MD5 checksum cannot be null."); + } else if (!incomingMd5Checksum.equals(outgoingConnectionHeader + .getField(ConnectionHeaderFields.MD5_CHECKSUM))) { setErrorMessage("Checksums don't match."); } return getErrorMessage() == null;