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 }