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

net.jradius.server.JRadiusRequest 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.server;

import java.io.PrintWriter;
import java.io.StringWriter;

import net.jradius.exception.RadiusException;
import net.jradius.log.RadiusLog;
import net.jradius.packet.AccountingRequest;
import net.jradius.packet.PacketFactory;
import net.jradius.packet.RadiusPacket;
import net.jradius.packet.attribute.AttributeList;
import net.jradius.packet.attribute.RadiusAttribute;
import net.jradius.server.config.Configuration;
import net.jradius.session.JRadiusSession;

/**
 * An abstract class representing a JRadius Server Request.
 * 
 * @author David Bird
 * @author Gert Jan Verhoog
 */
public abstract class JRadiusRequest extends JRadiusEvent
{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JRadiusSession session;

    /**
     * @return Returns the return value of the JRadiusRequest
     */
    public abstract int getReturnValue();

    /**
     * @param returnValue The new return value to set
     */
    public abstract void setReturnValue(int returnValue);

    /**
     * @return Returns the RADIUS Server "Configuration Items" as AttributeList
     */
    public abstract AttributeList getConfigItems();
    
    /**
     * @return Returns an array of the RadiusPackets received
     */
    public abstract RadiusPacket[] getPackets();
    
    /**
     * @param configItems The new "Configuration Items" to set in the RADIUS Server
     */
    public abstract void setConfigItems(AttributeList configItems);
    
    /**
     * @param packets The RadiusPacket array to return to the RADIUS Server
     */
    public abstract void setPackets(RadiusPacket[] packets);
    
    /**
     * Get the RadiusSession assinged to this JRadiusRequest
     * @return Returns the session.
     */
    public JRadiusSession getSession()
    {
        return session;
    }
    
    /**
     * Assign a RadiusSession to a JRadiusRequest
     * @param session The session to set.
     */
    public void setSession(JRadiusSession session)
    {
        this.session = session;
    }

    /**
     * @return Returns the sessionKey, if one exists
     */
    public String getSessionKey()
    {
        if (session != null) return session.getSessionKey();
        return null;
    }
    
    /**
     * Convenience method, returns the Request RadiusPacket of a
     * JRadiusRequest. This is the first packet in the packet array.
     * @return a RadiusPacket containing the radius request
     * @throws RadiusException
     */
    public RadiusPacket getRequestPacket() throws RadiusException
    {
        RadiusPacket p[] = getPackets();
        if (p.length == 0)
        {
            throw new RuntimeException("No Request packet in JRadiusRequest");
        }
        return p[0];
    }
    
    /**
     * Convenience method, returns the Reply RadiusPacket of a
     * JRadiusRequest. This is the second packet in the packet array.
     * Use hasReplyPacket() to ensure there is a reply packet in the JRadiusRequest.
     * 
     * @return RadiusPacket containing the radius reply
     * @throws RadiusException
     */
    public RadiusPacket getReplyPacket() throws RadiusException
    {
        RadiusPacket p[] = getPackets();
        if (p.length < 2)
        {
            throw new RadiusException("No Reply packet in JRadiusRequest");
        }
        return p[1];
    }

    public void setReplyPacket(RadiusPacket np)
    {
        RadiusPacket p[] = getPackets();
        if (p[1] != null)
        {
        	// System.err.println("\n\n\n"+p[1]+"\n\n");
        	PacketFactory.recycle(p[1]);
        }
        p[1] = np;
    }

    /**
     * @return True if the JRadiusRequest has a reply packet
     */
    public boolean hasReplyPacket()
    {
        return getPackets().length == 2;
    }
    
    /**
     * @return Returns true if the request is an Accounting-Request
     */
    public boolean isAccountingRequest()
    {
        try
        {
            return (getRequestPacket() instanceof AccountingRequest);
        }
        catch (Exception e)
        {
            return false;
        }
    }
    
    /**
     * Add an attribute to the reply by adding to the reply packet, if one,
     * or the configItems.
     * @param a The RadiusAttribute
     */
    public void addReplyAttribute(RadiusAttribute a)
    {
        if (hasReplyPacket()) try { getReplyPacket().addAttribute(a); } catch (RadiusException e) {}
        else getConfigItems().add(a);
    }
    
    public void printDebugInfo()
    {
        if (Configuration.isDebug())
        {
            RadiusPacket[] rp = this.getPackets();

            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);

            // debug info:
            pw.println(">>> packets in request from \"" + getSender() + "\":");

            for (int i=0; i < rp.length; i++)
                if (rp[i] != null)
                {
                    pw.println("--- packet " + (i+1) + " of " + rp.length);
                    pw.println(rp[i].toString());
                }

            pw.println("Configuration Items:");
            pw.println(getConfigItems().toString());

            pw.flush();
            RadiusLog.debug(sw.toString());
        }
    }
    
    public String toString()
    {
        StringBuffer sb = new StringBuffer("{");
        sb.append(" requester = ").append(getSender());
        sb.append(", type = ").append(getTypeString());
        sb.append(" }");
        return sb.toString();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy