/*
* Mobicents, Communications Middleware
*
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Middleware LLC.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program 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 distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
*
* Boston, MA 02110-1301 USA
*/
package org.mobicents.slee.resource.diameter.base;
import java.net.InetAddress;
import java.util.Date;
import net.java.slee.resource.diameter.base.DiameterAvpFactory;
import net.java.slee.resource.diameter.base.NoSuchAvpException;
import net.java.slee.resource.diameter.base.events.DiameterCommand;
import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException;
import net.java.slee.resource.diameter.base.events.avp.AvpUtilities;
import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
import net.java.slee.resource.diameter.base.events.avp.DiameterAvpCodes;
import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
import net.java.slee.resource.diameter.base.events.avp.Enumerated;
import net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp;
import net.java.slee.resource.diameter.base.events.avp.FailedAvp;
import net.java.slee.resource.diameter.base.events.avp.ProxyInfoAvp;
import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp;
import org.mobicents.slee.resource.diameter.base.events.DiameterCommandImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.ExperimentalResultAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.FailedAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.ProxyInfoAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvpImpl;
/**
*
* <br>Super project: mobicents
* <br>7:52:06 PM May 13, 2008
* <br>
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
* @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
* @author Erick Svenson
*/
public class DiameterAvpFactoryImpl implements DiameterAvpFactory
{
// RFC3588 - Page 40
// Unless otherwise noted, AVPs will have the following default AVP
// Flags field settings:
// The �M� bit MUST be set. The �V� bit MUST NOT be set.
private final static long BASE_VENDOR_ID = 0L;
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createCommand(int, int, java.lang.String, java.lang.String, boolean, boolean)
*/
public DiameterCommand createCommand( int commandCode, int applicationId, String shortName, String longName, boolean isRequest, boolean isProxiable )
{
return new DiameterCommandImpl( commandCode, applicationId, shortName, longName, isRequest, isProxiable );
}
// Generic AVP Creators
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, net.java.slee.resource.diameter.base.events.avp.DiameterAvp[])
*/
public DiameterAvp createAvp( int avpCode, DiameterAvp[] avps ) throws NoSuchAvpException, AvpNotAllowedException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, avps);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, net.java.slee.resource.diameter.base.events.avp.DiameterAvp[])
*/
public DiameterAvp createAvp( int vendorId, int avpCode, DiameterAvp[] avps ) throws NoSuchAvpException, AvpNotAllowedException
{
GroupedAvpImpl avp = (GroupedAvpImpl) AvpUtilities.createAvp( avpCode, vendorId, GroupedAvpImpl.class );
avp.setExtensionAvps( avps );
return avp;
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, byte[])
*/
public DiameterAvp createAvp( int avpCode, byte[] value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, byte[])
*/
public DiameterAvp createAvp( int vendorId, int avpCode, byte[] value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int)
*/
public DiameterAvp createAvp( int avpCode, int value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, int)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, int value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, long)
*/
public DiameterAvp createAvp( int avpCode, long value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, long)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, long value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, float)
*/
public DiameterAvp createAvp( int avpCode, float value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, float)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, float value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, double)
*/
public DiameterAvp createAvp( int avpCode, double value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, double)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, double value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, java.net.InetAddress)
*/
public DiameterAvp createAvp( int avpCode, InetAddress value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, java.net.InetAddress)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, InetAddress value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, java.util.Date)
*/
public DiameterAvp createAvp( int avpCode, Date value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, java.util.Date)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, Date value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, java.lang.String)
*/
public DiameterAvp createAvp( int avpCode, String value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, java.lang.String)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, String value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, net.java.slee.resource.diameter.base.events.avp.Enumerated)
*/
public DiameterAvp createAvp( int avpCode, Enumerated value ) throws NoSuchAvpException
{
return createAvp((int)BASE_VENDOR_ID, avpCode, value);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createAvp(int, int, net.java.slee.resource.diameter.base.events.avp.Enumerated)
*/
public DiameterAvp createAvp( int vendorId, int avpCode, Enumerated value ) throws NoSuchAvpException
{
return AvpUtilities.createAvp(avpCode, vendorId, value);
}
// Custom Grouped AVP Creators
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createExperimentalResult(long, long)
*/
public ExperimentalResultAvp createExperimentalResult( long vendorId, long experimentalResultCode )
{
ExperimentalResultAvp experimentalResultAvp = createExperimentalResult();
experimentalResultAvp.setVendorIdAVP(vendorId);
experimentalResultAvp.setExperimentalResultCode(experimentalResultCode);
return experimentalResultAvp;
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createExperimentalResult()
*/
public ExperimentalResultAvp createExperimentalResult()
{
return createExperimentalResult( new DiameterAvp[0] );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createExperimentalResult(net.java.slee.resource.diameter.base.events.avp.DiameterAvp)
*/
public ExperimentalResultAvp createExperimentalResult( DiameterAvp avp ) throws AvpNotAllowedException
{
return createExperimentalResult( new DiameterAvp[]{ avp } );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createExperimentalResult(net.java.slee.resource.diameter.base.events.avp.DiameterAvp[])
*/
public ExperimentalResultAvp createExperimentalResult( DiameterAvp[] avps ) throws AvpNotAllowedException
{
return (ExperimentalResultAvp) AvpUtilities.createAvp( DiameterAvpCodes.EXPERIMENTAL_RESULT, avps, ExperimentalResultAvpImpl.class );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createFailedAvp()
*/
public FailedAvp createFailedAvp()
{
return createFailedAvp( new DiameterAvp[0] );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createFailedAvp(net.java.slee.resource.diameter.base.events.avp.DiameterAvp)
*/
public FailedAvp createFailedAvp( DiameterAvp avp )
{
return createFailedAvp( new DiameterAvp[]{ avp } );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createFailedAvp(net.java.slee.resource.diameter.base.events.avp.DiameterAvp[])
*/
public FailedAvp createFailedAvp( DiameterAvp[] avps )
{
return (FailedAvp) AvpUtilities.createAvp( DiameterAvpCodes.FAILED_AVP, avps, FailedAvpImpl.class );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createProxyInfo(net.java.slee.resource.diameter.base.events.avp.DiameterIdentity, byte[])
*/
public ProxyInfoAvp createProxyInfo( DiameterIdentity proxyHost, byte[] proxyState )
{
ProxyInfoAvp proxyInfo = createProxyInfo();
proxyInfo.setProxyHost( proxyHost );
proxyInfo.setProxyState( proxyState );
return proxyInfo;
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createProxyInfo()
*/
public ProxyInfoAvp createProxyInfo()
{
return createProxyInfo(new DiameterAvp[0]);
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createProxyInfo(net.java.slee.resource.diameter.base.events.avp.DiameterAvp)
*/
public ProxyInfoAvp createProxyInfo( DiameterAvp avp )
{
return createProxyInfo( new DiameterAvp[]{avp} );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createProxyInfo(net.java.slee.resource.diameter.base.events.avp.DiameterAvp[])
*/
public ProxyInfoAvp createProxyInfo( DiameterAvp[] avps )
{
return (ProxyInfoAvp) AvpUtilities.createAvp( DiameterAvpCodes.PROXY_INFO, avps, ProxyInfoAvpImpl.class );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createVendorSpecificApplicationId(long)
*/
public VendorSpecificApplicationIdAvp createVendorSpecificApplicationId( long vendorId )
{
VendorSpecificApplicationIdAvp vsaidAvp = createVendorSpecificApplicationId();
vsaidAvp.setVendorIdAvp(vendorId);
return vsaidAvp;
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createVendorSpecificApplicationId()
*/
public VendorSpecificApplicationIdAvp createVendorSpecificApplicationId()
{
return createVendorSpecificApplicationId( new DiameterAvp[0] );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createVendorSpecificApplicationId(net.java.slee.resource.diameter.base.events.avp.DiameterAvp)
*/
public VendorSpecificApplicationIdAvp createVendorSpecificApplicationId( DiameterAvp avp ) throws AvpNotAllowedException
{
return createVendorSpecificApplicationId( new DiameterAvp[]{avp} );
}
/*
* (non-Javadoc)
* @see net.java.slee.resource.diameter.base.DiameterAvpFactory#createVendorSpecificApplicationId(net.java.slee.resource.diameter.base.events.avp.DiameterAvp[])
*/
public VendorSpecificApplicationIdAvp createVendorSpecificApplicationId( DiameterAvp[] avps ) throws AvpNotAllowedException
{
return (VendorSpecificApplicationIdAvp) AvpUtilities.createAvp( DiameterAvpCodes.VENDOR_SPECIFIC_APPLICATION_ID, avps, VendorSpecificApplicationIdAvpImpl.class );
}
}