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 import javax.servlet.http.HttpServletResponse;
23
24 import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig;
25 import org.eclipse.jetty.websocket.common.AcceptHash;
26 import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
27 import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
28
29
30
31
32 public class HandshakeRFC6455 implements WebSocketHandshake
33 {
34
35 public static final int VERSION = 13;
36
37 @Override
38 public void doHandshakeResponse(ServletUpgradeRequest request, ServletUpgradeResponse response) throws IOException
39 {
40 String key = request.getHeader("Sec-WebSocket-Key");
41
42 if (key == null)
43 {
44 throw new IllegalStateException("Missing request header 'Sec-WebSocket-Key'");
45 }
46
47
48 response.setHeader("Upgrade","WebSocket");
49 response.addHeader("Connection","Upgrade");
50 response.addHeader("Sec-WebSocket-Accept",AcceptHash.hashKey(key));
51
52 if (response.getExtensions() != null)
53 {
54 String value = ExtensionConfig.toHeaderValue(response.getExtensions());
55 if (value != null)
56 {
57 response.addHeader("Sec-WebSocket-Extensions",value);
58 }
59 }
60
61 request.complete();
62
63 response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
64 response.complete();
65 }
66 }