1 package org.eclipse.jetty.websocket;
2
3 import java.io.IOException;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
8
9 import org.eclipse.jetty.server.Request;
10 import org.eclipse.jetty.server.handler.HandlerWrapper;
11
12 public abstract class WebSocketHandler extends HandlerWrapper
13 {
14 private WebSocketFactory _websocket;
15 private int _bufferSize=8192;
16
17
18
19
20
21
22 public int getBufferSize()
23 {
24 return _bufferSize;
25 }
26
27
28
29
30
31 public void setBufferSize(int bufferSize)
32 {
33 _bufferSize = bufferSize;
34 }
35
36
37
38
39
40 @Override
41 protected void doStart() throws Exception
42 {
43 _websocket=new WebSocketFactory(_bufferSize);
44 super.doStart();
45 }
46
47
48
49
50
51 @Override
52 protected void doStop() throws Exception
53 {
54 super.doStop();
55 _websocket=null;
56 }
57
58
59 @Override
60 public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
61 {
62 if ("WebSocket".equals(request.getHeader("Upgrade")))
63 {
64 String protocol=request.getHeader("WebSocket-Protocol");
65 WebSocket websocket=doWebSocketConnect(request,protocol);
66
67 String host=request.getHeader("Host");
68 String origin=request.getHeader("Origin");
69 origin=checkOrigin(request,host,origin);
70
71 if (websocket!=null)
72 _websocket.upgrade(request,response,websocket,origin,protocol);
73 else
74 response.sendError(503);
75 }
76 else
77 {
78 super.handle(target,baseRequest,request,response);
79 }
80 }
81
82 protected String checkOrigin(HttpServletRequest request, String host, String origin)
83 {
84 if (origin==null)
85 origin=host;
86 return origin;
87 }
88
89 abstract protected WebSocket doWebSocketConnect(HttpServletRequest request,String protocol);
90
91 }