/* * Copyright 2017 LINE Corporation * * LINE Corporation licenses this file to you under the Apache License, * version 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package com.linecorp.armeria.server.http.tomcat; import java.io.IOException; import java.nio.ByteBuffer; import org.apache.coyote.InputBuffer; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.net.ApplicationBufferHandler; import com.linecorp.armeria.common.http.HttpData; class Tomcat85InputBuffer implements InputBuffer { private final HttpData content; private boolean read; Tomcat85InputBuffer(HttpData content) { this.content = content; } @Override public int doRead(ByteChunk chunk) { if (!isNeedToRead()) { // Read only once. return -1; } read = true; final int readableBytes = content.length(); chunk.setBytes(content.array(), content.offset(), readableBytes); return readableBytes; } @Override public int doRead(ApplicationBufferHandler handler) throws IOException { if (!isNeedToRead()) { // Read only once. return -1; } read = true; final int readableBytes = content.length(); handler.setByteBuffer(ByteBuffer.wrap(content.array(), content.offset(), readableBytes)); return readableBytes; } private boolean isNeedToRead() { return !(read || content.isEmpty()); } }