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

com.veraxsystems.vxipmi.coding.payload.lan.IpmiLanResponse Maven / Gradle / Ivy

The newest version!
/*
 * IpmiLanResponse.java 
 * Created on 2011-08-02
 *
 * 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.payload.lan;

import com.veraxsystems.vxipmi.coding.payload.CompletionCode;
import com.veraxsystems.vxipmi.common.TypeConverter;

/**
 * A wrapper class for IPMB response message.
 */
public class IpmiLanResponse extends IpmiLanMessage {

    private CompletionCode completionCode;

    public void setCompletionCode(byte completionCode) {
        this.completionCode = CompletionCode.parseInt(TypeConverter
                .byteToInt(completionCode));
    }

    public CompletionCode getCompletionCode() {
        return completionCode;
    }

    /**
     * Builds IPMI LAN response message from byte array.
     *
     * @param rawData
     * @throws IllegalArgumentException
     *             when checksum is corrupted
     */
    public IpmiLanResponse(byte[] rawData) {
        setRequesterAddress(rawData[0]);
        networkFunction = TypeConverter.intToByte((TypeConverter
                .byteToInt(rawData[1]) & 0xfC) >> 2);
        setRequesterLogicalUnitNumber(TypeConverter.intToByte(TypeConverter
                .byteToInt(rawData[1]) & 0x03));
        if (rawData[2] != getChecksum1(rawData)) {
            throw new IllegalArgumentException("Checksum 1 failed");
        }
        setResponderAddress(rawData[3]);
        setSequenceNumber(TypeConverter.intToByte((TypeConverter
                .byteToInt(rawData[4]) & 0xfC) >> 2));
        setResponderLogicalUnitNumber(TypeConverter.intToByte(TypeConverter
                .byteToInt(rawData[4]) & 0x03));
        setCommand(rawData[5]);
        setCompletionCode(rawData[6]);

        if (rawData.length > 8) {
            byte[] data = new byte[rawData.length - 8];

            System.arraycopy(rawData, 7, data, 0, rawData.length - 8);

            setData(data);
        }

        if (rawData[rawData.length - 1] != getChecksum2(rawData)) {
            throw new IllegalArgumentException("Checksum 2 failed");
        }
    }

    @Override
    public int getPayloadLength() {
        int length = 8;
        if (getData() != null) {
            length += getData().length;
        }
        return length;
    }

    /**
     * @deprecated LAN response does not hve payload data
     */
    @Override
    @Deprecated
    public byte[] getPayloadData() {
        return null;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy