13742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/** 23742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 33742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 43742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpackage javax.jmdns.impl; 53742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 63742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanimport java.net.InetAddress; 73742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 83742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/** 93742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpublic interface NameRegister { 123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public enum NameType { 173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * This name represents a host name 193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman HOST, 213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * This name represents a service name 233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman SERVICE, 253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static class UniqueNamePerInterface implements NameRegister { 283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /* 303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * (non-Javadoc) 313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @see javax.jmdns.impl.NameRegister#register(java.net.InetAddress, java.lang.String, javax.jmdns.impl.NameRegister.NameType) 323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public void register(InetAddress networkInterface, String name, NameType type) { 353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // TODO Auto-generated method stub 363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /* 403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * (non-Javadoc) 413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @see javax.jmdns.impl.NameRegister#checkName(java.net.InetAddress, java.lang.String, javax.jmdns.impl.NameRegister.NameType) 423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public boolean checkName(InetAddress networkInterface, String name, NameType type) { 453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // TODO Auto-generated method stub 463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return false; 473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /* 503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * (non-Javadoc) 513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @see javax.jmdns.impl.NameRegister#incrementHostName(java.net.InetAddress, java.lang.String, javax.jmdns.impl.NameRegister.NameType) 523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public String incrementHostName(InetAddress networkInterface, String name, NameType type) { 553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // TODO Auto-generated method stub 563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return null; 573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static class UniqueNameAcrossInterface implements NameRegister { 623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /* 643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * (non-Javadoc) 653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @see javax.jmdns.impl.NameRegister#register(java.net.InetAddress, java.lang.String, javax.jmdns.impl.NameRegister.NameType) 663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public void register(InetAddress networkInterface, String name, NameType type) { 693742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // TODO Auto-generated method stub 703742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 713742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 723742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 733742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /* 743742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * (non-Javadoc) 753742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @see javax.jmdns.impl.NameRegister#checkName(java.net.InetAddress, java.lang.String, javax.jmdns.impl.NameRegister.NameType) 763742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 773742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 783742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public boolean checkName(InetAddress networkInterface, String name, NameType type) { 793742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // TODO Auto-generated method stub 803742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return false; 813742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 823742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 833742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /* 843742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * (non-Javadoc) 853742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @see javax.jmdns.impl.NameRegister#incrementHostName(java.net.InetAddress, java.lang.String, javax.jmdns.impl.NameRegister.NameType) 863742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 873742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 883742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public String incrementHostName(InetAddress networkInterface, String name, NameType type) { 893742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // TODO Auto-generated method stub 903742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return null; 913742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 923742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 933742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 943742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 953742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static class Factory { 963742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 973742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private static volatile NameRegister _register; 983742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 993742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1003742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Register a Name register. 1013742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1023742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param register 1033742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * new register 1043742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @throws IllegalStateException 1053742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * the register can only be set once 1063742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1073742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static void setRegistry(NameRegister register) throws IllegalStateException { 1083742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman if (_register != null) { 1093742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman throw new IllegalStateException("The register can only be set once."); 1103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman if (register != null) { 1123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _register = register; 1133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns the name register. 1183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return name register 1203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public static NameRegister getRegistry() { 1223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman if (_register == null) { 1233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _register = new UniqueNamePerInterface(); 1243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _register; 1263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Registers a name that is defended by this group of mDNS. 1323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param networkInterface 1343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * IP address to handle 1353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param name 1363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * name to register 1373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param type 1383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * name type to register 1393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public abstract void register(InetAddress networkInterface, String name, NameType type); 1413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Checks a name that is defended by this group of mDNS. 1443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param networkInterface 1463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * IP address to handle 1473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param name 1483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * name to check 1493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param type 1503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * name type to check 1513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if the name is not in conflict, <code>flase</code> otherwise. 1523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public abstract boolean checkName(InetAddress networkInterface, String name, NameType type); 1543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Increments a name that is defended by this group of mDNS after it has been found in conflict. 1573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param networkInterface 1593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * IP address to handle 1603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param name 1613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * name to increment 1623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @param type 1633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * name type to increments 1643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return new name 1653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public abstract String incrementHostName(InetAddress networkInterface, String name, NameType type); 1673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman} 169