1 // 2 // ======================================================================== 3 // Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd. 4 // ------------------------------------------------------------------------ 5 // All rights reserved. This program and the accompanying materials 6 // are made available under the terms of the Eclipse Public License v1.0 7 // and Apache License v2.0 which accompanies this distribution. 8 // 9 // The Eclipse Public License is available at 10 // http://www.eclipse.org/legal/epl-v10.html 11 // 12 // The Apache License v2.0 is available at 13 // http://www.opensource.org/licenses/apache2.0.php 14 // 15 // You may elect to redistribute this code under either of these licenses. 16 // ======================================================================== 17 // 18 19 package org.eclipse.jetty.io; 20 21 import java.io.IOException; 22 23 24 /** 25 * 26 * A transport EndPoint 27 */ 28 public interface EndPoint 29 { 30 /** 31 * Shutdown any backing output stream associated with the endpoint 32 */ 33 void shutdownOutput() throws IOException; 34 35 boolean isOutputShutdown(); 36 37 /** 38 * Shutdown any backing input stream associated with the endpoint 39 */ 40 void shutdownInput() throws IOException; 41 42 boolean isInputShutdown(); 43 44 /** 45 * Close any backing stream associated with the endpoint 46 */ 47 void close() throws IOException; 48 49 /** 50 * Fill the buffer from the current putIndex to it's capacity from whatever 51 * byte source is backing the buffer. The putIndex is increased if bytes filled. 52 * The buffer may chose to do a compact before filling. 53 * @return an <code>int</code> value indicating the number of bytes 54 * filled or -1 if EOF is reached. 55 * @throws EofException If input is shutdown or the endpoint is closed. 56 */ 57 int fill(Buffer buffer) throws IOException; 58 59 60 /** 61 * Flush the buffer from the current getIndex to it's putIndex using whatever byte 62 * sink is backing the buffer. The getIndex is updated with the number of bytes flushed. 63 * Any mark set is cleared. 64 * If the entire contents of the buffer are flushed, then an implicit empty() is done. 65 * 66 * @param buffer The buffer to flush. This buffers getIndex is updated. 67 * @return the number of bytes written 68 * @throws EofException If the endpoint is closed or output is shutdown. 69 */ 70 int flush(Buffer buffer) throws IOException; 71 72 /** 73 * Flush the buffer from the current getIndex to it's putIndex using whatever byte 74 * sink is backing the buffer. The getIndex is updated with the number of bytes flushed. 75 * Any mark set is cleared. 76 * If the entire contents of the buffer are flushed, then an implicit empty() is done. 77 * The passed header/trailer buffers are written before/after the contents of this buffer. This may be done 78 * either as gather writes, as a poke into this buffer or as several writes. The implementation is free to 79 * select the optimal mechanism. 80 * @param header A buffer to write before flushing this buffer. This buffers getIndex is updated. 81 * @param buffer The buffer to flush. This buffers getIndex is updated. 82 * @param trailer A buffer to write after flushing this buffer. This buffers getIndex is updated. 83 * @return the total number of bytes written. 84 */ 85 int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException; 86 87 88 /* ------------------------------------------------------------ */ 89 /** 90 * @return The local IP address to which this <code>EndPoint</code> is bound, or <code>null</code> 91 * if this <code>EndPoint</code> does not represent a network connection. 92 */ 93 public String getLocalAddr(); 94 95 /* ------------------------------------------------------------ */ 96 /** 97 * @return The local host name to which this <code>EndPoint</code> is bound, or <code>null</code> 98 * if this <code>EndPoint</code> does not represent a network connection. 99 */ 100 public String getLocalHost(); 101 102 /* ------------------------------------------------------------ */ 103 /** 104 * @return The local port number on which this <code>EndPoint</code> is listening, or <code>0</code> 105 * if this <code>EndPoint</code> does not represent a network connection. 106 */ 107 public int getLocalPort(); 108 109 /* ------------------------------------------------------------ */ 110 /** 111 * @return The remote IP address to which this <code>EndPoint</code> is connected, or <code>null</code> 112 * if this <code>EndPoint</code> does not represent a network connection. 113 */ 114 public String getRemoteAddr(); 115 116 /* ------------------------------------------------------------ */ 117 /** 118 * @return The host name of the remote machine to which this <code>EndPoint</code> is connected, or <code>null</code> 119 * if this <code>EndPoint</code> does not represent a network connection. 120 */ 121 public String getRemoteHost(); 122 123 /* ------------------------------------------------------------ */ 124 /** 125 * @return The remote port number to which this <code>EndPoint</code> is connected, or <code>0</code> 126 * if this <code>EndPoint</code> does not represent a network connection. 127 */ 128 public int getRemotePort(); 129 130 /* ------------------------------------------------------------ */ 131 public boolean isBlocking(); 132 133 /* ------------------------------------------------------------ */ 134 public boolean blockReadable(long millisecs) throws IOException; 135 136 /* ------------------------------------------------------------ */ 137 public boolean blockWritable(long millisecs) throws IOException; 138 139 /* ------------------------------------------------------------ */ 140 public boolean isOpen(); 141 142 /* ------------------------------------------------------------ */ 143 /** 144 * @return The underlying transport object (socket, channel, etc.) 145 */ 146 public Object getTransport(); 147 148 /* ------------------------------------------------------------ */ 149 /** Flush any buffered output. 150 * May fail to write all data if endpoint is non-blocking 151 * @throws EofException If the endpoint is closed or output is shutdown. 152 */ 153 public void flush() throws IOException; 154 155 /* ------------------------------------------------------------ */ 156 /** Get the max idle time in ms. 157 * <p>The max idle time is the time the endpoint can be idle before 158 * extraordinary handling takes place. This loosely corresponds to 159 * the {@link java.net.Socket#getSoTimeout()} for blocking connections, 160 * but {@link AsyncEndPoint} implementations must use other mechanisms 161 * to implement the max idle time. 162 * @return the max idle time in ms or if ms <= 0 implies an infinite timeout 163 */ 164 public int getMaxIdleTime(); 165 166 /* ------------------------------------------------------------ */ 167 /** Set the max idle time. 168 * @param timeMs the max idle time in MS. Timeout <= 0 implies an infinite timeout 169 * @throws IOException if the timeout cannot be set. 170 */ 171 public void setMaxIdleTime(int timeMs) throws IOException; 172 173 174 175 }