From OpenTTCN
package com.openttcn.sdk.example.wiki;
public class Utilities {
public static void reportLocalError(String msg) {
System.err.println(msg);
com.openttcn.sdk.core.CAPI.instance().otReportError(msg);
}
public static int extractHostAndPortFromAddress(
byte[] dstIpAddr_,
int[] dstPortNumber_,
org.etsi.ttcn.tri.TriAddress src_) {
byte[] srcAsBytes = src_.getEncodedAddress();
/* Extract port */
int port =
((((int) srcAsBytes[0]) << 8) & 0xFF00) |
((((int) srcAsBytes[1]) << 0) & 0x00FF);
dstPortNumber_[0] = port;
/* Extract IP address */
byte[] hostAsBytes = new byte[srcAsBytes.length - 2];
System.arraycopy(srcAsBytes, 2, hostAsBytes, 0, srcAsBytes.length - 2);
String host = null;
try {
host = new String(hostAsBytes, "US-ASCII");
}
catch (java.io.UnsupportedEncodingException e) {
reportLocalError("Error: Unrecognized encoding.");
return 1;
}
byte[] addr = null;
try {
addr = java.net.InetAddress.getByName(host).getAddress();
}
catch (java.net.UnknownHostException e) {
reportLocalError("Error: Cannot resolve IP address: " + host + ".");
return 1;
}
if (addr.length != 4) {
reportLocalError("Error: Unsupported IP address format.");
return 1;
}
System.arraycopy(addr, 0, dstIpAddr_, 0, 4);
return 0;
}
public static java.net.DatagramSocket _socketDesc = null;
public static java.net.DatagramSocket bindSocketToAnyPort() {
java.net.DatagramSocket socket = null;
try {
socket = new java.net.DatagramSocket();
}
catch (java.net.SocketException e) { return null; }
return socket;
}
public static int sendDatagramPacket(
java.net.InetAddress host_, /* destination host */
int port_, /* destination UDP port */
byte[] data_ /* UDP frame payload to be sent */) {
if (_socketDesc == null) {
_socketDesc = bindSocketToAnyPort();
if (_socketDesc == null) {
reportLocalError("Error: Cannot bind socket.");
return 1;
}
}
java.net.DatagramPacket packet = new java.net.DatagramPacket(
data_, data_.length, host_, port_);
try {
_socketDesc.send(packet);
}
catch (Exception e) {
reportLocalError("Error: Cannot send datagram frame.");
return 1;
}
return 0;
}
}