PluginAdapter.java 75.8 KB
Newer Older
        
        // Radius
        int radius = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Short.SIZE / Byte.SIZE));
        
        RecordValue circularRegion = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.CircularRegion");
        circularRegion.setField("center", center);
        circularRegion.setField("radius", wrapper.setInteger(radius));
        // Decode location parameter
//        ByteHelper.dump("exec_isLocationInsideCircularRegion: ", parameterList.get(1).getEncodedParameter());
        value = parameterList.get(1).getEncodedParameter();
        offset = 0;
        // WGS84 Latitude
        latitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        // WGS84 Longitude
        longitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        RecordValue location = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.ThreeDLocation");
        location.setField("latitude", wrapper.setInteger(latitude));
        location.setField("longitude", wrapper.setInteger(longitude));
        OctetstringValue elevation = wrapper.getOctetstring();
        elevation.setLength(2);
        elevation.setOctet(0, 0x00); elevation.setOctet(1, 0x00); 
        location.setField("elevation", elevation);
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_isLocationInsideCircularRegion(circularRegion, location);
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_isLocationInsideCircularRegion", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_isLocationInsideCircularRegion
    
    private void exec_isLocationInsideRectangularRegion(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_isLocationInsideRectangularRegion");
        
        // Decode rectangularRegions parameter
//        ByteHelper.dump("exec_isLocationInsidePolygonalRegion: ", parameterList.get(0).getEncodedParameter());
        ITciCDWrapper wrapper = TciCDWrapperFactory.getTciCDInstance();
        RecordOfValue rectangularRegions = wrapper.getRecordOfValue("LibItsSecurity_TypesAndValues.RectangularRegions");
        byte[] value = parameterList.get(0).getEncodedParameter();
        byte length = value[0];
        int offset = 1;
        while (offset < length) { // TODO Create a method to fill RectangularRegions
            // northwest
            RecordValue northwest = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.TwoDLocation");
            // WGS84 Latitude
            int latitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
            offset += Integer.SIZE / Byte.SIZE;
            // WGS84 Longitude
            int longitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
            offset += Integer.SIZE / Byte.SIZE;
            northwest.setField("latitude", wrapper.setInteger(latitude));
            northwest.setField("longitude", wrapper.setInteger(longitude));
            
            // southeast
            RecordValue southeast = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.TwoDLocation");
            // WGS84 Latitude
            latitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
            offset += Integer.SIZE / Byte.SIZE;
            // WGS84 Longitude
            longitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
            offset += Integer.SIZE / Byte.SIZE;
            southeast.setField("latitude", wrapper.setInteger(latitude));
            southeast.setField("longitude", wrapper.setInteger(longitude));
            
            RecordValue rectangularRegion = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.RectangularRegion");
            rectangularRegion.setField("northwest", northwest);
            rectangularRegion.setField("southeast", southeast);
            
            rectangularRegions.appendField(rectangularRegion);
        } // End of 'while' statement
        // Decode location parameter
//        ByteHelper.dump("exec_isLocationInsidePolygonalRegion: ", parameterList.get(1).getEncodedParameter());
        value = parameterList.get(1).getEncodedParameter();
        offset = 0;
        // WGS84 Latitude
        int latitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        // WGS84 Longitude
        int longitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        RecordValue location = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.ThreeDLocation");
        location.setField("latitude", wrapper.setInteger(latitude));
        location.setField("longitude", wrapper.setInteger(longitude));
        OctetstringValue elevation = wrapper.getOctetstring();
        elevation.setLength(2);
        elevation.setOctet(0, 0x00); elevation.setOctet(1, 0x00); 
        location.setField("elevation", elevation);
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_isLocationInsideRectangularRegion(rectangularRegions, location);
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_isLocationInsideRectangularRegion", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_isLocationInsideRectangularRegion
    
    private void exec_isLocationInsidePolygonalRegion(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_isLocationInsidePolygonalRegion");
        
//        ByteHelper.dump("exec_isLocationInsidePolygonalRegion: ", parameterList.get(0).getEncodedParameter());
        // Execute the function
        ITciCDWrapper wrapper = TciCDWrapperFactory.getTciCDInstance();
        RecordOfValue polygonalArea = wrapper.getRecordOfValue("LibItsSecurity_TypesAndValues.PolygonalRegion");
        byte[] value = parameterList.get(0).getEncodedParameter();
        byte length = value[0];
        int offset = 1;
        while (offset < length) { // TODO Create a method to fill PolygonRegions
            // WGS84 Latitude
            int latitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
            offset += Integer.SIZE / Byte.SIZE;
            // WGS84 Longitude
            int longitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
            offset += Integer.SIZE / Byte.SIZE;
            RecordValue twoDLocation = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.TwoDLocation");
            twoDLocation.setField("latitude", wrapper.setInteger(latitude));
            twoDLocation.setField("longitude", wrapper.setInteger(longitude));
            polygonalArea.appendField(twoDLocation);
        } // End of 'while' statement
//        ByteHelper.dump("exec_isLocationInsidePolygonalRegion: ", parameterList.get(1).getEncodedParameter());
        value = parameterList.get(1).getEncodedParameter();
        offset = 0;
        // WGS84 Latitude
        int latitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        // WGS84 Longitude
        int longitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        RecordValue location = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.ThreeDLocation");
        location.setField("latitude", wrapper.setInteger(latitude));
        location.setField("longitude", wrapper.setInteger(longitude));
        OctetstringValue elevation = wrapper.getOctetstring();
        elevation.setLength(2);
        elevation.setOctet(0, 0x00); elevation.setOctet(1, 0x00); 
        location.setField("elevation", elevation);
        BooleanValue result = _extfuncsImpl.fx_isLocationInsidePolygonalRegion(polygonalArea, location);
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_isLocationInsidePolygonalRegion", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_isLocationInsidePolygonalRegion
    
    private void exec_isLocationInsideIdentifiedRegion(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_isLocationInsideIdentifiedRegion");
        
        // Decode rectangularRegions parameter
//        ByteHelper.dump("exec_isLocationInsideIdentifiedRegion: ", parameterList.get(0).getEncodedParameter());
        ITciCDWrapper wrapper = TciCDWrapperFactory.getTciCDInstance();
        byte[] value = parameterList.get(0).getEncodedParameter();
        int offset = 0;
        // RegionDictionary
        EnumeratedValue region_dictionary = wrapper.getEnumValue("LibItsSecurity_TypesAndValues.RegionDictionary");
        region_dictionary.setInt(value[offset++]);
        // region_identifier
        int region_identifier = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Short.SIZE / Byte.SIZE));
        offset += Short.SIZE / Byte.SIZE;
        // local_region
        int local_region;
        if ((value[offset] & 0x80) == 0x00) { // One byte length
            local_region = value[offset];
        } else {
            // TODO Process it as IntX, not as 4 bytes integer
            value[offset] &= 0x7f;
            local_region = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Short.SIZE / Byte.SIZE));
        }
        RecordValue identifiedRegion = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.IdentifiedRegion");
        identifiedRegion.setField("region_dictionary", region_dictionary);
        identifiedRegion.setField("region_identifier", wrapper.setInteger(region_identifier));
        identifiedRegion.setField("local_region", wrapper.setInteger(local_region));
        
        // Decode location parameter
