1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.websocket.servlet;
20
21 import java.io.IOException;
22 import java.util.List;
23 import java.util.Map;
24 import javax.servlet.http.HttpServletResponse;
25
26 import org.eclipse.jetty.websocket.api.UpgradeResponse;
27 import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig;
28
29
30
31
32 public class ServletUpgradeResponse extends UpgradeResponse
33 {
34 private HttpServletResponse response;
35 private boolean extensionsNegotiated = false;
36 private boolean subprotocolNegotiated = false;
37
38 public ServletUpgradeResponse(HttpServletResponse response)
39 {
40 this.response = response;
41 }
42
43 @Override
44 public int getStatusCode()
45 {
46 return response.getStatus();
47 }
48
49 public void setStatus(int status)
50 {
51 response.setStatus(status);
52 }
53
54 @Override
55 public String getStatusReason()
56 {
57 throw new UnsupportedOperationException("Server cannot get Status Reason Message");
58 }
59
60 public boolean isCommitted()
61 {
62 return response.isCommitted();
63 }
64
65 public boolean isExtensionsNegotiated()
66 {
67 return extensionsNegotiated;
68 }
69
70 public boolean isSubprotocolNegotiated()
71 {
72 return subprotocolNegotiated;
73 }
74
75 public void sendError(int statusCode, String message) throws IOException
76 {
77 setSuccess(false);
78 commitHeaders();
79 response.sendError(statusCode, message);
80 response = null;
81 }
82
83 @Override
84 public void sendForbidden(String message) throws IOException
85 {
86 setSuccess(false);
87 commitHeaders();
88 response.sendError(HttpServletResponse.SC_FORBIDDEN, message);
89 response = null;
90 }
91
92 @Override
93 public void setAcceptedSubProtocol(String protocol)
94 {
95 super.setAcceptedSubProtocol(protocol);
96 subprotocolNegotiated = true;
97 }
98
99 @Override
100 public void setExtensions(List<ExtensionConfig> extensions)
101 {
102 super.setExtensions(extensions);
103 extensionsNegotiated = true;
104 }
105
106 public void complete()
107 {
108 commitHeaders();
109 response = null;
110 }
111
112 private void commitHeaders()
113 {
114
115 for (Map.Entry<String, List<String>> entry : getHeaders().entrySet())
116 {
117 for (String value : entry.getValue())
118 {
119 response.addHeader(entry.getKey(), value);
120 }
121 }
122 }
123 }