in core/src/main/java/org/apache/james/mime4j/parser/MimeStreamParser.java [110:179]
public void parse(InputStream instream) throws MimeException, IOException {
MimeConfig config = mimeTokenStream.getConfig();
if (config.getHeadlessParsing() != null) {
Field contentType = mimeTokenStream.parseHeadless(
instream, config.getHeadlessParsing());
handler.startMessage();
handler.startHeader();
handler.field(contentType);
handler.endHeader();
} else {
mimeTokenStream.parse(instream);
}
OUTER: for (;;) {
EntityState state = mimeTokenStream.getState();
switch (state) {
case T_BODY:
BodyDescriptor desc = mimeTokenStream.getBodyDescriptor();
InputStream bodyContent;
if (contentDecoding) {
bodyContent = mimeTokenStream.getDecodedInputStream();
} else {
bodyContent = mimeTokenStream.getInputStream();
}
handler.body(desc, bodyContent);
bodyContent.close();
break;
case T_END_BODYPART:
handler.endBodyPart();
break;
case T_END_HEADER:
handler.endHeader();
break;
case T_END_MESSAGE:
handler.endMessage();
break;
case T_END_MULTIPART:
handler.endMultipart();
break;
case T_END_OF_STREAM:
break OUTER;
case T_EPILOGUE:
handler.epilogue(mimeTokenStream.getInputStream());
break;
case T_FIELD:
handler.field(mimeTokenStream.getField());
break;
case T_PREAMBLE:
handler.preamble(mimeTokenStream.getInputStream());
break;
case T_RAW_ENTITY:
handler.raw(mimeTokenStream.getInputStream());
break;
case T_START_BODYPART:
handler.startBodyPart();
break;
case T_START_HEADER:
handler.startHeader();
break;
case T_START_MESSAGE:
handler.startMessage();
break;
case T_START_MULTIPART:
handler.startMultipart(mimeTokenStream.getBodyDescriptor());
break;
default:
throw new IllegalStateException("Invalid state: " + state);
}
state = mimeTokenStream.next();
}
}