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.
50 lines
1.6 KiB
Java
50 lines
1.6 KiB
Java
// UDPMedium.java (C) I. A. Robin, K. J. Turner 01/03/01
|
|
|
|
package protocol;
|
|
|
|
import java.util.*;
|
|
import support.*;
|
|
|
|
public class UDPMedium extends Medium {
|
|
|
|
public UDPMedium() {
|
|
super();
|
|
}
|
|
|
|
// identify and return PDU currently on channel with
|
|
// type and parameters matching those described in given string
|
|
// parameters are: (source port, destination port, SDU)
|
|
|
|
protected PDU getMatchingPDU(String s) {
|
|
UDPMessage ud;
|
|
int sp = -1;
|
|
int dp = -1;
|
|
String sdu = "";
|
|
// extract name of source entity for this datagram:
|
|
int sourceStart = s.indexOf('[') + 1;
|
|
int sourceEnd = s.indexOf( ']' );
|
|
String sourceName = s.substring(sourceStart, sourceEnd);
|
|
// get type and parameters of PDU from action string
|
|
// PDU type starts after first space following "Deliver" or "Lose":
|
|
int typeStart = s.indexOf(' ') + 1;
|
|
int typeEnd = s.indexOf( '(' );
|
|
String type = s.substring(typeStart, typeEnd);
|
|
String[] params = getParams(s);
|
|
sp = Integer.parseInt(params[0]); // source port
|
|
dp = Integer.parseInt(params[1]); // destination port
|
|
sdu = params[2];
|
|
// try to match PDU type and seq with a PDU currently on channel:
|
|
for (Enumeration e = pdus.elements(); e.hasMoreElements(); ) {
|
|
ud = (UDPMessage)e.nextElement();
|
|
if (ud != null && ud.type.equals(type)
|
|
&& ud.getSource().getName().equals(sourceName)
|
|
&& sp == ud.sourcePort && dp == ud.destPort
|
|
&& sdu.equals(ud.getSDU())) {
|
|
return ud;
|
|
}
|
|
}
|
|
return null; // no match found
|
|
}
|
|
|
|
}
|