/******************************************************************************* * Copyright (c) 2014 Ericsson * * All rights reserved. This program and the accompanying materials are * made available under the terms of the Eclipse Public License v1.0 which * accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Vincent Perot - Initial API and implementation *******************************************************************************/ package org.eclipse.tracecompass.internal.pcap.core.protocol.ipv4; import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; import java.net.Inet4Address; import org.eclipse.jdt.annotation.Nullable; import org.eclipse.tracecompass.internal.pcap.core.endpoint.ProtocolEndpoint; /** * Class that extends the {@link ProtocolEndpoint} class. It represents the * endpoint at an IPv4 level. * * @author Vincent Perot */ public class IPv4Endpoint extends ProtocolEndpoint { private final Inet4Address fIPAddress; /** * Constructor of the {@link IPv4Endpoint} class. It takes a packet to get * its endpoint. Since every packet has two endpoints (source and * destination), the isSourceEndpoint parameter is used to specify which * endpoint to take. * * @param packet * The packet that contains the endpoints. * @param isSourceEndpoint * Whether to take the source or the destination endpoint of the * packet. */ public IPv4Endpoint(IPv4Packet packet, boolean isSourceEndpoint) { super(packet, isSourceEndpoint); fIPAddress = isSourceEndpoint ? packet.getSourceIpAddress() : packet.getDestinationIpAddress(); } @Override public int hashCode() { final int prime = 31; int result = 1; ProtocolEndpoint endpoint = getParentEndpoint(); if (endpoint == null) { result = 0; } else { result = endpoint.hashCode(); } result = prime * result + fIPAddress.hashCode(); return result; } @Override public boolean equals(@Nullable Object obj) { if (this == obj) { return true; } if (!(obj instanceof IPv4Endpoint)) { return false; } IPv4Endpoint other = (IPv4Endpoint) obj; // Check on layer boolean localEquals = fIPAddress.equals(other.fIPAddress); if (!localEquals) { return false; } // Check above layers. ProtocolEndpoint endpoint = getParentEndpoint(); if (endpoint != null) { return endpoint.equals(other.getParentEndpoint()); } return true; } @Override public String toString() { ProtocolEndpoint endpoint = getParentEndpoint(); if (endpoint == null) { return checkNotNull(fIPAddress.getHostAddress()); } return endpoint.toString() + '/' + fIPAddress.getHostAddress(); } }