View Javadoc

1   /*
2    * $Id: TcpSocketKey.java 10489 2008-01-23 17:53:38Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.transport.tcp;
12  
13  import org.mule.api.endpoint.ImmutableEndpoint;
14  
15  import java.net.InetAddress;
16  import java.net.InetSocketAddress;
17  
18  /**
19   * This is used to adapt an endpoint so that it can be used as a key for sockets.  It must
20   * meet two requirements: (1) implement hash and equals in a way that reflects socket identity
21   * (ie using address and port); (2) allow access to the endpoint for use in the socket factory.
22   * For simplicity we also expose the connector, address and port directly.
23   */
24  public class TcpSocketKey
25  {
26  
27      private InetSocketAddress address;
28      private ImmutableEndpoint endpoint;
29  
30      public TcpSocketKey(ImmutableEndpoint endpoint)
31      {
32          if (!(endpoint.getConnector() instanceof TcpConnector))
33          {
34              throw new IllegalArgumentException("Sockets must be keyed via a TCP endpoint");
35          }
36          this.endpoint = endpoint;
37          address = new InetSocketAddress(
38                  endpoint.getEndpointURI().getHost(),
39                  endpoint.getEndpointURI().getPort());
40      }
41  
42      public boolean equals(Object obj)
43      {
44          return obj instanceof TcpSocketKey && address.equals(((TcpSocketKey) obj).address);
45      }
46  
47      public int hashCode()
48      {
49          return address.hashCode();
50      }
51  
52      public ImmutableEndpoint getEndpoint()
53      {
54          return endpoint;
55      }
56  
57      public TcpConnector getConnector()
58      {
59          return (TcpConnector) endpoint.getConnector();
60      }
61  
62      public InetAddress getInetAddress()
63      {
64          return address.getAddress();
65      }
66  
67      public int getPort()
68      {
69          return address.getPort();
70      }
71  
72      public String toString()
73      {
74          return getInetAddress() + ":" + getPort();
75      }
76  
77  }