1 //======================================================================== 2 //$Id: EndPoint.java,v 1.1 2005/10/05 14:09:25 janb Exp $ 3 //Copyright 2004-2005 Mort Bay Consulting Pty. Ltd. 4 //------------------------------------------------------------------------ 5 //Licensed under the Apache License, Version 2.0 (the "License"); 6 //you may not use this file except in compliance with the License. 7 //You may obtain a copy of the License at 8 //http://www.apache.org/licenses/LICENSE-2.0 9 //Unless required by applicable law or agreed to in writing, software 10 //distributed under the License is distributed on an "AS IS" BASIS, 11 //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 //See the License for the specific language governing permissions and 13 //limitations under the License. 14 //======================================================================== 15 16 package org.mortbay.io; 17 18 import java.io.IOException; 19 20 21 22 /** 23 * @author gregw 24 * A transport EndPoint 25 */ 26 public interface EndPoint 27 { 28 /** 29 * Shutdown any backing output stream associated with the endpoint 30 */ 31 void shutdownOutput() throws IOException; 32 33 /** 34 * Close any backing stream associated with the buffer 35 */ 36 void close() throws IOException; 37 38 /** 39 * Fill the buffer from the current putIndex to it's capacity from whatever 40 * byte source is backing the buffer. The putIndex is increased if bytes filled. 41 * The buffer may chose to do a compact before filling. 42 * @return an <code>int</code> value indicating the number of bytes 43 * filled or -1 if EOF is reached. 44 */ 45 int fill(Buffer buffer) throws IOException; 46 47 48 /** 49 * Flush the buffer from the current getIndex to it's putIndex using whatever byte 50 * sink is backing the buffer. The getIndex is updated with the number of bytes flushed. 51 * Any mark set is cleared. 52 * If the entire contents of the buffer are flushed, then an implicit empty() is done. 53 * 54 * @param buffer The buffer to flush. This buffers getIndex is updated. 55 * @return the number of bytes written 56 */ 57 int flush(Buffer buffer) throws IOException; 58 59 /** 60 * Flush the buffer from the current getIndex to it's putIndex using whatever byte 61 * sink is backing the buffer. The getIndex is updated with the number of bytes flushed. 62 * Any mark set is cleared. 63 * If the entire contents of the buffer are flushed, then an implicit empty() is done. 64 * The passed header/trailer buffers are written before/after the contents of this buffer. This may be done 65 * either as gather writes, as a poke into this buffer or as several writes. The implementation is free to 66 * select the optimal mechanism. 67 * @param header A buffer to write before flushing this buffer. This buffers getIndex is updated. 68 * @param buffer The buffer to flush. This buffers getIndex is updated. 69 * @param trailer A buffer to write after flushing this buffer. This buffers getIndex is updated. 70 * @return the total number of bytes written. 71 */ 72 int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException; 73 74 75 /* ------------------------------------------------------------ */ 76 /** 77 * @return The local IP address to which this <code>EndPoint</code> is bound, or <code>null</code> 78 * if this <code>EndPoint</code> does not represent a network connection. 79 */ 80 public String getLocalAddr(); 81 82 /* ------------------------------------------------------------ */ 83 /** 84 * @return The local host name to which this <code>EndPoint</code> is bound, or <code>null</code> 85 * if this <code>EndPoint</code> does not represent a network connection. 86 */ 87 public String getLocalHost(); 88 89 /* ------------------------------------------------------------ */ 90 /** 91 * @return The local port number on which this <code>EndPoint</code> is listening, or <code>0</code> 92 * if this <code>EndPoint</code> does not represent a network connection. 93 */ 94 public int getLocalPort(); 95 96 /* ------------------------------------------------------------ */ 97 /** 98 * @return The remote IP address to which this <code>EndPoint</code> is connected, or <code>null</code> 99 * if this <code>EndPoint</code> does not represent a network connection. 100 */ 101 public String getRemoteAddr(); 102 103 /* ------------------------------------------------------------ */ 104 /** 105 * @return The host name of the remote machine to which this <code>EndPoint</code> is connected, or <code>null</code> 106 * if this <code>EndPoint</code> does not represent a network connection. 107 */ 108 public String getRemoteHost(); 109 110 /* ------------------------------------------------------------ */ 111 /** 112 * @return The remote port number to which this <code>EndPoint</code> is connected, or <code>0</code> 113 * if this <code>EndPoint</code> does not represent a network connection. 114 */ 115 public int getRemotePort(); 116 117 118 /* ------------------------------------------------------------ */ 119 public boolean isBlocking(); 120 121 /* ------------------------------------------------------------ */ 122 public boolean isBufferred(); 123 124 /* ------------------------------------------------------------ */ 125 public boolean blockReadable(long millisecs) throws IOException; 126 127 /* ------------------------------------------------------------ */ 128 public boolean blockWritable(long millisecs) throws IOException; 129 130 /* ------------------------------------------------------------ */ 131 public boolean isOpen(); 132 133 /* ------------------------------------------------------------ */ 134 /** 135 * @return The underlying transport object (socket, channel, etc.) 136 */ 137 public Object getTransport(); 138 139 /* ------------------------------------------------------------ */ 140 /** 141 * @return True if the endpoint has some buffered input data 142 */ 143 public boolean isBufferingInput(); 144 145 /* ------------------------------------------------------------ */ 146 /** 147 * @return True if the endpoint has some buffered output data 148 */ 149 public boolean isBufferingOutput(); 150 151 /* ------------------------------------------------------------ */ 152 /** Flush any buffered output. 153 * May fail to write all data if endpoint is non-blocking 154 * @throws IOException 155 */ 156 public void flush() throws IOException; 157 158 159 160 161 162 }