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
28
29
30
31 public class HandshakeRFC6455 implements WebSocketHandshake
32 {
33
34 public static final int VERSION = 13;
35
36 @Override
37 public void doHandshakeResponse(ServletWebSocketRequest request, ServletWebSocketResponse response) throws IOException
38 {
39 String key = request.getHeader("Sec-WebSocket-Key");
40
41 if (key == null)
42 {
43 throw new IllegalStateException("Missing request header 'Sec-WebSocket-Key'");
44 }
45
46
47 response.setHeader("Upgrade","WebSocket");
48 response.addHeader("Connection","Upgrade");
49 response.addHeader("Sec-WebSocket-Accept",AcceptHash.hashKey(key));
50
51 if (response.getAcceptedSubProtocol() != null)
52 {
53 response.addHeader("Sec-WebSocket-Protocol",response.getAcceptedSubProtocol());
54 }
55
56 if (response.getExtensions() != null)
57 {
58 for (ExtensionConfig ext : response.getExtensions())
59 {
60 response.addHeader("Sec-WebSocket-Extensions",ext.getParameterizedName());
61 }
62 }
63
64 response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
65 }
66 }