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 return _local.getPort();
122 }
123
124 /* ------------------------------------------------------------ */
125 /*
126 * @see org.mortbay.io.EndPoint#getRemoteAddr()
127 */
128 public String getRemoteAddr()
129 {
130 if (_remote==null)
131 _remote=(InetSocketAddress)_socket.getRemoteSocketAddress();
132
133 InetAddress addr = _remote.getAddress();
134 return ( addr == null ? null : addr.getHostAddress() );
135 }
136
137 /* ------------------------------------------------------------ */
138 /*
139 * @see org.mortbay.io.EndPoint#getRemoteHost()
140 */
141 public String getRemoteHost()
142 {
143 if (_remote==null)
144 _remote=(InetSocketAddress)_socket.getRemoteSocketAddress();
145
146 return _remote.getAddress().getCanonicalHostName();
147 }
148
149 /* ------------------------------------------------------------ */
150 /*
151 * @see org.mortbay.io.EndPoint#getRemotePort()
152 */
153 public int getRemotePort()
154 {
155 if (_remote==null)
156 _remote=(InetSocketAddress)_socket.getRemoteSocketAddress();
157 return _remote.getPort();
158 }
159
160
161 /* ------------------------------------------------------------ */
162 /*
163 * @see org.mortbay.io.EndPoint#getConnection()
164 */
165 public Object getTransport()
166 {
167 return _socket;
168 }
169 }