Package org.tinyradius.attribute

Source Code of org.tinyradius.attribute.IpAttribute

/**
* $Id: IpAttribute.java,v 1.3 2005/09/06 16:38:41 wuttke Exp $
* Created on 10.04.2005
* @author Matthias Wuttke
* @version $Revision: 1.3 $
*/
package org.tinyradius.attribute;

import java.util.StringTokenizer;

import org.tinyradius.util.RadiusException;

/**
* This class represents a Radius attribute for an IP number.
*/
public class IpAttribute extends RadiusAttribute {

  /**
   * Constructs an empty IP attribute.
   */
  public IpAttribute() {
    super();
  }
 
  /**
   * Constructs an IP attribute.
   * @param type attribute type code
   * @param value value, format: xx.xx.xx.xx
   */
  public IpAttribute(int type, String value) {
    setAttributeType(type);
    setAttributeValue(value);
  }
 
  /**
   * Constructs an IP attribute.
   * @param type attribute type code
   * @param ipNum value as a 32 bit unsigned int
   */
  public IpAttribute(int type, long ipNum) {
    setAttributeType(type);
    setIpAsLong(ipNum);
  }
 
  /**
   * Returns the attribute value (IP number) as a string of the
   * format "xx.xx.xx.xx".
   * @see org.tinyradius.attribute.RadiusAttribute#getAttributeValue()
   */
  public String getAttributeValue() {
    StringBuffer ip = new StringBuffer();
    byte[] data = getAttributeData();
    if (data == null || data.length != 4)
      throw new RuntimeException("ip attribute: expected 4 bytes attribute data");
   
    ip.append(data[0] & 0x0ff);
    ip.append(".");
    ip.append(data[1] & 0x0ff);
    ip.append(".");
    ip.append(data[2] & 0x0ff);
    ip.append(".");
    ip.append(data[3] & 0x0ff);
   
    return ip.toString();
  }
 
  /**
   * Sets the attribute value (IP number). String format:
   * "xx.xx.xx.xx".
   * @throws IllegalArgumentException
   * @throws NumberFormatException
   * @see org.tinyradius.attribute.RadiusAttribute#setAttributeValue(java.lang.String)
   */
  public void setAttributeValue(String value) {
    if (value == null || value.length() < 7 || value.length() > 15)
      throw new IllegalArgumentException("bad IP number");
   
    StringTokenizer tok = new StringTokenizer(value, ".");
    if (tok.countTokens() != 4)
      throw new IllegalArgumentException("bad IP number: 4 numbers required");
   
    byte[] data = new byte[4];
    for (int i = 0; i < 4; i++) {
      int num = Integer.parseInt(tok.nextToken());
      if (num < 0 || num > 255)
        throw new IllegalArgumentException("bad IP number: num out of bounds");
      data[i] = (byte)num;
    }
   
    setAttributeData(data);
  }
 
  /**
   * Returns the IP number as a 32 bit unsigned number. The number is
   * returned in a long because Java does not support unsigned ints.
   * @return IP number
   */
  public long getIpAsLong() {
    byte[] data = getAttributeData();
    if (data == null || data.length != 4)
      throw new RuntimeException("expected 4 bytes attribute data");
    return ((long)(data[0] & 0x0ff)) << 24 | (data[1] & 0x0ff) << 16 |
         (data[2] & 0x0ff) << 8 | (data[3] & 0x0ff);
  }
 
  /**
   * Sets the IP number represented by this IpAttribute
   * as a 32 bit unsigned number.
   * @param ip
   */
  public void setIpAsLong(long ip) {
    byte[] data = new byte[4];
    data[0] = (byte)((ip >> 24) & 0x0ff);
    data[1] = (byte)((ip >> 16) & 0x0ff);
    data[2] = (byte)((ip >> 8) & 0x0ff);
    data[3] = (byte)(ip & 0x0ff);
    setAttributeData(data);
  }

  /**
   * Check attribute length.
   * @see org.tinyradius.attribute.RadiusAttribute#readAttribute(byte[], int, int)
   */
  public void readAttribute(byte[] data, int offset, int length)
  throws RadiusException {
    if (length != 6)
      throw new RadiusException("IP attribute: expected 4 bytes data");
    super.readAttribute(data, offset, length);
  }

}
TOP

Related Classes of org.tinyradius.attribute.IpAttribute

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.