Commit 0a965eb9 authored by berge's avatar berge
Browse files

Merged revision(s) 1839-1901 from branches/STF484_VALIDATION

parent c89d62ed
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
 */
package org.etsi.its.adapter.layers;

import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

@@ -121,6 +122,9 @@ public class BtpLayer extends Layer {
		byte[] payload = new byte[payloadLength];
		System.arraycopy(message, 4, payload, 0, payloadLength);
		
        lowerInfo.put(BTP_DSTPORT, dstPort);
        lowerInfo.put(BTP_DSTPORTINFO, srcPort);
		
		super.receive(payload, lowerInfo);
	}
}
+39 −4
Original line number Diff line number Diff line
@@ -80,6 +80,15 @@ public class GnLayer extends Layer implements Runnable, IEthernetSpecific {
     */
    public static final String GN_ANGLE = "GnAngle";

    /**
     * Parameter name for traffic class
     */
    public static final String GN_TRAFFICCLASS = "GnTrafficClass";
    
    /**
     * Parameter name for packet's lifetime
     */
    public static final String GN_LIFETIME = "GnLifetime";

    /**
     * GeoNetworking header type for unknown messages
@@ -295,15 +304,20 @@ public class GnLayer extends Layer implements Runnable, IEthernetSpecific {
    public void receive(byte[] message, Map<String, Object> lowerInfo) {
//        System.out.println(">>> GnLayer.receive: " + ByteHelper.byteArrayToString(message));
        
        byte[] basicHdr = new byte[4]; // TODO To be removed
        byte[] basicHdr = new byte[4]; 
        System.arraycopy(message, 4, basicHdr, 0, 4);
        byte[] versionNh = new byte[1];
        System.arraycopy(basicHdr, 0, versionNh, 0, 1);
        int nextHeader = (int)(versionNh[0] & (byte)0x0F);
        byte nextHeader = (byte)(versionNh[0] & (byte)0x0F);
        int lt_multiplier = (int)(basicHdr[2] & (byte)0xFC) >> 2;
        int lt_base = (int)(basicHdr[2] & (byte)0x03);
        int lifetime = computeGnLifeTime(lt_multiplier, lt_base);
        
        if (!management.isSecuredModeSet()) { // Secure mode disabled
            byte[] commonHdr = new byte[8];
            System.arraycopy(message, 4, commonHdr, 0, 8);
            nextHeader = (byte)((commonHdr[0] & (byte)0xF0) >> 4);
            int trafficClass = (int)(commonHdr[2]);
            
            byte[] htHst = new byte[1];
            System.arraycopy(commonHdr, 1, htHst, 0, 1);
@@ -343,6 +357,10 @@ public class GnLayer extends Layer implements Runnable, IEthernetSpecific {
                    byte[] payload = new byte[payloadLength];
                    System.arraycopy(message, message.length - payloadLength, payload, 0, payloadLength);
                    lowerInfo.put(GN_NEXTHEADER, nextHeader);
                    lowerInfo.put(GN_TYPE, headerType);
                    lowerInfo.put(GN_SUBTYPE, headerSubType);
                    lowerInfo.put(GN_LIFETIME, lifetime);
                    lowerInfo.put(GN_TRAFFICCLASS, trafficClass);
                    super.receive(payload, lowerInfo);
                }
            }
@@ -395,6 +413,8 @@ public class GnLayer extends Layer implements Runnable, IEthernetSpecific {
                byte[] commonHdr = new byte[8];
                System.arraycopy(message, offset, commonHdr, 0, 8);
//                System.out.println("GnLayer.receive: commonHdr: " + ByteHelper.byteArrayToString(commonHdr));
                nextHeader = (byte)((commonHdr[0] & (byte)0xF0) >> 4);
                int trafficClass = (int)(commonHdr[2]);
                
                byte[] htHst = new byte[1];
                System.arraycopy(commonHdr, 1, htHst, 0, 1);
@@ -432,9 +452,11 @@ public class GnLayer extends Layer implements Runnable, IEthernetSpecific {
                    if(payloadLength > 0) {
                        byte[] payload = new byte[payloadLength];
                        System.arraycopy(message, message.length - payloadLength - 68, payload, 0, payloadLength);
//                        System.out.println("GnLayer.receive: payload: " + ByteHelper.byteArrayToString(payload));
                        lowerInfo.put(GN_NEXTHEADER, nextHeader);
//                        System.out.println("GnLayer.receive: call super.receive: " + ByteHelper.byteArrayToString(payload));
                        lowerInfo.put(GN_TYPE, headerType);
                        lowerInfo.put(GN_SUBTYPE, headerSubType);
                        lowerInfo.put(GN_LIFETIME, lifetime);
                        lowerInfo.put(GN_TRAFFICCLASS, trafficClass);
                        super.receive(payload, lowerInfo);
                    }
                }
@@ -442,6 +464,19 @@ public class GnLayer extends Layer implements Runnable, IEthernetSpecific {
        }
    } // End of method receive
    
    /**
     * Computes GN lifetime value 
     * @param lt_multiplier		GN LT multiplier
     * @param lt_base			GN LT base
     * @return GN lifetime value in ms	
     */
    private int computeGnLifeTime(int lt_multiplier, int lt_base) {
    	
    	final int[] base = {50, 1000, 10000, 100000};
		    	
    	return base[lt_base] * lt_multiplier;
	}

	/**
     * Builds encoded Basic Header
     * @return Encoded Basic Header
+22 −1
Original line number Diff line number Diff line
@@ -9,7 +9,9 @@
package org.etsi.its.adapter.ports;

import java.util.HashMap;
import java.util.Map;

import org.etsi.common.ByteHelper;
import org.etsi.its.adapter.layers.BtpLayer;
import org.etsi.its.adapter.layers.GnLayer;

@@ -29,6 +31,25 @@ public class CamPort extends ProtocolPort {
		super(portName, componentName, lowerStackDesc, linkLayerAddress);
	}
	
    /* (non-Javadoc)
     * @see org.etsi.its.adapter.ports.ProtocolPort#receive(byte[], java.util.Map)
     */
    @Override
	public void receive(byte[] message, Map<String, Object> lowerInfo) {

        // Encode with CAM indication header
        byte[] msgInd = ByteHelper.concat(
        		message,        		
        		(byte[])lowerInfo.get(GnLayer.GN_NEXTHEADER),
        		(byte[])lowerInfo.get(GnLayer.GN_TYPE),
        		(byte[])lowerInfo.get(GnLayer.GN_SUBTYPE),
        		(byte[])lowerInfo.get(GnLayer.GN_LIFETIME),
        		(byte[])lowerInfo.get(GnLayer.GN_TRAFFICCLASS),
        		(byte[])lowerInfo.get(BtpLayer.BTP_DSTPORT),
        		(byte[])lowerInfo.get(BtpLayer.BTP_DSTPORTINFO));
        super.receive(msgInd, lowerInfo);
	}
	
	/* (non-Javadoc)
     * @see org.etsi.its.adapter.ports.IPort#send(byte[])
     */
+21 −0
Original line number Diff line number Diff line
@@ -9,7 +9,9 @@
package org.etsi.its.adapter.ports;

import java.util.HashMap;
import java.util.Map;

import org.etsi.common.ByteHelper;
import org.etsi.its.adapter.layers.BtpLayer;
import org.etsi.its.adapter.layers.GnLayer;

@@ -29,6 +31,25 @@ public class DenmPort extends ProtocolPort {
		super(portName, componentName, lowerStackDesc, linkLayerAddress);
	}
	
    /* (non-Javadoc)
     * @see org.etsi.its.adapter.ports.ProtocolPort#receive(byte[], java.util.Map)
     */
    @Override
	public void receive(byte[] message, Map<String, Object> lowerInfo) {

        // Encode with CAM indication header
        byte[] msgInd = ByteHelper.concat(
        		message,        		
        		(byte[])lowerInfo.get(GnLayer.GN_NEXTHEADER),
        		(byte[])lowerInfo.get(GnLayer.GN_TYPE),
        		(byte[])lowerInfo.get(GnLayer.GN_SUBTYPE),
        		(byte[])lowerInfo.get(GnLayer.GN_LIFETIME),
        		(byte[])lowerInfo.get(GnLayer.GN_TRAFFICCLASS),
        		(byte[])lowerInfo.get(BtpLayer.BTP_DSTPORT),
        		(byte[])lowerInfo.get(BtpLayer.BTP_DSTPORTINFO));
        super.receive(msgInd, lowerInfo);
	}
    
	/* (non-Javadoc)
     * @see org.etsi.its.adapter.ports.IPort#send(byte[])
     */
+1 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ public class CodecFactory {
            org.etsi.ttcn.codec.its.geonetworking.Plugin.init();
            org.etsi.ttcn.codec.its.btp.Plugin.init();
            org.etsi.ttcn.codec.its.security.Plugin.init();
            org.etsi.ttcn.codec.its.facilities.Plugin.init();
        }        
    }

Loading