001    package railo.runtime.functions.decision;
002    
003    import java.io.IOException;
004    
005    import railo.commons.net.IPRange;
006    import railo.runtime.PageContext;
007    import railo.runtime.exp.FunctionException;
008    import railo.runtime.exp.PageException;
009    import railo.runtime.op.Caster;
010    import railo.runtime.type.Array;
011    
012    public class IsIPInRange {
013            public static boolean call(PageContext pc, Object ips,String ip) throws PageException {
014                    try {
015                            if(ips instanceof String)
016                                    return IPRange.getInstance((String)ips).inRange(ip);
017                            
018                            Array arr = Caster.toArray(ips,null);
019                            if(arr==null) throw new FunctionException(pc, "IsIpRange", 1, "ips", "ips must be a string list or a string array");
020                            
021                            String[] _ips=new String[arr.size()];
022                            for(int i=0;i<_ips.length;i++){
023                                    _ips[i]=Caster.toString(arr.getE(i+1),null);
024                                    if(_ips[i]==null)
025                                            throw new FunctionException(pc, "IsIpRange", 1, "ips", "element number "+(i+1)+" in ips array is not a string");
026                            }
027                            return IPRange.getInstance(_ips).inRange(ip);
028                            
029                    }
030                    catch(IOException e){
031                            throw Caster.toPageException(e);
032                    }
033                    
034                    
035            }
036    
037    }