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 /** 30 * Close any backing stream associated with the buffer 31 */ 32 void close() throws IOException; 33 34 /** 35 * Fill the buffer from the current putIndex to it's capacity from whatever 36 * byte source is backing the buffer. The putIndex is increased if bytes filled. 37 * The buffer may chose to do a compact before filling. 38 * @return an <code>int</code> value indicating the number of bytes 39 * filled or -1 if EOF is reached. 40 */ 41 int fill(Buffer buffer) throws IOException; 42 43 44 /** 45 * Flush the buffer from the current getIndex to it's putIndex using whatever byte 46 * sink is backing the buffer. The getIndex is updated with the number of bytes flushed. 47 * Any mark set is cleared. 48 * If the entire contents of the buffer are flushed, then an implicit empty() is done. 49 * 50 * @param buffer The buffer to flush. This buffers getIndex is updated. 51 * @return the number of bytes written 52 */ 53 int flush(Buffer buffer) throws IOException; 54 55 /** 56 * Flush the buffer from the current getIndex to it's putIndex using whatever byte 57 * sink is backing the buffer. The getIndex is updated with the number of bytes flushed. 58 * Any mark set is cleared. 59 * If the entire contents of the buffer are flushed, then an implicit empty() is done. 60 * The passed header/trailer buffers are written before/after the contents of this buffer. This may be done 61 * either as gather writes, as a poke into this buffer or as several writes. The implementation is free to 62 * select the optimal mechanism. 63 * @param header A buffer to write before flushing this buffer. This buffers getIndex is updated. 64 * @param buffer The buffer to flush. This buffers getIndex is updated. 65 * @param trailer A buffer to write after flushing this buffer. This buffers getIndex is updated. 66 * @return the total number of bytes written. 67 */ 68 int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException; 69 70 71 /* ------------------------------------------------------------ */ 72 /** 73 * @return The local IP address to which this <code>EndPoint</code> is bound, or <code>null</code> 74 * if this <code>EndPoint</code> does not represent a network connection. 75 */ 76 public String getLocalAddr(); 77 78 /* ------------------------------------------------------------ */ 79 /** 80 * @return The local host name to which this <code>EndPoint</code> is bound, or <code>null</code> 81 * if this <code>EndPoint</code> does not represent a network connection. 82 */ 83 public String getLocalHost(); 84 85 /* ------------------------------------------------------------ */ 86 /** 87 * @return The local port number on which this <code>EndPoint</code> is listening, or <code>0</code> 88 * if this <code>EndPoint</code> does not represent a network connection. 89 */ 90 public int getLocalPort(); 91 92 /* ------------------------------------------------------------ */ 93 /** 94 * @return The remote IP address to which this <code>EndPoint</code> is connected, or <code>null</code> 95 * if this <code>EndPoint</code> does not represent a network connection. 96 */ 97 public String getRemoteAddr(); 98 99 /* ------------------------------------------------------------ */ 100 /** 101 * @return The host name of the remote machine to which this <code>EndPoint</code> is connected, or <code>null</code> 102 * if this <code>EndPoint</code> does not represent a network connection. 103 */ 104 public String getRemoteHost(); 105 106 /* ------------------------------------------------------------ */ 107 /** 108 * @return The remote port number to which this <code>EndPoint</code> is connected, or <code>0</code> 109 * if this <code>EndPoint</code> does not represent a network connection. 110 */ 111 public int getRemotePort(); 112 113 114 /* ------------------------------------------------------------ */ 115 public boolean isBlocking(); 116 117 /* ------------------------------------------------------------ */ 118 public boolean isBufferred(); 119 120 /* ------------------------------------------------------------ */ 121 public boolean blockReadable(long millisecs) throws IOException; 122 123 /* ------------------------------------------------------------ */ 124 public boolean blockWritable(long millisecs) throws IOException; 125 126 /* ------------------------------------------------------------ */ 127 public boolean isOpen(); 128 129 /* ------------------------------------------------------------ */ 130 /** 131 * @return The underlying transport object (socket, channel, etc.) 132 */ 133 public Object getTransport(); 134 135 /* ------------------------------------------------------------ */ 136 /** 137 * @return True if the endpoint has some buffered input data 138 */ 139 public boolean isBufferingInput(); 140 141 /* ------------------------------------------------------------ */ 142 /** 143 * @return True if the endpoint has some buffered output data 144 */ 145 public boolean isBufferingOutput(); 146 147 /* ------------------------------------------------------------ */ 148 /** Flush any buffered output. 149 * May fail to write all data if endpoint is non-blocking 150 * @throws IOException 151 */ 152 public void flush() throws IOException; 153 154 }