View Javadoc

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      final Socket _socket;
35      final InetSocketAddress _local;
36      final 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          _local=(InetSocketAddress)_socket.getLocalSocketAddress();
47          _remote=(InetSocketAddress)_socket.getRemoteSocketAddress();
48      }
49  
50      /* (non-Javadoc)
51       * @see org.mortbay.io.BufferIO#isClosed()
52       */
53      public boolean isOpen()
54      {
55          return super.isOpen() && _socket!=null && !_socket.isClosed() && !_socket.isInputShutdown() && !_socket.isOutputShutdown();
56      }
57  
58      /* (non-Javadoc)
59       * @see org.mortbay.io.BufferIO#close()
60       */
61      public void close() throws IOException
62      {
63          if (!_socket.isClosed() && !_socket.isOutputShutdown())
64          {
65              try
66              {
67                  _socket.shutdownOutput();
68              }
69              catch(IOException e)
70              {
71                  Log.ignore(e);
72              }
73              catch(UnsupportedOperationException e)
74              {
75                  Log.ignore(e);
76              }
77          }
78          _socket.close();
79          _in=null;
80          _out=null;
81          
82      }
83      
84  
85      /* ------------------------------------------------------------ */
86      /* 
87       * @see org.mortbay.io.EndPoint#getLocalAddr()
88       */
89      public String getLocalAddr()
90      {
91         if (_local==null || _local.getAddress()==null || _local.getAddress().isAnyLocalAddress())
92             return Portable.ALL_INTERFACES;
93          
94          return _local.getAddress().getHostAddress();
95      }
96  
97      /* ------------------------------------------------------------ */
98      /* 
99       * @see org.mortbay.io.EndPoint#getLocalHost()
100      */
101     public String getLocalHost()
102     {
103        if (_local==null || _local.getAddress()==null || _local.getAddress().isAnyLocalAddress())
104            return Portable.ALL_INTERFACES;
105         
106         return _local.getAddress().getCanonicalHostName();
107     }
108 
109     /* ------------------------------------------------------------ */
110     /* 
111      * @see org.mortbay.io.EndPoint#getLocalPort()
112      */
113     public int getLocalPort()
114     {
115         if (_local==null)
116             return -1;
117         return _local.getPort();
118     }
119 
120     /* ------------------------------------------------------------ */
121     /* 
122      * @see org.mortbay.io.EndPoint#getRemoteAddr()
123      */
124     public String getRemoteAddr()
125     {
126         if (_remote==null)
127             return null;
128         InetAddress addr = _remote.getAddress();
129         return ( addr == null ? null : addr.getHostAddress() );
130     }
131 
132     /* ------------------------------------------------------------ */
133     /* 
134      * @see org.mortbay.io.EndPoint#getRemoteHost()
135      */
136     public String getRemoteHost()
137     {
138         if (_remote==null)
139             return null;
140         return _remote.getAddress().getCanonicalHostName();
141     }
142 
143     /* ------------------------------------------------------------ */
144     /* 
145      * @see org.mortbay.io.EndPoint#getRemotePort()
146      */
147     public int getRemotePort()
148     {
149         if (_remote==null)
150             return -1;
151         return _remote.getPort();
152     }
153 
154     /* ------------------------------------------------------------ */
155     /* 
156      * @see org.mortbay.io.EndPoint#getConnection()
157      */
158     public Object getTransport()
159     {
160         return _socket;
161     }
162 }