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      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 }