All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jcifs.netbios.UniAddress Maven / Gradle / Ivy

There is a newer version: 2.1.10
Show newest version
/* jcifs smb client library in Java
 * Copyright (C) 2000  "Michael B. Allen" 
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package jcifs.netbios;


import java.net.InetAddress;
import java.net.UnknownHostException;

import jcifs.Address;
import jcifs.CIFSContext;


/**
 * 

* Under normal conditions it is not necessary to use * this class to use jCIFS properly. Name resolusion is * handled internally to the jcifs.smb package. *

* This class is a wrapper for both {@link jcifs.netbios.NbtAddress} * and {@link java.net.InetAddress}. The name resolution mechanisms * used will systematically query all available configured resolution * services including WINS, broadcasts, DNS, and LMHOSTS. See * Setting Name Resolution Properties * and the jcifs.resolveOrder property. Changing * jCIFS name resolution properties can greatly affect the behavior of * the client and may be necessary for proper operation. *

* This class should be used in favor of InetAddress to resolve * hostnames on LANs and WANs that support a mixture of NetBIOS/WINS and * DNS resolvable hosts. */ public class UniAddress implements Address { /** * Check whether a hostname is actually an ip address * * @param hostname * @return whether this is an IP address */ public static boolean isDotQuadIP ( String hostname ) { if ( Character.isDigit(hostname.charAt(0)) ) { int i, len, dots; char[] data; i = dots = 0; /* quick IP address validation */ len = hostname.length(); data = hostname.toCharArray(); while ( i < len && Character.isDigit(data[ i++ ]) ) { if ( i == len && dots == 3 ) { // probably an IP address return true; } if ( i < len && data[ i ] == '.' ) { dots++; i++; } } } return false; } /** * Perform DNS SRV lookup on successively shorter suffixes of name * and return successful suffix or throw an UnknownHostException. * import javax.naming.*; * import javax.naming.directory.*; * public static String getDomainByName(String name) throws UnknownHostException { * DirContext context; * UnknownHostException uhe = null; * * try { * context = new InitialDirContext(); * for ( ;; ) { * try { * Attributes attributes = context.getAttributes( * "dns:/_ldap._tcp.dc._msdcs." + name, * new String[] { "SRV" } * ); * return name; * } catch (NameNotFoundException nnfe) { * uhe = new UnknownHostException(nnfe.getMessage()); * } * int dot = name.indexOf('.'); * if (dot == -1) * break; * name = name.substring(dot + 1); * } * } catch (NamingException ne) { * if (log.level > 1) * ne.printStackTrace(log); * } * * throw uhe != null ? uhe : new UnknownHostException("invalid name"); * } */ Object addr; String calledName; /** * Create a UniAddress by wrapping an InetAddress or * NbtAddress. * * @param addr * wrapped address */ public UniAddress ( Object addr ) { if ( addr == null ) { throw new IllegalArgumentException(); } this.addr = addr; } /** * Return the IP address of this address as a 32 bit integer. */ @Override public int hashCode () { return this.addr.hashCode(); } /** * Compare two addresses for equality. Two UniAddresss are equal * if they are both UniAddress' and refer to the same IP address. */ @Override public boolean equals ( Object obj ) { return obj instanceof UniAddress && this.addr.equals( ( (UniAddress) obj ).addr); } /** * Guess first called name to try for session establishment. This * method is used exclusively by the jcifs.smb package. * * @return the guessed name */ @Override public String firstCalledName () { if ( this.addr instanceof NbtAddress ) { return ( (NbtAddress) this.addr ).firstCalledName(); } this.calledName = ( (InetAddress) this.addr ).getHostName(); if ( isDotQuadIP(this.calledName) ) { this.calledName = NbtAddress.SMBSERVER_NAME; } else { int i = this.calledName.indexOf('.'); if ( i > 1 && i < 15 ) { this.calledName = this.calledName.substring(0, i).toUpperCase(); } else if ( this.calledName.length() > 15 ) { this.calledName = NbtAddress.SMBSERVER_NAME; } else { this.calledName = this.calledName.toUpperCase(); } } return this.calledName; } /** * Guess next called name to try for session establishment. This * method is used exclusively by the jcifs.smb package. * * @param tc * context to use * * @return guessed alternate name */ @Override public String nextCalledName ( CIFSContext tc ) { if ( this.addr instanceof NbtAddress ) { return ( (NbtAddress) this.addr ).nextCalledName(tc); } else if ( this.calledName != NbtAddress.SMBSERVER_NAME ) { this.calledName = NbtAddress.SMBSERVER_NAME; return this.calledName; } return null; } /** * Return the underlying NbtAddress or InetAddress. * * @return wrapped address */ public Object getAddress () { return this.addr; } /** * Return the hostname of this address such as "MYCOMPUTER". * * @return the hostname associated with the address */ @Override public String getHostName () { if ( this.addr instanceof NbtAddress ) { return ( (NbtAddress) this.addr ).getHostName(); } return ( (InetAddress) this.addr ).getHostName(); } /** * Return the IP address as text such as "192.168.1.15". * * @return the ip address */ @Override public String getHostAddress () { if ( this.addr instanceof NbtAddress ) { return ( (NbtAddress) this.addr ).getHostAddress(); } return ( (InetAddress) this.addr ).getHostAddress(); } /** * {@inheritDoc} * * @throws UnknownHostException * * @see jcifs.Address#toInetAddress() */ @Override public InetAddress toInetAddress () throws UnknownHostException { if ( this.addr instanceof Address ) { return ( (Address) this.addr ).toInetAddress(); } else if ( this.addr instanceof InetAddress ) { return (InetAddress) this.addr; } return null; } /** * {@inheritDoc} * * @see jcifs.Address#unwrap(java.lang.Class) */ @SuppressWarnings ( "unchecked" ) @Override public T unwrap ( Class type ) { if ( this.addr instanceof Address ) { return ( (Address) this.addr ).unwrap(type); } else if ( this.getClass().isAssignableFrom(type) ) { return (T) this; } return null; } /** * Return the a text representation of this address such as * MYCOMPUTER/192.168.1.15. */ @Override public String toString () { return this.addr.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy