1 package org.eclipse.jetty.websocket;
2
3 import java.io.IOException;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.http.HttpServlet;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public abstract class WebSocketServlet extends HttpServlet
26 {
27 WebSocketFactory _websocket;
28
29
30
31
32
33 @Override
34 public void init() throws ServletException
35 {
36 String bs=getInitParameter("bufferSize");
37 _websocket = new WebSocketFactory(bs==null?8192:Integer.parseInt(bs));
38 String mit=getInitParameter("maxIdleTime");
39 if (mit!=null)
40 _websocket.setMaxIdleTime(Integer.parseInt(mit));
41 }
42
43
44
45
46
47 @Override
48 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
49 {
50 if ("WebSocket".equals(request.getHeader("Upgrade")))
51 {
52 String protocol=request.getHeader("WebSocket-Protocol");
53 WebSocket websocket=doWebSocketConnect(request,protocol);
54
55 String host=request.getHeader("Host");
56 String origin=request.getHeader("Origin");
57 origin=checkOrigin(request,host,origin);
58
59 if (websocket!=null)
60 _websocket.upgrade(request,response,websocket,origin,protocol);
61 else
62 response.sendError(503);
63 }
64 else
65 super.service(request,response);
66 }
67
68 protected String checkOrigin(HttpServletRequest request, String host, String origin)
69 {
70 if (origin==null)
71 origin=host;
72 return origin;
73 }
74
75 abstract protected WebSocket doWebSocketConnect(HttpServletRequest request,String protocol);
76
77
78 }