001    package railo.runtime.functions.decision;
002    
003    import java.net.InetAddress;
004    import java.net.UnknownHostException;
005    
006    import railo.commons.lang.StringUtil;
007    import railo.runtime.PageContext;
008    import railo.runtime.ext.function.Function;
009    
010    /**
011     * Implements the Cold Fusion Function isleapyear
012     */
013    public final class IsLocalHost implements Function {
014            
015            private static final long serialVersionUID = 5680807516948697186L;
016            
017            public static boolean call(PageContext pc , String ip) {
018                    return invoke(ip);
019            }
020            public static boolean invoke(String ip) {
021                    
022                    if(StringUtil.isEmpty(ip,true)) return false;
023                    ip=ip.trim().toLowerCase();
024                    if(
025                                    ip.equalsIgnoreCase("localhost") || 
026                                    ip.equals("127.0.0.1") || 
027                                    ip.equalsIgnoreCase("0:0:0:0:0:0:0:1") || 
028                                    ip.equalsIgnoreCase("0:0:0:0:0:0:0:1%0") || 
029                                    ip.equalsIgnoreCase("::1"))
030                            return true;
031    
032                    try {
033                            InetAddress addr = InetAddress.getByName(ip);
034                            InetAddress localHost = InetAddress.getLocalHost();
035                            if(localHost.equals(addr)) return true;
036                            
037                            InetAddress localHosts[] = InetAddress.getAllByName(localHost.getHostName());
038                            
039                            for(int i=0;i<localHosts.length;i++){
040                                    if(localHosts[i].equals(addr)) return true;
041                            }
042            }
043            catch(UnknownHostException e){}
044            
045            return false;
046            }
047    }