/* * Copyright 2009-2010 LinkedIn, Inc. * * Licensed 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 voldemort.server.protocol; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import voldemort.VoldemortException; import voldemort.common.nio.ByteBufferContainer; /** * A request handler that answers client requests in some given format * * */ public interface RequestHandler { /** * Handles the request as determined by the protocol and command provided as * input. * * @param inputStream * @param outputStream * * @return StreamRequestHandler if this is the beginning of a streaming * request, null if self-contained * * @throws IOException */ public StreamRequestHandler handleRequest(DataInputStream inputStream, DataOutputStream outputStream) throws IOException; public StreamRequestHandler handleRequest(DataInputStream inputStream, DataOutputStream outputStream, ByteBufferContainer outputContainer) throws IOException; /** * This method is used by non-blocking code to determine if the give buffer * represents a complete request. Because the non-blocking code can by * definition not just block waiting for more data, it's possible to get * partial reads, and this identifies that case. * * @param buffer Buffer to check; the buffer is reset to position 0 before * calling this method and the caller must reset it after the call * returns * @return True if the buffer holds a complete request, false otherwise */ public boolean isCompleteRequest(ByteBuffer buffer) throws VoldemortException; }