1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.server;
20
21 import java.io.IOException;
22
23 import javax.servlet.http.HttpServletResponse;
24
25 import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig;
26 import org.eclipse.jetty.websocket.common.AcceptHash;
27 import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
28 import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
29
30
31
32
33 public class HandshakeRFC6455 implements WebSocketHandshake
34 {
35
36 public static final int VERSION = 13;
37
38 @Override
39 public void doHandshakeResponse(ServletUpgradeRequest request, ServletUpgradeResponse response) throws IOException
40 {
41 String key = request.getHeader("Sec-WebSocket-Key");
42
43 if (key == null)
44 {
45 throw new IllegalStateException("Missing request header 'Sec-WebSocket-Key'");
46 }
47
48
49 response.setHeader("Upgrade","WebSocket");
50 response.addHeader("Connection","Upgrade");
51 response.addHeader("Sec-WebSocket-Accept",AcceptHash.hashKey(key));
52
53 if (response.getExtensions() != null)
54 {
55 String value = ExtensionConfig.toHeaderValue(response.getExtensions());
56 if (value != null)
57 {
58 response.addHeader("Sec-WebSocket-Extensions",value);
59 }
60 }
61
62 request.complete();
63
64 response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
65 response.complete();
66 }
67 }