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