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