View Javadoc

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      /** Get the bufferSize.
20       * @return the bufferSize
21       */
22      public int getBufferSize()
23      {
24          return _bufferSize;
25      }
26  
27      /* ------------------------------------------------------------ */
28      /** Set the bufferSize.
29       * @param bufferSize the bufferSize to set
30       */
31      public void setBufferSize(int bufferSize)
32      {
33          _bufferSize = bufferSize;
34      }
35  
36      /* ------------------------------------------------------------ */
37      /**
38       * @see org.eclipse.jetty.server.handler.HandlerWrapper#doStart()
39       */
40      @Override
41      protected void doStart() throws Exception
42      {
43          _websocket=new WebSocketFactory(_bufferSize);
44          super.doStart();
45      }
46  
47      /* ------------------------------------------------------------ */
48      /**
49       * @see org.eclipse.jetty.server.handler.HandlerWrapper#doStop()
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  }