Package com.subgraph.orchid.data.exitpolicy

Source Code of com.subgraph.orchid.data.exitpolicy.PortRange

package com.subgraph.orchid.data.exitpolicy;

import com.subgraph.orchid.TorException;
import com.subgraph.orchid.TorParsingException;

public class PortRange {
 
  public static PortRange createFromString(String ports) {
    final String[] parts = ports.split("-");
    if(parts.length == 1) {
      return new PortRange(stringToPort(parts[0]));
    } else if(parts.length == 2) {
      return new PortRange(stringToPort(parts[0]), stringToPort(parts[1]));
    } else {
      throw new TorParsingException("Could not parse port range from string: " + ports);
    }
  }
 
  private static int stringToPort(String port) {
    try {
      final int portValue = Integer.parseInt(port);
      if(!isValidPort(portValue))
        throw new TorParsingException("Illegal port value: "+ port);
      return portValue;
    } catch(NumberFormatException e) {
      throw new TorParsingException("Could not parse port value: "+ port);
    }
  }
  private final static int MAX_PORT = 0xFFFF;
  public final static PortRange ALL_PORTS = new PortRange(1,MAX_PORT);
  private final int portStart;
  private final int portEnd;
 
  PortRange(int portValue) {
    this(portValue, portValue);
  }
 
  PortRange(int start, int end) {
    if(!isValidRange(start, end))
      throw new TorException("Invalid port range: "+ start +"-"+ end);
    portStart = start;
    portEnd = end;
  }
 
  static private boolean isValidRange(int start, int end) {
    if(!(isValidPort(start) && isValidPort(end)))
        return false;
    else if(start > end)
      return false;
    else
      return true;
  }
 
  static private boolean isValidPort(int port) {
    return port >= 0 && port <= MAX_PORT;
  }
 
  public boolean rangeContains(int port) {
    return port >= portStart && port <= portEnd;
  }
 
  public String toString() {
    if(portStart == 1 && portEnd == MAX_PORT) {
      return "*";
    } else if(portStart == portEnd) {
      return Integer.toString(portStart);
    } else {
      return Integer.toString(portStart) + "-" + Integer.toString(portEnd);
    }
  }

}
TOP

Related Classes of com.subgraph.orchid.data.exitpolicy.PortRange

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.