/*
* $Id: ICMPEchoPacket.java 5260 2005-05-10 21:01:16Z dfs $
*
* Copyright 2004-2005 Daniel F. Savarese
* Contact Information: http://www.savarese.org/contact.html
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.savarese.org/software/ApacheLicense-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.savarese.vserv.tcpip;
/**
* ICMPEchoPacket extends {@link ICMPPacket} to implement ICMP echo request
* and reply packets.
*
* @author <a href="http://www.savarese.org/">Daniel F. Savarese</a>
*/
public class ICMPEchoPacket extends ICMPPacket {
/** Offset into the ICMP packet of the identifier header value. */
public static final int OFFSET_IDENTIFIER = 4;
/** Offset into the ICMP packet of the sequence number header value. */
public static final int OFFSET_SEQUENCE = 6;
/**
* Creates a new ICMP echo packet of a given size.
*
* @param size The number of bytes in the packet.
*/
public ICMPEchoPacket(int size) {
super(size);
}
/**
* Creates a new ICMP echo packet that is a copy of a given packet.
*
* @param packet The packet to replicate.
*/
public ICMPEchoPacket(ICMPEchoPacket packet) {
super(packet);
}
public int getICMPHeaderByteLength() {
return 8;
}
/**
* Sets the identifier header field.
*
* @param id The new identifier.
*/
public final void setIdentifier(int id) {
_data_[_offset + OFFSET_IDENTIFIER] = (byte)((id >> 8) & 0xff);
_data_[_offset + OFFSET_IDENTIFIER + 1] = (byte)(id & 0xff);
}
/**
* @return The identifier header field.
*/
public final int getIdentifier() {
return (((_data_[_offset + OFFSET_IDENTIFIER] & 0xff) << 8) |
(_data_[_offset + OFFSET_IDENTIFIER + 1] & 0xff));
}
/**
* Sets the sequence number.
*
* @param seq The new sequence number.
*/
public final void setSequenceNumber(int seq) {
_data_[_offset + OFFSET_SEQUENCE] = (byte)((seq >> 8) & 0xff);
_data_[_offset + OFFSET_SEQUENCE + 1] = (byte)(seq & 0xff);
}
/**
* @return The sequence number.
*/
public final int getSequenceNumber() {
return (((_data_[_offset + OFFSET_SEQUENCE] & 0xff) << 8) |
(_data_[_offset + OFFSET_SEQUENCE + 1] & 0xff));
}
}