You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.8 KiB
Java

// IPMessage.java (C) I. A. Robin, K. J. Turner 01/03/01
package protocol;
import support.*;
public class IPMessage extends PDU {
int messageID;
int fragOffset = -1; // fragment offset
private boolean dontFrag = false;
private boolean moreFrags = false;
public IPMessage(String type, int mid, int length) {
super(type);
messageID = mid;
this.size = length;
}
public IPMessage(String type, int mid, int offset, int length) {
super(type);
messageID = mid;
fragOffset = offset;
this.size = length;
}
public void setDontFrag(boolean d) {
dontFrag = d;
}
public boolean dontFrag() {
return dontFrag;
}
public void setMoreFrags(boolean m) {
moreFrags = m;
}
public boolean hasMoreFrags() {
return moreFrags;
}
public boolean matches(PDU pdu) {
if (pdu == null || pdu.getClass() != IPMessage.class)
return false;
IPMessage ipd = (IPMessage)pdu;
if (type.equals(ipd.type) && source == ipd.getSource()
&& messageID == ipd.messageID
&& (fragOffset < 0 ||
fragOffset >= 0 &&
ipd.fragOffset >= fragOffset &&
ipd.fragOffset < fragOffset + size)) return true;
return false;
}
// return label for arrow representing this ip datagram
// in a time sequence diagram
public String getLabel() {
String label = getID();
if (fragOffset >= 0) label += moreFrags? " +" : " -";
return label;
}
// return string representing this pdu in actions menu
public String getID() {
String id = type + "(" + messageID;
if (fragOffset >= 0) {
id += "," + fragOffset;
if (dontFrag) id += ",D";
}
id += "," + size + ")";
return id;
}
}