//        ByteHelper.dump("exec_isLocationInsideIdentifiedRegion: ", parameterList.get(1).getEncodedParameter());
        value = parameterList.get(1).getEncodedParameter();
        offset = 0;
        // WGS84 Latitude
        int latitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        // WGS84 Longitude
        int longitude = ByteHelper.byteArrayToInt(ByteHelper.extract(value, offset, Integer.SIZE / Byte.SIZE));
        offset += Integer.SIZE / Byte.SIZE;
        RecordValue location = wrapper.getRecordValue("LibItsSecurity_TypesAndValues.ThreeDLocation");
        location.setField("latitude", wrapper.setInteger(latitude));
        location.setField("longitude", wrapper.setInteger(longitude));
        OctetstringValue elevation = wrapper.getOctetstring();
        elevation.setLength(2);
        elevation.setOctet(0, 0x00); elevation.setOctet(1, 0x00); 
        location.setField("elevation", elevation);
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_isLocationInsideIdentifiedRegion(identifiedRegion, location);
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_isLocationInsideIdentifiedRegion", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_isLocationInsideIdentifiedRegion
    
    private void exec_loadCertificates(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_loadCertificates");
        
        // Decode parameter
//        ByteHelper.dump("exec_loadCertificates: ", parameterList.get(0).getEncodedParameter());
        CharstringValue rootDirectory = TciCDWrapperFactory.getTciCDInstance().getCharstringValue();
        String str = new String(parameterList.get(0).getEncodedParameter());
        rootDirectory.setString(str);
        
//        ByteHelper.dump("exec_loadCertificates: ", parameterList.get(1).getEncodedParameter());
        CharstringValue configId = TciCDWrapperFactory.getTciCDInstance().getCharstringValue();
        str = new String(parameterList.get(1).getEncodedParameter());
        configId.setString(str); 
        
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_loadCertificates(rootDirectory, configId);
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_loadCertificates", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_parseIpv6Address
    
    private void exec_unloadCertificates(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_unloadCertificates");
        
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_unloadCertificates();
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_unloadCertificates", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_parseIpv6Address
    
    private void exec_readCertificate(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_readCertificate");
        
        // Decode parameter
//        ByteHelper.dump("exec_readCertificate: ", parameterList.get(0).getEncodedParameter());
        CharstringValue certificateId = TciCDWrapperFactory.getTciCDInstance().getCharstringValue();
        String str = new String(parameterList.get(0).getEncodedParameter());
        certificateId.setString(str);
        
        OctetstringValue certificate = TciCDWrapperFactory.getTciCDInstance().getOctetstring();
        
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_readCertificate(certificateId, certificate);
        
        parameterList.get(1).setNumberOfBits(certificate.getLength() * Byte.SIZE);
        byte[] value = new byte[certificate.getLength()];
        for (int i = 0; i < value.length; i++) {
garciay's avatar
garciay committed
            value[i] = (byte) certificate.getOctet(i);
        }// End of 'for'statement
        parameterList.get(1).setEncodedParameter(value);
            
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_readCertificate", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_parseIpv6Address
    
    private void exec_readCertificateDigest(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_readCertificateDigest");
//        ByteHelper.dump("exec_readCertificate: ", parameterList.get(0).getEncodedParameter());
        CharstringValue certificateId = TciCDWrapperFactory.getTciCDInstance().getCharstringValue();
        String str = new String(parameterList.get(0).getEncodedParameter());
        certificateId.setString(str);
        
        OctetstringValue digest = TciCDWrapperFactory.getTciCDInstance().getOctetstring();
        
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_readCertificateDigest(certificateId, digest);
        
        parameterList.get(1).setNumberOfBits(digest.getLength() * Byte.SIZE);
        byte[] value = new byte[digest.getLength()];
        for (int i = 0; i < value.length; i++) {
garciay's avatar
garciay committed
            value[i] = (byte) digest.getOctet(i);
        }// End of 'for'statement
        parameterList.get(1).setEncodedParameter(value);
            
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_readCertificateDigest", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_readCertificateDigest
    
    private void exec_readSigningKey(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_readSigningKeys");
        
        // Decode parameter
//        ByteHelper.dump("exec_readSigningKeys: ", parameterList.get(0).getEncodedParameter());
        CharstringValue keysId = TciCDWrapperFactory.getTciCDInstance().getCharstringValue();
        String str = new String(parameterList.get(0).getEncodedParameter());
        keysId.setString(str);
        
        OctetstringValue privateKey = TciCDWrapperFactory.getTciCDInstance().getOctetstring();
        BooleanValue result = _extfuncsImpl.fx_readSigningKey(keysId, privateKey);
        parameterList.get(1).setNumberOfBits(privateKey.getLength() * Byte.SIZE);
        byte[] value = new byte[privateKey.getLength()];
        for (int i = 0; i < value.length; i++) {
garciay's avatar
garciay committed
            value[i] = (byte) privateKey.getOctet(i);
        }// End of 'for'statement
        parameterList.get(1).setEncodedParameter(value);
        
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_readSigningKeys", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_readSigningKeys
    
    private void exec_readEncryptingKey(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_readEncryptingKey");
        
        // Decode parameter
//        ByteHelper.dump("exec_readEncryptingKey: ", parameterList.get(0).getEncodedParameter());
        CharstringValue keysId = TciCDWrapperFactory.getTciCDInstance().getCharstringValue();
        String str = new String(parameterList.get(0).getEncodedParameter());
        keysId.setString(str);
        
        OctetstringValue privateKey = TciCDWrapperFactory.getTciCDInstance().getOctetstring();
        
        // Execute the function
        BooleanValue result = _extfuncsImpl.fx_readEncryptingKey(keysId, privateKey);
        
        parameterList.get(1).setNumberOfBits(privateKey.getLength() * Byte.SIZE);
        byte[] value = new byte[privateKey.getLength()];
        for (int i = 0; i < value.length; i++) {
garciay's avatar
garciay committed
            value[i] = (byte) privateKey.getOctet(i);
        }// End of 'for'statement
        parameterList.get(1).setEncodedParameter(value);
        
        // Return code
        returnValue.setParameterPassingMode(TriParameterPassingMode.TRI_OUT);
        returnValue.setNumberOfBits(Byte.SIZE);
        returnValue.setEncodedParameter(new byte[] { (byte)((result.getBoolean() == true) ? 0x01 : 0x00) });
        
        _logger.exiting("PluginAdapter", "exec_readSigningKeys", ByteHelper.byteArrayToString(returnValue.getEncodedParameter())); 
    } // End of method exec_readSigningKeys
    
    private void exec_parseIpv6Address(TriParameterList parameterList, TriParameter returnValue) {
        _logger.entering("PluginAdapter", "exec_parseIpv6Address");
        
    } // End of method exec_parseIpv6Address
    
    @Override
    public TriStatus triBeginWait(long arg0, TriComponentId arg1) {
        throw new RuntimeException();
    }

    @Override
    public TriStatus triNextSampling(long arg0, TriPortId arg1) {
        throw new RuntimeException();
    }

    @Override
    public TriStatus triReadClock(TriLong arg0) {
        throw new RuntimeException();
    }

    @Override
    public TriStatus triStartClock(long arg0) {
        throw new RuntimeException();
    }

    @Override
    public void triSAErrorReq(String arg0) {
        throw new RuntimeException();
    }

    @Override
    public TriStatus triGetStreamValue(TriComponentId arg0, TriPortId arg1, TriAddress arg2, TriMessage arg3) {
        throw new RuntimeException();
    }

    @Override
    public TriStatus triSetStreamValue(TriComponentId arg0, TriPortId arg1, TriAddress arg2, TriMessage arg3) {
        throw new RuntimeException();
    }
filatov's avatar
filatov committed
    
} // End of class PluginAdapter