| | |
| | | import java.io.InputStream; |
| | | import java.util.LinkedList; |
| | | |
| | | import org.opends.messages.Message; |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.opends.server.loggers.debug.DebugTracer; |
| | | import org.forgerock.opendj.ldap.ByteString; |
| | | import org.forgerock.opendj.ldap.ByteStringBuilder; |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | { |
| | | if(throwEofException) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_TRUCATED_TYPE_BYTE.get(); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | { |
| | | if(throwEofException) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_TRUNCATED_LENGTH_BYTE.get(); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | lengthBytesNeeded = peekLength; |
| | | if (lengthBytesNeeded > 4) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(lengthBytesNeeded); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | state = ELEMENT_READ_STATE_NEED_ADDITIONAL_LENGTH_BYTES; |
| | | if(throwEofException) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_TRUNCATED_LENGTH_BYTES.get(lengthBytesNeeded); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | // message size. |
| | | if ((maxElementSize > 0) && (peekLength > maxElementSize)) |
| | | { |
| | | Message m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get( |
| | | LocalizableMessage m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get( |
| | | peekLength, maxElementSize); |
| | | throw new ASN1Exception(m); |
| | | } |
| | |
| | | state = ELEMENT_READ_STATE_NEED_ADDITIONAL_LENGTH_BYTES; |
| | | if(throwEofException) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_TRUNCATED_LENGTH_BYTES.get(lengthBytesNeeded); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | // message size. |
| | | if ((maxElementSize > 0) && (peekLength > maxElementSize)) |
| | | { |
| | | Message m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get( |
| | | LocalizableMessage m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get( |
| | | peekLength, maxElementSize); |
| | | throw new ASN1Exception(m); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | |
| | | if (peekLength != 1) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_BOOLEAN_INVALID_LENGTH.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | int readByte = in.read(); |
| | | if(readByte == -1) |
| | | { |
| | | Message message = ERR_ASN1_BOOLEAN_TRUNCATED_VALUE.get(peekLength); |
| | | LocalizableMessage message = ERR_ASN1_BOOLEAN_TRUNCATED_VALUE.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | |
| | | if ((peekLength < 1) || (peekLength > 4)) |
| | | { |
| | | Message message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength); |
| | | LocalizableMessage message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | |
| | | |
| | | if ((peekLength < 1) || (peekLength > 8)) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | int readByte = in.read(); |
| | | if(readByte == -1) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_INTEGER_TRUNCATED_VALUE.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | int readByte = in.read(); |
| | | if(readByte == -1) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_INTEGER_TRUNCATED_VALUE.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | // Make sure that the decoded length is exactly zero byte. |
| | | if (peekLength != 0) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_NULL_INVALID_LENGTH.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | bytesRead = in.read(value, peekLength - bytesNeeded, bytesNeeded); |
| | | if(bytesRead < 0) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | bytesRead = in.read(buffer, peekLength - bytesNeeded, bytesNeeded); |
| | | if(bytesRead < 0) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | bytesRead = buffer.append(in, bytesNeeded); |
| | | if(bytesRead < 0) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | { |
| | | if(streamStack.isEmpty()) |
| | | { |
| | | Message message = ERR_ASN1_SEQUENCE_READ_NOT_STARTED.get(); |
| | | LocalizableMessage message = ERR_ASN1_SEQUENCE_READ_NOT_STARTED.get(); |
| | | throw new ASN1Exception(message); |
| | | } |
| | | |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |
| | |
| | | long bytesSkipped = in.skip(peekLength); |
| | | if(bytesSkipped != peekLength) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_SKIP_TRUNCATED_VALUE.get(peekLength); |
| | | throw new ASN1Exception(message); |
| | | } |
| | |
| | | } |
| | | catch(IOException ioe) |
| | | { |
| | | Message message = |
| | | LocalizableMessage message = |
| | | ERR_ASN1_READ_ERROR.get(ioe.toString()); |
| | | throw new ASN1Exception(message, ioe); |
| | | } |