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

net.jradius.packet.AccountingRequest Maven / Gradle / Ivy

The newest version!
/**
 * JRadius - A RADIUS Server Java Adapter
 * Copyright (C) 2004-2005 PicoPoint, B.V.
 * Copyright (c) 2006 David Bird 
 *
 * This library is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or (at
 * your option) any later version.
 *
 * This library is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
 * License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
 */

package net.jradius.packet;

import java.nio.ByteBuffer;
import java.util.Arrays;

import net.jradius.client.RadiusClient;
import net.jradius.packet.attribute.AttributeDictionary;
import net.jradius.packet.attribute.AttributeFactory;
import net.jradius.packet.attribute.AttributeList;
import net.jradius.packet.attribute.RadiusAttribute;
import net.jradius.packet.attribute.value.NamedValue;
import net.jradius.util.RadiusUtils;


/**
 *  The RADIUS Accounting-Request Packet.
 *  See http://www.iana.org/assignments/radius-types
 *
 * @author David Bird
 */
public class AccountingRequest extends RadiusRequest
{
    public static final byte CODE = (byte)4;
    private static final long serialVersionUID = (long)CODE;
    
    /**
     * Default constructor
     */
    public AccountingRequest() 
    {
        code = CODE;
    }

    /**
     * Constructor
     * @param client The client context to be used (when creating UDP packets)
     */
    public AccountingRequest(RadiusClient client) 
    {
        super(client);
        code = CODE;
    }

    /**
     * Constructor
     * @param attributes The attribute list to be used
     */
    public AccountingRequest(AttributeList attributes) 
    {
        super(attributes);
        code = CODE;
    }

    /**
     * Constructor
     * @param client The client context to be used (when creating UDP packets)
     * @param attributes The attribute list to be used
     */
    public AccountingRequest(RadiusClient client, AttributeList attributes) 
    {
    	super(client, attributes);
        code = CODE;
    }
    
    public static final int ACCT_STATUS_START 		   = 1;
    public static final int ACCT_STATUS_STOP 		   = 2;
    public static final int ACCT_STATUS_INTERIM 	   = 3;
    public static final int ACCT_STATUS_ACCOUNTING_ON  = 7;
    public static final int ACCT_STATUS_ACCOUNTING_OFF = 8;
    
    public int getAccountingStatusType()
    {
	    Long i = (Long)getAttributeValue(AttributeDictionary.ACCT_STATUS_TYPE);
	    if (i != null) return i.intValue();
	    return -1;
    }
    
    public void setAccountingStatusType(int type)
    {
        RadiusAttribute a = AttributeFactory.newAttribute(AttributeDictionary.ACCT_STATUS_TYPE, null, isRecyclable());
        NamedValue s = (NamedValue)a.getValue();
        s.setValue(new Long(type));
        overwriteAttribute(a);
    }
    
    /**
     * Creates a Accounting-Request Authenticator
     * @see net.jradius.packet.RadiusPacket#createAuthenticator(byte[])
     */
    public byte[] createAuthenticator(byte[] attributes, int offset, int length, String sharedSecret) 
    {
        this.authenticator = RadiusUtils.makeRFC2866RequestAuthenticator(sharedSecret,
        		(byte) getCode(), (byte) getIdentifier(), 
        		length + RADIUS_HEADER_LENGTH, 
        		attributes, offset, length);

        return this.authenticator;
    }

    public boolean verifyAuthenticator(String sharedSecret)
    {
    	ByteBuffer buffer = ByteBuffer.allocate(4096);
    	RadiusFormat.getInstance().packAttributeList(getAttributes(), buffer, true);

        byte[] newauth = RadiusUtils.makeRFC2866RequestAuthenticator(sharedSecret,
                (byte)getCode(), (byte)getIdentifier(), 
                buffer.position() + RADIUS_HEADER_LENGTH, 
                buffer.array(), 0, buffer.position());

        return Arrays.equals(newauth, this.authenticator);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy