1   /**
2    * 
3    */
4   package org.mortbay.jetty.client;
5   
6   import java.io.IOException;
7   import java.io.InterruptedIOException;
8   import java.net.Socket;
9   
10  import javax.net.SocketFactory;
11  import javax.net.ssl.SSLContext;
12  
13  import org.mortbay.component.AbstractLifeCycle;
14  import org.mortbay.io.EndPoint;
15  import org.mortbay.io.bio.SocketEndPoint;
16  import org.mortbay.jetty.client.HttpClient.Connector;
17  import org.mortbay.log.Log;
18  
19  class SocketConnector extends AbstractLifeCycle implements HttpClient.Connector
20  {
21      /**
22       * 
23       */
24      private final HttpClient _httpClient;
25  
26      /**
27       * @param httpClient
28       */
29      SocketConnector(HttpClient httpClient)
30      {
31          _httpClient = httpClient;
32      }
33  
34      public void startConnection(final HttpDestination destination) throws IOException
35      {
36          Socket socket=null;
37          
38          if ( destination.isSecure() )
39          {
40              SSLContext sslContext = _httpClient.getLooseSSLContext();
41              socket = sslContext.getSocketFactory().createSocket();
42          }
43          else
44          {
45              System.out.println("Using Regular Socket");
46              socket = SocketFactory.getDefault().createSocket();                
47          }
48         
49          socket.connect(destination.isProxied()?destination.getProxy():destination.getAddress());
50          
51          EndPoint endpoint=new SocketEndPoint(socket);
52          
53          final HttpConnection connection=new HttpConnection(_httpClient,endpoint,_httpClient.getHeaderBufferSize(),_httpClient.getRequestBufferSize());
54          connection.setDestination(destination);
55          destination.onNewConnection(connection);
56          _httpClient.getThreadPool().dispatch(new Runnable()
57          {
58              public void run()
59              {
60                  try
61                  {
62                      connection.handle();
63                  }
64                  catch (IOException e)
65                  {
66                      if (e instanceof InterruptedIOException)
67                          Log.ignore(e);
68                      else
69                      {
70                          Log.warn(e);
71                          destination.onException(e);
72                      }
73                  }
74              }
75          });
76               
77      }
78  }