public static AlertMessage fromByteArray(final byte[] byteArray, final InetSocketAddress peerAddress) throws HandshakeException { DatagramReader reader = new DatagramReader(byteArray); byte levelCode = reader.readNextByte(); byte descCode = reader.readNextByte(); AlertLevel level = AlertLevel.getLevelByCode(levelCode); AlertDescription description = AlertDescription.getDescriptionByCode(descCode); if (level == null) { throw new HandshakeException( String.format("Unknown alert level code [%d]", levelCode), new AlertMessage(AlertLevel.FATAL, AlertDescription.DECODE_ERROR, peerAddress)); } else if (description == null) { throw new HandshakeException( String.format("Unknown alert description code [%d]", descCode), new AlertMessage(AlertLevel.FATAL, AlertDescription.DECODE_ERROR, peerAddress)); } else { return new AlertMessage(level, description, peerAddress); } }
private static ServerNameExtension readServerNameList( final DatagramReader reader, final InetSocketAddress peerAddress) throws HandshakeException { ServerNames serverNames = ServerNames.newInstance(); int listLengthBytes = reader.read(LIST_LENGTH_BITS); while (listLengthBytes > 0) { if (reader.bitsLeft() >= 8) { NameType nameType = NameType.fromCode(reader.readNextByte()); switch (nameType) { case HOST_NAME: byte[] hostname = readHostName(reader, peerAddress); serverNames.add(ServerName.from(nameType, hostname)); listLengthBytes -= (hostname.length + 3); break; default: throw new HandshakeException( "Server Name Indication extension contains unknown name_type", new AlertMessage(AlertLevel.FATAL, AlertDescription.ILLEGAL_PARAMETER, peerAddress)); } } else { throw newDecodeError(peerAddress); } } return new ServerNameExtension(serverNames); }
nextByte = reader.readNextByte(); if (nextByte != PAYLOAD_MARKER) {