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