import org.opendaylight.controller.sal.core.TimeStamp;
/**
- *
+ *
* Describe a raw Data Packet, this is how a packet is received from the network
* and how it will be transmitted. It essentially wraps the raw bytestream
- *
+ *
*/
public class RawPacket {
private byte[] packetData;
- private LinkEncap encap;
- private TimeStamp incomingTime;
- private TimeStamp copyTime;
- private Map props;
+ private final LinkEncap encap;
+ private final TimeStamp incomingTime;
+ private final TimeStamp copyTime;
+ private Map<Object, Object> props;
private NodeConnector incomingNodeConnector;
private NodeConnector outgoingNodeConnector;
/**
* If the packet is being sent this parameter tells where the packet is sent
* toward
- *
- *
+ *
+ *
* @return the NodeConnector toward where the packet is being sent
*/
public NodeConnector getOutgoingNodeConnector() {
/**
* Setter method for OutGoing NodeConnector
- *
+ *
* @param outgoingNodeConnector
* NodeConnector toward where the packet is travelling
*/
/**
* Return the incoming NodeConnector if the packet was received
- *
+ *
* @return NodeConnector where the packet was received from
*/
public NodeConnector getIncomingNodeConnector() {
/**
* Setter for Incoming NodeConnector
- *
+ *
* @param incomingNodeConnector
* NodeConnector to be used and incoming one
*/
/**
* Retrieve a given property attached to the packet, if exits of course
- *
+ *
* @param key
* Key to retrieve the wanted property attached to the packet
- *
+ *
* @return The property attached to the packet
*/
public Object getProps(Object key) {
/**
* Generic data associated to the data packet
- *
+ *
* @param key
* key for the association
* @param value
*/
public void setProps(Object key, Object value) {
if (this.props == null) {
- this.props = new HashMap();
+ this.props = new HashMap<Object, Object>();
}
this.props.put(key, value);
/**
* Constructor for RawPacket
- *
+ *
* @param data
* content of the packet as bytestream
* @param e
* datalink encapsulation for the packet
- *
+ *
*/
public RawPacket(byte[] data, LinkEncap e) throws ConstructionException {
if (data == null) {
* Copy Constructor for RawPacket, it performs a copy of the packet so each
* packet can be modified independently without worrying that source packet
* content is touched
- *
+ *
* @param src
* packet to copy data from
- *
+ *
*/
public RawPacket(RawPacket src) throws ConstructionException {
if (src == null) {
this.incomingTime = src.getIncomingTime();
this.incomingNodeConnector = src.getIncomingNodeConnector();
this.outgoingNodeConnector = src.getOutgoingNodeConnector();
- this.props = (src.props == null ? null : new HashMap(src.props));
+ this.props = (src.props == null ? null : new HashMap<Object, Object>(
+ src.props));
this.copyTime = new TimeStamp(System.currentTimeMillis(), "CopyTime");
}
/**
* Constructor for RawPacket with Ethernet encapsulation
- *
+ *
* @param data
* content of the packet as bytestream
- *
+ *
*/
public RawPacket(byte[] data) throws ConstructionException {
this(data, LinkEncap.ETHERNET);
}
/**
- * Read the timestamp when the packet has entered the system
- *
- * @return The timestamp when the packet has entered the system
+ * Read the time stamp when the packet has entered the system
+ *
+ * @return The time stamp when the packet has entered the system
*/
public TimeStamp getIncomingTime() {
return this.incomingTime;
/**
* Read the packet encapsulation
- *
+ *
* @return The encapsulation for the raw packet, necessary to start parsing
* the packet
*/
/**
* Get bytestream of the packet body
- *
+ *
* @return The raw bytestream composing the packet
*/
public byte[] getPacketData() {
return this.packetData;
}
+
+ /**
+ * Returns the time at which the current instance of RawPacket was created
+ * as a copy of the original one.
+ *
+ * @return The time stamp at which this RawPacket instance was created. null
+ * if this is the original instance.
+ */
+ public TimeStamp getCopyTime() {
+ return this.copyTime;
+ }
}