1 //========================================================================
2 //$Id: SocketEndPoint.java,v 1.1 2005/10/05 14:09:39 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.bio;
17
18 import java.io.IOException;
19 import java.net.InetAddress;
20 import java.net.InetSocketAddress;
21 import java.net.Socket;
22
23 import org.mortbay.io.Portable;
24 import org.mortbay.log.Log;
25
26 /**
27 * @author gregw
28 *
29 * To change the template for this generated type comment go to
30 * Window - Preferences - Java - Code Generation - Code and Comments
31 */
32 public class SocketEndPoint extends StreamEndPoint
33 {
34 Socket _socket;
35 InetSocketAddress _local;
36 InetSocketAddress _remote;
37
38 /**
39 *
40 */
41 public SocketEndPoint(Socket socket)
42 throws IOException
43 {
44 super(socket.getInputStream(),socket.getOutputStream());
45 _socket=socket;
46 }
47
48 /* (non-Javadoc)
49 * @see org.mortbay.io.BufferIO#isClosed()
50 */
51 public boolean isOpen()
52 {
53 return super.isOpen() && _socket!=null && !_socket.isClosed() && !_socket.isInputShutdown() && !_socket.isOutputShutdown();
54 }
55
56 /* (non-Javadoc)
57 * @see org.mortbay.io.BufferIO#close()
58 */
59 public void close() throws IOException
60 {
61 if (!_socket.isClosed() && !_socket.isOutputShutdown())
62 {
63 try
64 {
65 _socket.shutdownOutput();
66 }
67 catch(IOException e)
68 {
69 Log.ignore(e);
70 }
71 catch(UnsupportedOperationException e)
72 {
73 Log.ignore(e);
74 }
75 }
76 _socket.close();
77 _in=null;
78 _out=null;
79
80 }
81
82
83 /* ------------------------------------------------------------ */
84 /*
85 * @see org.mortbay.io.EndPoint#getLocalAddr()
86 */
87 public String getLocalAddr()
88 {
89 if (_local==null)
90 _local=(InetSocketAddress)_socket.getLocalSocketAddress();
91
92 if (_local==null || _local.getAddress()==null || _local.getAddress().isAnyLocalAddress())
93 return Portable.ALL_INTERFACES;
94
95 return _local.getAddress().getHostAddress();
96 }
97
98 /* ------------------------------------------------------------ */
99 /*
100 * @see org.mortbay.io.EndPoint#getLocalHost()
101 */
102 public String getLocalHost()
103 {
104 if (_local==null)
105 _local=(InetSocketAddress)_socket.getLocalSocketAddress();
106
107 if (_local==null || _local.getAddress()==null || _local.getAddress().isAnyLocalAddress())
108 return Portable.ALL_INTERFACES;
109
110 return _local.getAddress().getCanonicalHostName();
111 }
112
113 /* ------------------------------------------------------------ */
114 /*
115 * @see org.mortbay.io.EndPoint#getLocalPort()
116 */
117 public int getLocalPort()
118 {
119 if (_local==null)
120 _local=(InetSocketAddress)_socket.getLocalSocketAddress();
121 if (_local==null)
122 return -1;
123 return _local.getPort();
124 }
125
126 /* ------------------------------------------------------------ */
127 /*
128 * @see org.mortbay.io.EndPoint#getRemoteAddr()
129 */
130 public String getRemoteAddr()
131 {
132 if (_remote==null)
133 _remote=(InetSocketAddress)_socket.getRemoteSocketAddress();
134 if (_remote==null)
135 return null;
136 InetAddress addr = _remote.getAddress();
137 return ( addr == null ? null : addr.getHostAddress() );
138 }
139
140 /* ------------------------------------------------------------ */
141 /*
142 * @see org.mortbay.io.EndPoint#getRemoteHost()
143 */
144 public String getRemoteHost()
145 {
146 if (_remote==null)
147 _remote=(InetSocketAddress)_socket.getRemoteSocketAddress();
148 if (_remote==null)
149 return null;
150 return _remote.getAddress().getCanonicalHostName();
151 }
152
153 /* ------------------------------------------------------------ */
154 /*
155 * @see org.mortbay.io.EndPoint#getRemotePort()
156 */
157 public int getRemotePort()
158 {
159 if (_remote==null)
160 _remote=(InetSocketAddress)_socket.getRemoteSocketAddress();
161 if (_remote==null)
162 return -1;
163 return _remote.getPort();
164 }
165
166 /* ------------------------------------------------------------ */
167 /*
168 * @see org.mortbay.io.EndPoint#getConnection()
169 */
170 public Object getTransport()
171 {
172 return _socket;
173 }
174 }