13742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Copyright 2003-2005 Arthur van Hoff, Rick Blair 23742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Licensed under Apache License version 2.0 33742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Original license LGPL 43742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 53742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpackage javax.jmdns.impl.constants; 63742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 73742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/** 83742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * DNSState defines the possible states for services registered with JmDNS. 93742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @author Werner Randelshofer, Rick Blair, Pierre Frisch 113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpublic enum DNSState { 133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman PROBING_1("probing 1", StateClass.probing), 183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman PROBING_2("probing 2", StateClass.probing), 223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman PROBING_3("probing 3", StateClass.probing), 263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman ANNOUNCING_1("announcing 1", StateClass.announcing), 303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman ANNOUNCING_2("announcing 2", StateClass.announcing), 343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman ANNOUNCED("announced", StateClass.announced), 383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman CANCELING_1("canceling 1", StateClass.canceling), 423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman CANCELING_2("canceling 2", StateClass.canceling), 463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman CANCELING_3("canceling 3", StateClass.canceling), 503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman CANCELED("canceled", StateClass.canceled), 543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman CLOSING("closing", StateClass.closing), 583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman CLOSED("closed", StateClass.closed); 623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private enum StateClass { 643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman probing, announcing, announced, canceling, canceled, closing, closed 653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // private static Logger logger = Logger.getLogger(DNSState.class.getName()); 683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 693742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private final String _name; 703742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 713742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private final StateClass _state; 723742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 733742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman private DNSState(String name, StateClass state) { 743742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _name = name; 753742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman _state = state; 763742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 773742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 783742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman @Override 793742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final String toString() { 803742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _name; 813742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 823742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 833742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 843742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns the next advanced state.<br/> 853742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * In general, this advances one step in the following sequence: PROBING_1, PROBING_2, PROBING_3, ANNOUNCING_1, ANNOUNCING_2, ANNOUNCED.<br/> 863742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * or CANCELING_1, CANCELING_2, CANCELING_3, CANCELED Does not advance for ANNOUNCED and CANCELED state. 873742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 883742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return next state 893742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 903742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final DNSState advance() { 913742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman switch (this) { 923742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case PROBING_1: 933742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return PROBING_2; 943742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case PROBING_2: 953742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return PROBING_3; 963742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case PROBING_3: 973742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return ANNOUNCING_1; 983742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case ANNOUNCING_1: 993742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return ANNOUNCING_2; 1003742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case ANNOUNCING_2: 1013742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return ANNOUNCED; 1023742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case ANNOUNCED: 1033742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return ANNOUNCED; 1043742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELING_1: 1053742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CANCELING_2; 1063742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELING_2: 1073742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CANCELING_3; 1083742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELING_3: 1093742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CANCELED; 1103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELED: 1113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CANCELED; 1123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CLOSING: 1133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CLOSED; 1143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CLOSED: 1153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CLOSED; 1163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman default: 1173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // This is just to keep the compiler happy as we have covered all cases before. 1183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return this; 1193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns to the next reverted state. All states except CANCELED revert to PROBING_1. Status CANCELED does not revert. 1243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return reverted state 1263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final DNSState revert() { 1283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman switch (this) { 1293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case PROBING_1: 1303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case PROBING_2: 1313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case PROBING_3: 1323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case ANNOUNCING_1: 1333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case ANNOUNCING_2: 1343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case ANNOUNCED: 1353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return PROBING_1; 1363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELING_1: 1373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELING_2: 1383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELING_3: 1393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CANCELING_1; 1403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CANCELED: 1413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CANCELED; 1423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CLOSING: 1433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CLOSING; 1443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman case CLOSED: 1453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return CLOSED; 1463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman default: 1473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman // This is just to keep the compiler happy as we have covered all cases before. 1483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return this; 1493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns true, if this is a probing state. 1543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if probing state, <code>false</code> otherwise 1563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final boolean isProbing() { 1583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _state == StateClass.probing; 1593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns true, if this is an announcing state. 1633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if announcing state, <code>false</code> otherwise 1653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final boolean isAnnouncing() { 1673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _state == StateClass.announcing; 1683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1693742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1703742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1713742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns true, if this is an announced state. 1723742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1733742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if announced state, <code>false</code> otherwise 1743742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1753742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final boolean isAnnounced() { 1763742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _state == StateClass.announced; 1773742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1783742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1793742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1803742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns true, if this is a canceling state. 1813742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1823742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if canceling state, <code>false</code> otherwise 1833742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1843742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final boolean isCanceling() { 1853742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _state == StateClass.canceling; 1863742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1873742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1883742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1893742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns true, if this is a canceled state. 1903742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 1913742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if canceled state, <code>false</code> otherwise 1923742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 1933742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final boolean isCanceled() { 1943742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _state == StateClass.canceled; 1953742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 1963742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 1973742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 1983742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns true, if this is a closing state. 1993742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 2003742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if closing state, <code>false</code> otherwise 2013742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 2023742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final boolean isClosing() { 2033742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _state == StateClass.closing; 2043742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 2053742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 2063742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman /** 2073742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * Returns true, if this is a closing state. 2083742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * 2093742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @return <code>true</code> if closed state, <code>false</code> otherwise 2103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */ 2113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman public final boolean isClosed() { 2123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman return _state == StateClass.closed; 2133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman } 2143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman 2153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman} 216