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.getAcceptedSubProtocol() != null)
54 {
55 response.addHeader("Sec-WebSocket-Protocol",response.getAcceptedSubProtocol());
56 }
57
58 if (response.getExtensions() != null)
59 {
60 for (ExtensionConfig ext : response.getExtensions())
61 {
62 response.addHeader("Sec-WebSocket-Extensions",ext.getParameterizedName());
63 }
64 }
65
66 response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
67 }
68 }