private void moveToNextPart() { try { checkParserState(parser.next(), EntityState.T_END_BODYPART); EntityState state = parser.next(); if (state == EntityState.T_EPILOGUE) { while (parser.next() != EntityState.T_END_MULTIPART) { // Just loop } } else if (state != EntityState.T_START_BODYPART && state != EntityState.T_END_MULTIPART) { throw new IllegalStateException("Internal error: unexpected parser state " + state); } } catch (IOException ex) { throw new OMException(ex); } catch (MimeException ex) { throw new OMException(ex); } parser = null; }
private void ignoreInnerMessage() throws IOException, UnexpectedEOFException, MimeException { for (EntityState state = parser.next(); state != EntityState.T_END_MULTIPART; state = parser .next()) { switch (state) { case T_END_OF_STREAM: throw new UnexpectedEOFException(); case T_START_MULTIPART: ignoreInnerMessage(); break; case T_BODY: case T_END_BODYPART: case T_END_HEADER: case T_END_MESSAGE: case T_END_MULTIPART: case T_EPILOGUE: case T_FIELD: case T_PREAMBLE: case T_RAW_ENTITY: case T_START_BODYPART: case T_START_HEADER: case T_START_MESSAGE: break; } } }
private List readHeaders() throws IOException, MimeException { if(log.isDebugEnabled()){ log.debug("readHeaders"); } checkParserState(parser.next(), EntityState.T_START_HEADER); List headers = new ArrayList(); while (parser.next() == EntityState.T_FIELD) { Field field = parser.getField(); String name = field.getName(); String value = field.getBody(); if (log.isDebugEnabled()){ log.debug("addHeader: (" + name + ") value=(" + value +")"); } headers.add(new Header(name, value)); } checkParserState(parser.next(), EntityState.T_BODY); return headers; }
private void advancedToMessage() throws IOException, UnexpectedEOFException, MimeException { for (EntityState state = parser.getState(); state != EntityState.T_START_MESSAGE; state = parser .next()) { if (state == EntityState.T_END_OF_STREAM) { throw new UnexpectedEOFException(); } } }
private static MimeDescriptorImpl compositePartDescriptor( final MimeTokenStream parser, Collection<MessageResult.Header> headers) throws IOException, MimeException { MaximalBodyDescriptor descriptor = (MaximalBodyDescriptor) parser .getBodyDescriptor(); MimeDescriptorImpl mimeDescriptor = createDescriptor(0, 0, descriptor, null, headers); EntityState next = parser.next(); while (next != EntityState.T_END_MULTIPART && next != EntityState.T_END_OF_STREAM) { if (next == EntityState.T_START_BODYPART) { mimeDescriptor.addPart(createDescriptor(parser)); } next = parser.next(); } return mimeDescriptor; }
void releaseContent() throws IOException { switch (state) { case STATE_UNREAD: try { EntityState state; do { state = parser.next(); } while (state != EntityState.T_START_BODYPART && state != EntityState.T_END_MULTIPART); } catch (MimeException ex) { throw new OMException(ex); } state = STATE_DISCARDED; break; case STATE_BUFFERED: content.release(); } } }
public void run(byte[] content, int repetitions) throws Exception { MimeTokenStream stream = new MimeTokenStream(); for (int i = 0; i < repetitions; i++) { stream.parse(new ByteArrayInputStream(content)); for (EntityState state = stream.getState(); state != EntityState.T_END_OF_STREAM; state = stream .next()) { } } } }
if (parser.next() != EntityState.T_END_BODYPART) { throw new IllegalStateException(); parser.next(); if (parser.next() != EntityState.T_START_HEADER) { throw new IllegalStateException(); while (parser.next() == EntityState.T_FIELD) { fields.add(parser.getField()); if (parser.next() != EntityState.T_BODY) { throw new IllegalStateException();
private void skipToStartOfInner(int position) throws IOException, MimeException { final EntityState state = parser.next(); switch (state) { case T_START_MULTIPART: break; case T_START_MESSAGE: break; case T_END_OF_STREAM: throw new PartNotFoundException(position); case T_END_BODYPART: throw new PartNotFoundException(position); default: skipToStartOfInner(position); } }
next(); } catch (IOException e) {
private byte[] mimeBodyContent() throws IOException, MimeException { final byte[] content; if (empty) { content = EMPTY; } else { parser.setRecursionMode(RecursionMode.M_FLAT); boolean valid = true; for (EntityState state = parser.getState(); state != EntityState.T_BODY && state != EntityState.T_START_MULTIPART; state = parser .next()) { if (state == EntityState.T_END_OF_STREAM) { valid = false; break; } } if (valid) { content = IOUtils.toByteArray(parser.getInputStream()); } else { content = EMPTY; } } return content; }
public MimePart parse() throws IOException, MimeException { stream.parse(message.getFullContent()); for (EntityState state = stream.getState(); state != EntityState.T_END_OF_STREAM; state = stream.next()) { processMimePart(stream, state); } return result; }
private static MimeDescriptorImpl createDescriptor( final MimeTokenStream parser) throws IOException, MimeException { EntityState next = parser.next(); final Collection<MessageResult.Header> headers = new ArrayList<>(); while (next != EntityState.T_BODY && next != EntityState.T_END_OF_STREAM && next != EntityState.T_START_MULTIPART) { if (next == EntityState.T_FIELD) { headers.add(new ResultHeader(parser.getField().getName(), parser .getField().getBody().trim())); } next = parser.next(); } final MimeDescriptorImpl mimeDescriptorImpl; switch (next) { case T_BODY: mimeDescriptorImpl = simplePartDescriptor(parser, headers); break; case T_START_MULTIPART: mimeDescriptorImpl = compositePartDescriptor(parser, headers); break; case T_END_OF_STREAM: throw new MimeException("Premature end of stream"); default: throw new MimeException("Unexpected parse state"); } return mimeDescriptorImpl; }
for (EntityState state = parser.getState(); state != EntityState.T_BODY && state != EntityState.T_START_MULTIPART; state = parser .next()) { if (state == EntityState.T_END_OF_STREAM) { valid = false;
.next()) { switch (state) { case T_END_OF_STREAM:
results = new ArrayList<>(); for (EntityState state = parser.getState(); state != EntityState.T_END_HEADER; state = parser .next()) { switch (state) { case T_END_OF_STREAM:
final EntityState state = parser.next(); switch (state) { case T_BODY:
parser.next(); } catch (IOException ex) { throw new OMException(ex);
while (parser.next() != EntityState.T_END_OF_STREAM) { final EntityState state = parser.getState(); switch (state) {
throw new IllegalStateException("Invalid state: " + state); state = mimeTokenStream.next();