Class AbstractContainer
- java.lang.Object
-
- org.apache.directory.api.asn1.ber.AbstractContainer
-
- All Implemented Interfaces:
Asn1Container
public abstract class AbstractContainer extends Object implements Asn1Container
This class is the abstract container used to store the current state of a PDU being decoded. It also stores the grammars used to decode the PDU, and all the informations needed to decode a PDU.- Author:
- Apache Directory Project
-
-
Field Summary
Fields Modifier and Type Field Description private intdecodedBytesA counter for the decoded bytesprivate booleangatheringA flag telling if the Value should be accumulated before being decoded for constructed typesprivate Grammar<? extends Asn1Container>grammarAll the possible grammarsprivate booleangrammarEndAllowedThe grammar end transition flagprivate intidThe incremental id used to tag TLVsprivate intmaxPDUSizeThe maximum allowed size for a PDU.private TLVparentTLVThe parent TLVprivate TLVStateEnumstateThe current state of the decodingprivate ByteBufferstreamThe Stream being decodedprivate TLVtlvThe current TLVprivate Enum<?>transitionThe current transition
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractContainer()Creates a new instance of AbstractContainer with a starting state.protectedAbstractContainer(ByteBuffer stream)Creates a new instance of AbstractContainer with a starting state.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclean()Clean the container for the next usage.TLVgetCurrentTLV()Gets the currentTLVintgetDecodedBytes()Grammar<? extends Asn1Container>getGrammar()Gets the grammarintgetMaxPDUSize()intgetNewTlvId()Gets a new TLV idTLVgetParentTLV()TLVStateEnumgetState()Gets the current grammar stateByteBuffergetStream()Gets the current stream containing the bytes to decodeintgetTlvId()Gets the current TLV idEnum<?>getTransition()Gets the transitionvoidincrementDecodedBytes(int nb)Increment the decodedBytes by the latest received buffer's size.booleanisGathering()booleanisGrammarEndAllowed()Checks that we can have a end state after this transitionvoidrewind()Move backward in the stream to the first byte for a given TLV.voidsetCurrentTLV(TLV currentTLV)Sets the current TLVvoidsetDecodedBytes(int decodedBytes)voidsetGathering(boolean gathering)Set the isGathering flagvoidsetGrammar(Grammar<? extends Asn1Container> grammar)Sets the grammarvoidsetGrammarEndAllowed(boolean grammarEndAllowed)Sets the flag to allow a end transitionvoidsetMaxPDUSize(int maxPDUSize)Set the maximum PDU size.voidsetParentTLV(TLV parentTLV)Sets the parent TLVvoidsetState(TLVStateEnum state)Sets the new current statevoidsetStream(ByteBuffer stream)Stores the Stream being decodedvoidsetTransition(Enum<?> transition)Updates the transition from a state to anothervoidupdateParent()Update the parent's length
-
-
-
Field Detail
-
grammar
private Grammar<? extends Asn1Container> grammar
All the possible grammars
-
state
private TLVStateEnum state
The current state of the decoding
-
transition
private Enum<?> transition
The current transition
-
tlv
private TLV tlv
The current TLV
-
parentTLV
private TLV parentTLV
The parent TLV
-
grammarEndAllowed
private boolean grammarEndAllowed
The grammar end transition flag
-
decodedBytes
private int decodedBytes
A counter for the decoded bytes
-
maxPDUSize
private int maxPDUSize
The maximum allowed size for a PDU. Default to MAX int value
-
id
private int id
The incremental id used to tag TLVs
-
stream
private ByteBuffer stream
The Stream being decoded
-
gathering
private boolean gathering
A flag telling if the Value should be accumulated before being decoded for constructed types
-
-
Constructor Detail
-
AbstractContainer
protected AbstractContainer()
Creates a new instance of AbstractContainer with a starting state.
-
AbstractContainer
protected AbstractContainer(ByteBuffer stream)
Creates a new instance of AbstractContainer with a starting state.- Parameters:
stream- the buffer containing the data to decode
-
-
Method Detail
-
getGrammar
public Grammar<? extends Asn1Container> getGrammar()
Gets the grammar- Specified by:
getGrammarin interfaceAsn1Container- Returns:
- Returns the grammar used to decode a LdapMessage.
-
setGrammar
public void setGrammar(Grammar<? extends Asn1Container> grammar)
Sets the grammar- Specified by:
setGrammarin interfaceAsn1Container- Parameters:
grammar- The grammar to set
-
getState
public TLVStateEnum getState()
Gets the current grammar state- Specified by:
getStatein interfaceAsn1Container- Returns:
- Returns the current grammar state
-
setState
public void setState(TLVStateEnum state)
Sets the new current state- Specified by:
setStatein interfaceAsn1Container- Parameters:
state- The new state
-
isGrammarEndAllowed
public boolean isGrammarEndAllowed()
Checks that we can have a end state after this transition- Specified by:
isGrammarEndAllowedin interfaceAsn1Container- Returns:
- true if this can be the last transition
-
setGrammarEndAllowed
public void setGrammarEndAllowed(boolean grammarEndAllowed)
Sets the flag to allow a end transition- Specified by:
setGrammarEndAllowedin interfaceAsn1Container- Parameters:
grammarEndAllowed- true or false, depending on the next transition being an end or not.
-
getTransition
public Enum<?> getTransition()
Gets the transition- Specified by:
getTransitionin interfaceAsn1Container- Returns:
- Returns the transition from the previous state to the new state
-
setTransition
public void setTransition(Enum<?> transition)
Updates the transition from a state to another- Specified by:
setTransitionin interfaceAsn1Container- Parameters:
transition- The transition to set
-
setCurrentTLV
public void setCurrentTLV(TLV currentTLV)
Sets the current TLV- Specified by:
setCurrentTLVin interfaceAsn1Container- Parameters:
currentTLV- The current TLV
-
getCurrentTLV
public TLV getCurrentTLV()
Gets the currentTLV- Specified by:
getCurrentTLVin interfaceAsn1Container- Returns:
- Returns the current TLV being decoded
-
getParentTLV
public TLV getParentTLV()
- Specified by:
getParentTLVin interfaceAsn1Container- Returns:
- The parent TLV.
-
setParentTLV
public void setParentTLV(TLV parentTLV)
Sets the parent TLV- Specified by:
setParentTLVin interfaceAsn1Container- Parameters:
parentTLV- The new parent TLV
-
clean
public void clean()
Clean the container for the next usage.
-
getNewTlvId
public int getNewTlvId()
Gets a new TLV id- Specified by:
getNewTlvIdin interfaceAsn1Container- Returns:
- a unique value representing the current TLV id
-
getTlvId
public int getTlvId()
Gets the current TLV id- Specified by:
getTlvIdin interfaceAsn1Container- Returns:
- a unique value representing the current TLV id
-
getDecodedBytes
public int getDecodedBytes()
- Specified by:
getDecodedBytesin interfaceAsn1Container- Returns:
- The number of decoded bytes for this message. This is used to control the PDU size and avoid PDU exceeding the maximum allowed size to break the server.
-
setDecodedBytes
public void setDecodedBytes(int decodedBytes)
- Specified by:
setDecodedBytesin interfaceAsn1Container- Parameters:
decodedBytes- The number of decoded bytes for this message.
-
incrementDecodedBytes
public void incrementDecodedBytes(int nb)
Increment the decodedBytes by the latest received buffer's size.- Specified by:
incrementDecodedBytesin interfaceAsn1Container- Parameters:
nb- The buffer size.
-
getMaxPDUSize
public int getMaxPDUSize()
- Specified by:
getMaxPDUSizein interfaceAsn1Container- Returns:
- The maximum PDU size.
-
setMaxPDUSize
public void setMaxPDUSize(int maxPDUSize)
Set the maximum PDU size.- Specified by:
setMaxPDUSizein interfaceAsn1Container- Parameters:
maxPDUSize- The maximum PDU size (if negative or null, will be replaced by the max integer value)
-
getStream
public ByteBuffer getStream()
Gets the current stream containing the bytes to decode- Specified by:
getStreamin interfaceAsn1Container- Returns:
- The current stream
-
setStream
public void setStream(ByteBuffer stream)
Stores the Stream being decoded- Specified by:
setStreamin interfaceAsn1Container- Parameters:
stream- The stream being decoded
-
rewind
public void rewind()
Move backward in the stream to the first byte for a given TLV. This is useful when we have read some Tag and Length in order to define the next transition, and if this transition do a grammar switch.- Specified by:
rewindin interfaceAsn1Container
-
updateParent
public void updateParent()
Update the parent's length- Specified by:
updateParentin interfaceAsn1Container
-
isGathering
public boolean isGathering()
- Specified by:
isGatheringin interfaceAsn1Container- Returns:
- true if the container should gather the value into itself, false if the decoding of the Value part should be done immediately for constructed types.
-
setGathering
public void setGathering(boolean gathering)
Set the isGathering flag- Specified by:
setGatheringin interfaceAsn1Container- Parameters:
gathering- true to ask the Asn1Decoder to gather the data into the container. If not set, the default value is 'false'
-
-