All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.veraxsystems.vxipmi.coding.rmcp.RmcpEncoder Maven / Gradle / Ivy

The newest version!
/*
 * RmcpEncoder.java 
 * Created on 2011-07-21
 *
 * Copyright (c) Verax Systems 2011.
 * All rights reserved.
 *
 * This software is furnished under a license. Use, duplication,
 * disclosure and all other uses are restricted to the rights
 * specified in the written license agreement.
 */
package com.veraxsystems.vxipmi.coding.rmcp;

import com.veraxsystems.vxipmi.common.TypeConverter;

/**
 * Encodes RMCPMessage into RMCP packet.
 */
public final class RmcpEncoder {

    private RmcpEncoder() {
    }

    /**
     * Encodes RMCPMessage into RMCP packet.
     *
     * @param message
     *            - RMCP message to be encoded
     * @return byte data containing ready to send RMCP packet
     */
    public static byte[] encode(RmcpMessage message) {
        byte[] data = new byte[message.getData().length + 4];

        data[0] = encodeVersion(message.getVersion());

        data[1] = 0; // reserved

        data[2] = encodeSequenceNumber(message.getSequenceNumber());

        data[3] = encodeRMCPClassOfMessage(message.getClassOfMessage());

        encodeData(message.getData(), data);

        return data;
    }

    private static byte encodeVersion(RmcpVersion version) {
        switch (version) {
        case RMCP1_0:
            return RmcpConstants.RMCP_V1_0;
        default:
            throw new IllegalArgumentException("Invalid RMCP version");
        }
    }

    private static byte encodeSequenceNumber(byte sequenceNumber) {
        return sequenceNumber;
    }

    private static byte encodeRMCPClassOfMessage(
            RmcpClassOfMessage classOfMessage) {
        return TypeConverter.intToByte(classOfMessage.getCode());
    }

    /**
     * Copies data to message
     *
     * @param data
     *            - source data of RMCPMessage
     * @param message
     *            - result message
     */
    private static void encodeData(byte[] data, byte[] message) {
        System.arraycopy(data, 0, message, 4, data.length);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy