You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2005/04/28 01:05:56 UTC
svn commit: r165064 -
/directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java
Author: elecharny
Date: Wed Apr 27 16:05:56 2005
New Revision: 165064
URL: http://svn.apache.org/viewcvs?rev=165064&view=rev
Log:
The first working spnego decoder... This will just allow the junit test to pass, but all actions are empty.
Modified:
directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java
Modified: directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java
URL: http://svn.apache.org/viewcvs/directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java?rev=165064&r1=165063&r2=165064&view=diff
==============================================================================
--- directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java (original)
+++ directory/sandbox/trunk/asn1-new-codec/src/java/org/apache/asn1/spnego/codec/grammars/SpnegoGrammar.java Wed Apr 27 16:05:56 2005
@@ -52,156 +52,292 @@
/** The instance of grammar. LdapMessageGrammar is a singleton */
private static IGrammar instance = new SpnegoGrammar();
- /**
- * Get the instance of this grammar
- *
- * @return An instance on the LdapMessage Grammar
- */
- public static IGrammar getInstance()
- {
- return instance;
- }
-
//~ Constructors -------------------------------------------------------------------------------
+
/**
* Creates a new LdapMessageGrammar object.
*/
private SpnegoGrammar()
{
- name = SpnegoGrammar.class.getName();
+ name = SpnegoGrammar.class.getName();
statesEnum = SpnegoStatesEnum.getInstance();
- // We have
+ // We have
super.transitions = new GrammarTransition[SpnegoStatesEnum.LAST_SPNEGO_STATE][256];
//============================================================================================
- // SPNEGO
+ // SPNEGO
//============================================================================================
// SPNEGO --> CHOICE {
// negTokenInit [0] NegTokenInit, (Tag)
// We have a negTokenInit, and the tag must be 0xA0
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_TAG][0xA0] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_TAG,
- SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_LENGTH, new GrammarAction( "Spnego neg token init tag" )
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_TAG][0xA0] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_TAG,
+ SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_LENGTH,
+ new GrammarAction( "Spnego neg token init tag" )
{
public void action( IAsn1Container container ) throws DecoderException
{
- try {
- SpnegoContainer spnegoContainer = (SpnegoContainer)container;
-
- // First, create a empty Spnego POJO
- SpnegoPOJO spnegoPOJO = ( SpnegoNegTokenInitPOJO) spnegoContainer.getPoolManager().allocate(SpnegoPoolEnum.SPNEGO_NEG_TOKEN_INIT_POJO_POOL);
-
- // Then stores it into the container
- spnegoContainer.setSpnego(spnegoPOJO);
-
- return;
- }
- catch ( PoolException pe )
- {
- throw new DecoderException(
- "Cannot allocate a spnego Pojo : " + pe.getMessage() );
- }
+
+ try
+ {
+
+ SpnegoContainer spnegoContainer = ( SpnegoContainer ) container;
+
+ // First, create a empty Spnego POJO
+ SpnegoPOJO spnegoPOJO = ( SpnegoNegTokenInitPOJO )
+ spnegoContainer.getPoolManager().allocate(
+ SpnegoPoolEnum.SPNEGO_NEG_TOKEN_INIT_POJO_POOL );
+
+ // Then stores it into the container
+ spnegoContainer.setSpnego( spnegoPOJO );
+
+ return;
+ }
+ catch ( PoolException pe )
+ {
+ throw new DecoderException(
+ "Cannot allocate a spnego Pojo : " + pe.getMessage() );
+ }
}
} );
- // SPNEGO --> CHOICE { ...
+ // SPNEGO --> CHOICE { ...
// negTokenInit [0] NegTokenInit, (Length)
// We have a negTokenInit, and the tag must be 0xA0
// Ok, get the negTokenInit length
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_LENGTH][0xA0] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_LENGTH,
- SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_VALUE, new GrammarAction( "Spnego neg token init Length" )
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_LENGTH][0xA0] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_LENGTH,
+ SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_VALUE,
+ new GrammarAction( "Spnego neg token init Length" )
{
public void action( IAsn1Container container ) throws DecoderException
{
- // We have to store the expected Length of the PDU
- SpnegoContainer spnegoContainer = (SpnegoContainer)container;
- SpnegoPOJO spnego = spnegoContainer.getSpnego();
- spnego.setExpectedLength(spnegoContainer.getCurrentTLV().getLength().getLength());
- spnego.setCurrentLength(0);
+ // We have to store the expected Length of the PDU
+ SpnegoContainer spnegoContainer = ( SpnegoContainer ) container;
+ SpnegoPOJO spnego = spnegoContainer.getSpnego();
+
+ spnego.setExpectedLength( spnegoContainer.getCurrentTLV().getLength()
+ .getLength() );
+ spnego.setCurrentLength( 0 );
- return;
+ return;
}
} );
-
- // SPNEGO --> CHOICE { ...
+
+ // SPNEGO --> CHOICE { ...
// negTokenInit [0] NegTokenInit, (Value)
// We will have a SEQUENCE. There is no value, so this is just a phantom transition.
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_VALUE][0xA0] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_VALUE, SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_TAG, null);
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_VALUE][0xA0] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_VALUE,
+ SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_TAG, null );
// NegTokenInit ::= SEQUENCE { (Tag)
// Nothing to do, but setting the parent link.
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_TAG][0x30] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_TAG, SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_LENGTH, null);
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_TAG][0x30] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_TAG,
+ SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_LENGTH, null );
// NegTokenInit ::= SEQUENCE { (Length)
// We have to check the length
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_LENGTH][0x30] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_LENGTH,
- SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE, new GrammarAction( "Spnego neg token init sequence Length" )
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_LENGTH][0x30] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_LENGTH,
+ SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE,
+ new GrammarAction( "Spnego neg token init sequence Length" )
{
public void action( IAsn1Container container ) throws DecoderException
{
- // We have to store the expected Length of the PDU
- SpnegoContainer spnegoContainer = (SpnegoContainer)container;
- SpnegoPOJO spnego = spnegoContainer.getSpnego();
- checkLength(spnego, spnegoContainer.getCurrentTLV());
- return;
+
+ // We have to store the expected Length of the PDU
+ SpnegoContainer spnegoContainer = ( SpnegoContainer ) container;
+ SpnegoPOJO spnego = spnegoContainer.getSpnego();
+ checkLength( spnego, spnegoContainer.getCurrentTLV() );
+ return;
}
} );
-
+
// NegTokenInit ::= SEQUENCE { (Value)
// mechTypes [0] MechTypeList OPTIONAL,
// reqFlags [1] ContextFlags OPTIONAL,
// mechToken [2] OCTET STRING OPTIONAL,
- // mechListMIC [3] OCTET STRING OPTIONAL } (Length)
- // The next token will be either 0xA0, 0xA1, 0xA2 or 0xA3, depending on the
+ // mechListMIC [3] OCTET STRING OPTIONAL }
+ // The next token will be either 0xA0, 0xA1, 0xA2, 0xA3 or the grammar end, depending on the
// element : mechType, reqFlages, mechToken or mechListMIC.
// This transition does nothing.
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE][0x30] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE, SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG, null);
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE][0x30] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE,
+ SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG, null );
+
+ // NegTokenInit ::= SEQUENCE {
+ // mechTypes [0] MechTypeList OPTIONAL, (Tag)
+ // ...
+ // We have a 0xA0 tag, so this is a mechTypes. We have to check the length
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG][0xA0] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG,
+ SpnegoStatesEnum.SPNEGO_MECH_TYPES_LENGTH, null );
// NegTokenInit ::= SEQUENCE {
// mechTypes [0] MechTypeList OPTIONAL, (Length)
// ...
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG][0xA0] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG, SpnegoStatesEnum.SPNEGO_MECH_TYPES_LENGTH, null);
+ // MechTypeList ::= SEQUENCE OF MechType
+ // The value part. As it is a SEQUENCE, we have to allocate a list
+ // in the Spnego object
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LENGTH][0xA0] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LENGTH,
+ SpnegoStatesEnum.SPNEGO_MECH_TYPES_VALUE, null );
// NegTokenInit ::= SEQUENCE {
// mechTypes [0] MechTypeList OPTIONAL, (Value)
// ...
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LENGTH][0xA0] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LENGTH, SpnegoStatesEnum.SPNEGO_MECH_TYPES_VALUE, null);
+ // We have nothing to do.
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_VALUE][0xA0] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TYPES_VALUE,
+ SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_TAG, null );
+
+ // MechTypeList ::= SEQUENCE OF MechType (Tag)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_TAG][0x30] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_TAG,
+ SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_LENGTH, null );
+
+ // MechTypeList ::= SEQUENCE OF MechType (Length)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_LENGTH][0x30] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_LENGTH,
+ SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_VALUE, null );
+
+ // MechTypeList ::= SEQUENCE OF MechType (Value)
+ // As it is a SEQUENCE, we have to allocate a list
+ // in the Spnego object
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_VALUE][0x30] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_VALUE,
+ SpnegoStatesEnum.SPNEGO_MECH_TYPE_TAG, null );
+
+ // MechType ::= OBJECT IDENTIFIER (Tag)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_TAG][0x06] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TYPE_TAG, SpnegoStatesEnum.SPNEGO_MECH_TYPE_LENGTH,
+ null );
+
+ // MechType ::= OBJECT IDENTIFIER (Length)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_LENGTH][0x06] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TYPE_LENGTH, SpnegoStatesEnum.SPNEGO_MECH_TYPE_VALUE,
+ null );
+
+ // MechType ::= OBJECT IDENTIFIER (Value)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_VALUE][0x06] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TYPE_VALUE,
+ SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOWING_TAG, null );
+
+ // MechType ::= OBJECT IDENTIFIER (Tag)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOWING_TAG][0x06] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOWING_TAG, SpnegoStatesEnum.SPNEGO_MECH_TYPE_LENGTH,
+ null );
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_VALUE][0xA0] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_VALUE, SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_TAG, null);
+ // NegTokenInit ::= SEQUENCE {
+ // ...
+ // reqFlags [1] ContextFlags OPTIONAL, (Tag)
+ // ...
+ // Here, we have to switch to the Length transition of a reqFlags state
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOWING_TAG][0xA1] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOWING_TAG,
+ SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH, null );
+
+ // NegTokenInit ::= SEQUENCE {
+ // ...
+ // reqFlags [1] ContextFlags OPTIONAL, (Tag)
+ // ...
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG][0xA1] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG,
+ SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH, null );
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_TAG][0x30] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_TAG, SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_LENGTH, null);
-
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_LENGTH][0x30] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_LENGTH, SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_VALUE, null);
-
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_VALUE][0x30] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPES_LIST_VALUE, SpnegoStatesEnum.SPNEGO_MECH_TYPE_TAG, null);
-
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_TAG][0x06] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPE_TAG, SpnegoStatesEnum.SPNEGO_MECH_TYPE_TAG, null);
-
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_LENGTH][0x06] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPE_LENGTH, SpnegoStatesEnum.SPNEGO_MECH_TYPE_VALUE, null);
-
- super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_VALUE][0x06] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPE_VALUE, SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOW_TAG, null);
-
-
-
-
// NegTokenInit ::= SEQUENCE {
// ...
// reqFlags [1] ContextFlags OPTIONAL, (Length)
// ...
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG][0xA1] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG, SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH, null);
+ super.transitions[SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH][0x03] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_REQ_FLAGS_LENGTH, SpnegoStatesEnum.SPNEGO_REQ_FLAGS_VALUE,
+ null );
// NegTokenInit ::= SEQUENCE {
// ...
- // mechToken [2] OCTET STRING OPTIONAL, (Length)
+ // reqFlags [1] ContextFlags OPTIONAL, (Value)
// ...
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG][0xA2] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG, SpnegoStatesEnum.SPNEGO_MECH_TOKEN_LENGTH, null);
+ // The next state will be the MechToken following
+ super.transitions[SpnegoStatesEnum.SPNEGO_REQ_FLAGS_VALUE][0x03] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_REQ_FLAGS_VALUE, SpnegoStatesEnum.SPNEGO_REQ_FLAGS_FOLLOWING_TAG,
+ null );
+
+ // NegTokenInit ::= SEQUENCE { (Length)
+ // ...
+ // mechToken [2] OCTET STRING OPTIONAL,
+ // ...
+ super.transitions[SpnegoStatesEnum.SPNEGO_REQ_FLAGS_FOLLOWING_TAG][0xA2] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_REQ_FLAGS_FOLLOWING_TAG,
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_LENGTH, null );
+
+ // NegTokenInit ::= SEQUENCE {
+ // ...
+ // mechToken [2] OCTET STRING OPTIONAL,
+ // ...
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOWING_TAG][0xA2] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TYPE_FOLLOWING_TAG,
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_LENGTH, null );
+
+ // NegTokenInit ::= SEQUENCE { (Length)
+ // ...
+ // mechToken [2] OCTET STRING OPTIONAL,
+ // ...
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG][0xA2] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG,
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_LENGTH, null );
+
+ // NegTokenInit ::= SEQUENCE { (Value)
+ // ...
+ // mechToken [2] OCTET STRING OPTIONAL,
+ // ...
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TOKEN_LENGTH][0xA2] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_MECH_TOKEN_LENGTH,
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_VALUE, null );
+
+ // mechToken [2] OCTET STRING OPTIONAL, (Tag)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TOKEN_VALUE][0xA2] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_VALUE, SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_TAG,
+ null );
+
+ // mechToken [2] OCTET STRING OPTIONAL, (Tag)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_TAG][0x04] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_TAG, SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_LENGTH,
+ null );
+
+ // mechToken [2] OCTET STRING OPTIONAL, (Length)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_LENGTH][0x04] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_LENGTH, SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_VALUE,
+ null );
+
+ // mechToken [2] OCTET STRING OPTIONAL, (Value)
+ super.transitions[SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_VALUE][0x04] = new GrammarTransition(
+ SpnegoStatesEnum.SPNEGO_MECH_TOKEN_OCTET_STRING_VALUE,
+ -1, null );
+
// NegTokenInit ::= SEQUENCE {
// ...
// mechListMIC [3] OCTET STRING OPTIONAL } (Length)
- super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG][0xA3] = new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_VALUE_TAG, SpnegoStatesEnum.SPNEGO_MECH_LIST_MIC_LENGTH, null);
+ super.transitions[SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG][0xA3] =
+ new GrammarTransition( SpnegoStatesEnum.SPNEGO_NEG_TOKEN_INIT_SEQUENCE_FOLLOWING_TAG,
+ SpnegoStatesEnum.SPNEGO_MECH_LIST_MIC_LENGTH, null );
+ }
+
+ //~ Methods ------------------------------------------------------------------------------------
+
+ /**
+ * Get the instance of this grammar
+ *
+ * @return An instance on the LdapMessage Grammar
+ */
+ public static IGrammar getInstance()
+ {
+ return instance;
}
}