1 /** 2 * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 3 * you may not use this file except in compliance with the License. 4 * You may obtain a copy of the License at 5 * 6 * http://www.apache.org/licenses/LICENSE-2.0 7 * 8 * Unless required by applicable law or agreed to in writing, software 9 * distributed under the License is distributed on an "AS IS" BASIS, 10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 * See the License for the specific language governing permissions and 12 * limitations under the License. 13 */ 14 package org.jivesoftware.smackx.bytestreams; 15 16 import java.io.IOException; 17 import java.io.InputStream; 18 import java.io.OutputStream; 19 20 import org.jivesoftware.smackx.bytestreams.ibb.InBandBytestreamSession; 21 import org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamSession; 22 23 /** 24 * BytestreamSession provides an interface for established bytestream sessions. 25 * <p> 26 * There are two implementations of the interface. See {@link Socks5BytestreamSession} and 27 * {@link InBandBytestreamSession}. 28 * 29 * @author Henning Staib 30 */ 31 public interface BytestreamSession { 32 33 /** 34 * Returns the InputStream associated with this session to send data. 35 * 36 * @return the InputStream associated with this session to send data 37 * @throws IOException if an error occurs while retrieving the input stream 38 */ 39 public InputStream getInputStream() throws IOException; 40 41 /** 42 * Returns the OutputStream associated with this session to receive data. 43 * 44 * @return the OutputStream associated with this session to receive data 45 * @throws IOException if an error occurs while retrieving the output stream 46 */ 47 public OutputStream getOutputStream() throws IOException; 48 49 /** 50 * Closes the bytestream session. 51 * <p> 52 * Closing the session will also close the input stream and the output stream associated to this 53 * session. 54 * 55 * @throws IOException if an error occurs while closing the session 56 */ 57 public void close() throws IOException; 58 59 /** 60 * Returns the timeout for read operations of the input stream associated with this session. 0 61 * returns implies that the option is disabled (i.e., timeout of infinity). Default is 0. 62 * 63 * @return the timeout for read operations 64 * @throws IOException if there is an error in the underlying protocol 65 */ 66 public int getReadTimeout() throws IOException; 67 68 /** 69 * Sets the specified timeout, in milliseconds. With this option set to a non-zero timeout, a 70 * read() call on the input stream associated with this session will block for only this amount 71 * of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the 72 * session is still valid. The option must be enabled prior to entering the blocking operation 73 * to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite 74 * timeout. Default is 0. 75 * 76 * @param timeout the specified timeout, in milliseconds 77 * @throws IOException if there is an error in the underlying protocol 78 */ 79 public void setReadTimeout(int timeout) throws IOException; 80 81 } 82