1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.websocket;
15
16 import java.io.IOException;
17
18 import javax.servlet.http.HttpServletRequest;
19 import javax.servlet.http.HttpServletResponse;
20
21 import org.eclipse.jetty.http.HttpParser;
22 import org.eclipse.jetty.io.ConnectedEndPoint;
23 import org.eclipse.jetty.server.HttpConnection;
24
25
26
27
28
29 public class WebSocketFactory
30 {
31 private WebSocketBuffers _buffers;
32 private int _maxIdleTime=300000;
33
34
35 public WebSocketFactory()
36 {
37 _buffers=new WebSocketBuffers(8192);
38 }
39
40
41 public WebSocketFactory(int bufferSize)
42 {
43 _buffers=new WebSocketBuffers(bufferSize);
44 }
45
46
47
48
49
50 public long getMaxIdleTime()
51 {
52 return _maxIdleTime;
53 }
54
55
56
57
58
59 public void setMaxIdleTime(int maxIdleTime)
60 {
61 _maxIdleTime = maxIdleTime;
62 }
63
64
65
66
67
68 public int getBufferSize()
69 {
70 return _buffers.getBufferSize();
71 }
72
73
74
75
76
77 public void setBufferSize(int bufferSize)
78 {
79 if (bufferSize!=getBufferSize())
80 _buffers=new WebSocketBuffers(bufferSize);
81 }
82
83
84
85
86
87
88
89
90
91
92
93
94
95 public void upgrade(HttpServletRequest request,HttpServletResponse response, WebSocket websocket, String origin, String subprotocol)
96 throws IOException
97 {
98 if (!"WebSocket".equals(request.getHeader("Upgrade")))
99 throw new IllegalStateException("!Upgrade:websocket");
100 if (!"HTTP/1.1".equals(request.getProtocol()))
101 throw new IllegalStateException("!HTTP/1.1");
102
103 int draft=request.getIntHeader("Sec-WebSocket-Draft");
104 HttpConnection http = HttpConnection.getCurrentConnection();
105 ConnectedEndPoint endp = (ConnectedEndPoint)http.getEndPoint();
106
107 final WebSocketConnection connection;
108 switch(draft)
109 {
110 default:
111 connection=new WebSocketConnectionD00(websocket,endp,_buffers,http.getTimeStamp(), _maxIdleTime,draft);
112 }
113
114
115 connection.handshake(request,response, origin, subprotocol);
116 response.flushBuffer();
117
118
119 connection.fillBuffersFrom(((HttpParser)http.getParser()).getHeaderBuffer());
120 connection.fillBuffersFrom(((HttpParser)http.getParser()).getBodyBuffer());
121
122
123 request.setAttribute("org.eclipse.jetty.io.Connection",connection);
124 }
125 }