OpenTTCN/Developer corner/Creating adapter with Java SDK/Utilities.java.2

From OpenTTCN

Jump to: navigation, search
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;
    }
}
Views
Personal tools