goToState(State.ERROR); throw new IllegalArgumentException("Data cannot be null"); goToState(State.ERROR); throw new IllegalArgumentException("End index cannot be lower that the start index. End index: " + indexEnd + ", Start index: " + indexStart); goToState(State.ERROR); throw new IllegalArgumentException("The start index cannot be greater than the size of the data. Start index: " + indexStart + ", Data length: " + data.length); goToState(State.ERROR); throw new IllegalArgumentException("The end index cannot be greater than the size of the data. End index: " + indexEnd + ", Data length: " + data.length); skipPreamble(wCtx); break; identifyPreambleDelimiter(wCtx); break; getReadyForHeaders(wCtx); break; readHeaders(wCtx); break; getReadyForBody(wCtx); break; readBody(wCtx); break;
@Override public void write(final int data) throws IOException { write(new byte[]{(byte) data}, 0, 1); }
@Override public void close() throws IOException { parser.close(); } }
void getReadyForNestedMultipart(final WriteContext wCtx) { if (delimiterPrefixes.size() > maxLevelOfNestedMultipart + 1) { goToState(State.ERROR); nioMultipartParserListener.onError("Reached maximum number of nested multiparts: " + maxLevelOfNestedMultipart, null); } else { byte[] delimiter = getDelimiterPrefix(MultipartUtils.getHeader(MultipartUtils.CONTENT_TYPE, headers)); delimiterType.reset(); delimiterPrefixes.push(delimiter); endOfLineBuffer.recycle(getPreambleDelimiterPrefix(delimiter), null); goToState(State.SKIP_PREAMBLE); nioMultipartParserListener.onNestedPartStarted(headers); } wCtx.setFinishedIfNoMoreData(); }
void nestedPartRead(final WriteContext wCtx){ delimiterPrefixes.pop(); delimiterType.reset(); endOfLineBuffer.recycle(getPreambleDelimiterPrefix(delimiterPrefixes.peek()), null); goToState(State.SKIP_PREAMBLE); nioMultipartParserListener.onNestedPartFinished(); wCtx.setFinishedIfNoMoreData(); }
final byte[] delimiterPrefix = getDelimiterPrefix(multipartContext.getContentType()); final int actualBufferSize = delimiterPrefix.length + bufferSize; this.delimiterPrefixes.push(delimiterPrefix); this.endOfLineBuffer = new EndOfLineBuffer(actualBufferSize, getPreambleDelimiterPrefix(delimiterPrefixes.peek()), null);
this.parser = new NioMultipartParser(multipartContext, listener, partBodyStreamStorageFactory, bufferSize, maxHeadersSectionSize, maxLevelOfNestedMultipart);
goToState(State.ERROR); throw new IllegalArgumentException("Data cannot be null"); goToState(State.ERROR); throw new IllegalArgumentException("End index cannot be lower that the start index. End index: " + indexEnd + ", Start index: " + indexStart); goToState(State.ERROR); throw new IllegalArgumentException("The start index cannot be greater than the size of the data. Start index: " + indexStart + ", Data length: " + data.length); goToState(State.ERROR); throw new IllegalArgumentException("The end index cannot be greater than the size of the data. End index: " + indexEnd + ", Data length: " + data.length); skipPreamble(wCtx); break; identifyPreambleDelimiter(wCtx); break; getReadyForHeaders(wCtx); break; readHeaders(wCtx); break; getReadyForBody(wCtx); break; readBody(wCtx); break;
@Override public void write(final int data) throws IOException { write(new byte[]{(byte) data}, 0, 1); }
@Override public void close() throws IOException { parser.close(); } }
void getReadyForNestedMultipart(final WriteContext wCtx) { if (delimiterPrefixes.size() > maxLevelOfNestedMultipart + 1) { goToState(State.ERROR); nioMultipartParserListener.onError("Reached maximum number of nested multiparts: " + maxLevelOfNestedMultipart, null); } else { byte[] delimiter = getDelimiterPrefix(MultipartUtils.getHeader(MultipartUtils.CONTENT_TYPE, headers)); delimiterType.reset(); delimiterPrefixes.push(delimiter); endOfLineBuffer.recycle(getPreambleDelimiterPrefix(delimiter), null); goToState(State.SKIP_PREAMBLE); nioMultipartParserListener.onNestedPartStarted(headers); } wCtx.setFinishedIfNoMoreData(); }
void nestedPartRead(final WriteContext wCtx){ delimiterPrefixes.pop(); delimiterType.reset(); endOfLineBuffer.recycle(getPreambleDelimiterPrefix(delimiterPrefixes.peek()), null); goToState(State.SKIP_PREAMBLE); nioMultipartParserListener.onNestedPartFinished(); wCtx.setFinishedIfNoMoreData(); }
final byte[] delimiterPrefix = getDelimiterPrefix(multipartContext.getContentType()); final int actualBufferSize = delimiterPrefix.length + bufferSize; this.delimiterPrefixes.push(delimiterPrefix); this.endOfLineBuffer = new EndOfLineBuffer(actualBufferSize, getPreambleDelimiterPrefix(delimiterPrefixes.peek()), null);
this.parser = new NioMultipartParser(multipartContext, listener, partBodyStreamStorageFactory, bufferSize, maxHeadersSectionSize, maxLevelOfNestedMultipart);
@Override public void write(byte[] data) throws IOException { write(data, 0, data.length); }
@Override public boolean dispose() { try { close(); } catch(IOException e) { // Do nothing } if (partBodyStreamStorage != null) { return partBodyStreamStorage.dispose(); } return true; }
/** * <p> Builds a {@code NioMultipartParser}. Use this to process the multipart stream in a non blocking fashion. * * @param listener The {@code NioMultipartParserListener} listener * @return The {@code NioMultipartParser} */ public NioMultipartParser forNIO(final NioMultipartParserListener listener){ return new NioMultipartParser(context, listener, partStreamsFactory(), bufferSize, headersSizeLimit, nestedMultipartsAllowed); }