001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020package org.apache.directory.shared.kerberos.codec.adKdcIssued; 021 022 023import org.apache.directory.api.asn1.actions.CheckNotNullLength; 024import org.apache.directory.api.asn1.ber.grammar.AbstractGrammar; 025import org.apache.directory.api.asn1.ber.grammar.Grammar; 026import org.apache.directory.api.asn1.ber.grammar.GrammarTransition; 027import org.apache.directory.api.asn1.ber.tlv.UniversalTag; 028import org.apache.directory.shared.kerberos.KerberosConstants; 029import org.apache.directory.shared.kerberos.codec.adKdcIssued.actions.AdKdcIssuedInit; 030import org.apache.directory.shared.kerberos.codec.adKdcIssued.actions.StoreChecksum; 031import org.apache.directory.shared.kerberos.codec.adKdcIssued.actions.StoreElements; 032import org.apache.directory.shared.kerberos.codec.adKdcIssued.actions.StoreIRealm; 033import org.apache.directory.shared.kerberos.codec.adKdcIssued.actions.StoreISName; 034import org.slf4j.Logger; 035import org.slf4j.LoggerFactory; 036 037 038/** 039 * This class implements the AdKdcIssued structure. All the actions are declared 040 * in this class. As it is a singleton, these declaration are only done once. If 041 * an action is to be added or modified, this is where the work is to be done ! 042 * 043 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 044 */ 045public final class AdKDCIssuedGrammar extends AbstractGrammar<AdKdcIssuedContainer> 046{ 047 /** The logger */ 048 static final Logger LOG = LoggerFactory.getLogger( AdKDCIssuedGrammar.class ); 049 050 /** A speedup for logger */ 051 static final boolean IS_DEBUG = LOG.isDebugEnabled(); 052 053 /** The instance of grammar. AdKdcIssuedGrammar is a singleton */ 054 private static Grammar<AdKdcIssuedContainer> instance = new AdKDCIssuedGrammar(); 055 056 057 /** 058 * Creates a new AdKdcIssuedGrammar object. 059 */ 060 @SuppressWarnings("unchecked") 061 private AdKDCIssuedGrammar() 062 { 063 setName( AdKDCIssuedGrammar.class.getName() ); 064 065 // Create the transitions table 066 super.transitions = new GrammarTransition[AdKDCIssuedStatesEnum.LAST_AD_KDC_ISSUED_STATE.ordinal()][256]; 067 068 // ============================================================================================ 069 // AdKdcIssued 070 // ============================================================================================ 071 // -------------------------------------------------------------------------------------------- 072 // Transition from AdKdcIssued init to SEQ 073 // -------------------------------------------------------------------------------------------- 074 // AD-KDCIssued ::= SEQUENCE { 075 super.transitions[AdKDCIssuedStatesEnum.START_STATE.ordinal()][UniversalTag.SEQUENCE.getValue()] = 076 new GrammarTransition<AdKdcIssuedContainer>( 077 AdKDCIssuedStatesEnum.START_STATE, 078 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_SEQ_STATE, 079 UniversalTag.SEQUENCE, 080 new AdKdcIssuedInit() ); 081 082 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_SEQ_STATE.ordinal()][KerberosConstants.AD_KDC_ISSUED_AD_CHECKSUM_TAG] = 083 new GrammarTransition<AdKdcIssuedContainer>( 084 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_SEQ_STATE, 085 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_AD_CHECKSUM_TAG_STATE, 086 KerberosConstants.AD_KDC_ISSUED_AD_CHECKSUM_TAG, 087 new StoreChecksum() ); 088 089 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_AD_CHECKSUM_TAG_STATE.ordinal()][KerberosConstants.AD_KDC_ISSUED_I_REALM_TAG] = 090 new GrammarTransition<AdKdcIssuedContainer>( 091 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_AD_CHECKSUM_TAG_STATE, 092 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_TAG_STATE, 093 KerberosConstants.AD_KDC_ISSUED_I_REALM_TAG, 094 new CheckNotNullLength<AdKdcIssuedContainer>() ); 095 096 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_AD_CHECKSUM_TAG_STATE.ordinal()][KerberosConstants.AD_KDC_ISSUED_I_SNAME_TAG] = 097 new GrammarTransition<AdKdcIssuedContainer>( 098 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_AD_CHECKSUM_TAG_STATE, 099 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_SNAME_TAG_STATE, 100 KerberosConstants.AD_KDC_ISSUED_I_SNAME_TAG, 101 new StoreISName() ); 102 103 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_AD_CHECKSUM_TAG_STATE.ordinal()][KerberosConstants.AD_KDC_ISSUED_ELEMENTS_TAG] = 104 new GrammarTransition<AdKdcIssuedContainer>( 105 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_AD_CHECKSUM_TAG_STATE, 106 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_ELEMENTS_TAG_STATE, 107 KerberosConstants.AD_KDC_ISSUED_ELEMENTS_TAG, 108 new StoreElements() ); 109 110 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_TAG_STATE.ordinal()][UniversalTag.GENERAL_STRING 111 .getValue()] = 112 new GrammarTransition<AdKdcIssuedContainer>( 113 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_TAG_STATE, 114 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_STATE, 115 UniversalTag.GENERAL_STRING, 116 new StoreIRealm() ); 117 118 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_STATE.ordinal()][KerberosConstants.AD_KDC_ISSUED_I_SNAME_TAG] = 119 new GrammarTransition<AdKdcIssuedContainer>( 120 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_STATE, 121 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_SNAME_TAG_STATE, 122 KerberosConstants.AD_KDC_ISSUED_I_SNAME_TAG, 123 new StoreISName() ); 124 125 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_STATE.ordinal()][KerberosConstants.AD_KDC_ISSUED_ELEMENTS_TAG] = 126 new GrammarTransition<AdKdcIssuedContainer>( 127 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_REALM_STATE, 128 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_ELEMENTS_TAG_STATE, 129 KerberosConstants.AD_KDC_ISSUED_ELEMENTS_TAG, 130 new StoreElements() ); 131 132 super.transitions[AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_SNAME_TAG_STATE.ordinal()][KerberosConstants.AD_KDC_ISSUED_ELEMENTS_TAG] = 133 new GrammarTransition<AdKdcIssuedContainer>( 134 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_I_SNAME_TAG_STATE, 135 AdKDCIssuedStatesEnum.AD_KDC_ISSUED_ELEMENTS_TAG_STATE, 136 KerberosConstants.AD_KDC_ISSUED_ELEMENTS_TAG, 137 new StoreElements() ); 138 } 139 140 141 /** 142 * Get the instance of this grammar 143 * 144 * @return An instance on the AdKdcIssued Grammar 145 */ 146 public static Grammar<AdKdcIssuedContainer> getInstance() 147 { 148 return instance; 149 } 150}