1 /*
2 * ====================================================================
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 * ====================================================================
20 *
21 * This software consists of voluntary contributions made by many
22 * individuals on behalf of the Apache Software Foundation. For more
23 * information on the Apache Software Foundation, please see
24 * <http://www.apache.org/>.
25 *
26 */
27
28 package org.apache.http.impl.io;
29
30 import java.io.IOException;
31 import java.net.Socket;
32
33 import org.apache.http.io.EofSensor;
34 import org.apache.http.params.HttpParams;
35 import org.apache.http.util.Args;
36
37 /**
38 * {@link org.apache.http.io.SessionInputBuffer} implementation
39 * bound to a {@link Socket}.
40 *
41 * @since 4.0
42 *
43 * @deprecated (4.3) use {@link SessionInputBufferImpl}
44 */
45 @Deprecated
46 public class SocketInputBuffer extends AbstractSessionInputBuffer implements EofSensor {
47
48 private final Socket socket;
49
50 private boolean eof;
51
52 /**
53 * Creates an instance of this class.
54 *
55 * @param socket the socket to read data from.
56 * @param bufferSize the size of the internal buffer. If this number is less
57 * than {@code 0} it is set to the value of
58 * {@link Socket#getReceiveBufferSize()}. If resultant number is less
59 * than {@code 1024} it is set to {@code 1024}.
60 * @param params HTTP parameters.
61 */
62 public SocketInputBuffer(
63 final Socket socket,
64 final int bufferSize,
65 final HttpParams params) throws IOException {
66 super();
67 Args.notNull(socket, "Socket");
68 this.socket = socket;
69 this.eof = false;
70 int n = bufferSize;
71 if (n < 0) {
72 n = socket.getReceiveBufferSize();
73 }
74 if (n < 1024) {
75 n = 1024;
76 }
77 init(socket.getInputStream(), n, params);
78 }
79
80 @Override
81 protected int fillBuffer() throws IOException {
82 final int i = super.fillBuffer();
83 this.eof = i == -1;
84 return i;
85 }
86
87 @Override
88 public boolean isDataAvailable(final int timeout) throws IOException {
89 boolean result = hasBufferedData();
90 if (!result) {
91 final int oldtimeout = this.socket.getSoTimeout();
92 try {
93 this.socket.setSoTimeout(timeout);
94 fillBuffer();
95 result = hasBufferedData();
96 } finally {
97 socket.setSoTimeout(oldtimeout);
98 }
99 }
100 return result;
101 }
102
103 @Override
104 public boolean isEof() {
105 return this.eof;
106 }
107
108 }