View Javadoc

1   /*******************************************************************************
2    * Copyright (c) 2011 Intalio, Inc.
3    * ======================================================================
4    * All rights reserved. This program and the accompanying materials
5    * are made available under the terms of the Eclipse Public License v1.0
6    * and Apache License v2.0 which accompanies this distribution.
7    *
8    *   The Eclipse Public License is available at
9    *   http://www.eclipse.org/legal/epl-v10.html
10   *
11   *   The Apache License v2.0 is available at
12   *   http://www.opensource.org/licenses/apache2.0.php
13   *
14   * You may elect to redistribute this code under either of these licenses.
15   *******************************************************************************/
16  package org.eclipse.jetty.websocket;
17  
18  import java.io.IOException;
19  import javax.servlet.http.HttpServletRequest;
20  import javax.servlet.http.HttpServletResponse;
21  
22  import org.eclipse.jetty.io.EndPoint;
23  
24  public class WebSocketServletConnectionD06 extends WebSocketConnectionD06 implements WebSocketServletConnection
25  {
26      private final WebSocketFactory factory;
27  
28      public WebSocketServletConnectionD06(WebSocketFactory factory, WebSocket websocket, EndPoint endpoint, WebSocketBuffers buffers, long timestamp, int maxIdleTime, String protocol)
29              throws IOException
30      {
31          super(websocket,endpoint,buffers,timestamp,maxIdleTime,protocol);
32          this.factory = factory;
33      }
34  
35      /* ------------------------------------------------------------ */
36      public void handshake(HttpServletRequest request, HttpServletResponse response, String subprotocol) throws IOException
37      {
38          String key = request.getHeader("Sec-WebSocket-Key");
39  
40          response.setHeader("Upgrade","WebSocket");
41          response.addHeader("Connection","Upgrade");
42          response.addHeader("Sec-WebSocket-Accept",hashKey(key));
43          if (subprotocol!=null)
44          {
45              response.addHeader("Sec-WebSocket-Protocol",subprotocol);
46          }
47  
48          response.sendError(101);
49  
50          onFrameHandshake();
51          onWebSocketOpen();
52      }
53  
54      @Override
55      public void onClose()
56      {
57          super.onClose();
58          factory.removeConnection(this);
59      }
60  }