001/* 002 * ==================================================================== 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 * ==================================================================== 020 * 021 * This software consists of voluntary contributions made by many 022 * individuals on behalf of the Apache Software Foundation. For more 023 * information on the Apache Software Foundation, please see 024 * <http://www.apache.org/>. 025 * 026 */ 027package org.apache.http.nio.reactor.ssl; 028 029import java.nio.ByteBuffer; 030import org.apache.http.util.Args; 031 032/** 033 * A {@link SSLBufferManagementStrategy} that never releases the underlying buffer. 034 */ 035public class PermanentSSLBufferManagementStrategy implements SSLBufferManagementStrategy { 036 037 @Override 038 public SSLBuffer constructBuffer(final int size) { 039 return new InternalBuffer(size); 040 } 041 042 043 private static final class InternalBuffer implements SSLBuffer { 044 045 private final ByteBuffer buffer; 046 047 public InternalBuffer(final int size) { 048 Args.positive(size, "size"); 049 buffer = ByteBuffer.allocate(size); 050 } 051 052 @Override 053 public ByteBuffer acquire() { 054 return buffer; 055 } 056 057 @Override 058 public void release() { 059 // do nothing 060 } 061 062 @Override 063 public boolean isAcquired() { 064 return true; 065 } 066 067 @Override 068 public boolean hasData() { 069 return buffer.position() > 0; 070 } 071 072 } 073}