Mega Code Archive

 
Categories / Java / Network Protocol
 

Checks that the protocol

// URLUtils.java // $Id: URLUtils.java,v 1.3 2007/02/11 18:39:47 ylafon Exp $ // (c) COPYRIGHT ERCIM, Keio and MIT, 2003. // Please first read the full copyright statement in file COPYRIGHT.html import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; public class URLUtils {   static Method url_defport;   static {     try {       Class c = java.net.URL.class;       url_defport = c.getMethod("getDefaultPort", (Class[]) null);     } catch (NoSuchMethodException ex) {       // not using a recent jdk...       url_defport = null;     }   }   /**    * Checks that the protocol://host:port part of two URLs are equal.    *     * @param u1,    *          the first URL to check    * @param u2,    *          the second URL to check    * @return a boolean, true if the protocol://host:port part of the URL are    *         equals, false otherwise    */   public static boolean equalsProtocolHostPort(URL u1, URL u2) {     if ((u1 == null) || (u2 == null)) {       return false;     }     // check that the protocol are the same (as it impacts the     // default port check     if (!u1.getProtocol().equalsIgnoreCase(u2.getProtocol())) {       return false;     }     // check that both hostnames are equal     if (!u1.getHost().equalsIgnoreCase(u2.getHost())) {       return false;     }     int u1p = u1.getPort();     int u2p = u2.getPort();     // if port is ok, it's good!     if (u1p == u2p) {       return true;     } else if ((u1p > 0) && (u2p > 0)) {       return false;     }     // otherwise, the painful comparison of -1 and such     if (url_defport != null) {       if (u1p == -1) {         try {           int u1dp;           u1dp = ((Integer) url_defport.invoke(u1, (Object[]) null)).intValue();           return (u2p == u1dp);         } catch (InvocationTargetException ex) {         } catch (IllegalAccessException iex) {         }       } else {         try {           int u2dp;           u2dp = ((Integer) url_defport.invoke(u2, (Object[]) null)).intValue();           return (u1p == u2dp);         } catch (InvocationTargetException ex) {         } catch (IllegalAccessException iex) {         }       }     }     // no JDK 1.4 this is becoming painful...     if (u1p == -1) {       String s = u1.getProtocol();       int u1dp = 0;       if (s.equalsIgnoreCase("http")) {         u1dp = 80;       } else if (s.equalsIgnoreCase("https")) {         u1dp = 443;       } // FIXME do others?       return (u2p == u1dp);     } else {       String s = u2.getProtocol();       int u2dp = 0;       if (s.equalsIgnoreCase("http")) {         u2dp = 80;       } else if (s.equalsIgnoreCase("https")) {         u2dp = 443;       } // FIXME do others?       return (u1p == u2dp);     }   }   /**    * normalize an URL,    *     * @param u,    *          the URL to normalize    * @return a new URL, the normalized version of the parameter, or the u URL,    *         if something failed in the process    */   public static URL normalize(URL u) {     String proto = u.getProtocol().toLowerCase();     String host = u.getHost().toLowerCase();     int port = u.getPort();     if (port != -1) {       if (url_defport != null) {         try {           int udp;           udp = ((Integer) url_defport.invoke(u, (Object[]) null)).intValue();           // we have the default, skip the port part           if (udp == port) {             port = -1;           }         } catch (InvocationTargetException ex) {         } catch (IllegalAccessException iex) {         }       } else {         switch (port) {         case 21:           if (proto.equals("ftp")) {             port = -1;           }           break;         case 80:           if (proto.equals("http")) {             port = -1;           }           break;         case 443:           if (proto.equals("https")) {             port = -1;           }           break;         }       }     }     try {       URL _nu;       if (port == -1) {         _nu = new URL(proto, host, u.getFile());       } else {         _nu = new URL(proto, host, port, u.getFile());       }       return _nu;     } catch (MalformedURLException ex) {     }     return u;   } }