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 }