1 module hunt.http.codec.websocket.model.UpgradeRequestAdapter;
2 
3 import hunt.http.Cookie;
4 import hunt.net.util.HttpURI;
5 import hunt.text.QuoteUtil;
6 
7 // dfmt off
8 version(WITH_HUNT_SECURITY) {
9     // import hunt.security.Principal;
10 }
11 // dfmt on
12 
13 import hunt.http.codec.websocket.utils.HeaderValueGenerator;
14 
15 // class UpgradeRequestAdapter : UpgradeRequest {
16 //     private HttpURI requestURI;
17 //     private List<string> subProtocols = new ArrayList<>(1);
18 //     private List<ExtensionConfig> extensions = new ArrayList<>(1);
19 //     private List<Cookie> cookies = new ArrayList<>(1);
20 //     private Map<string, List<string>> headers = new TreeMap<>(string.CASE_INSENSITIVE_ORDER);
21 //     private Map<string, List<string>> parameters = new HashMap<>(1);
22 //     private Object session;
23 //     private string httpVersion;
24 //     private string method;
25 //     private string host;
26 //     private bool secure;
27 
28 //     protected this() {
29 //         /* anonymous, no requestURI, upgrade request */
30 //     }
31 
32 //     this(string requestURI) {
33 //         this(new HttpURI(requestURI));
34 //     }
35 
36 //     this(HttpURI requestURI) {
37 //         setRequestURI(requestURI);
38 //     }
39 
40 //     override
41 //     void addExtensions(ExtensionConfig[] configs...) {
42 //         Collections.addAll(extensions, configs);
43 //     }
44 
45 //     override
46 //     void addExtensions(string[] configs...) {
47 //         foreach (string config ; configs) {
48 //             extensions.add(ExtensionConfig.parse(config));
49 //         }
50 //     }
51 
52 //     override
53 //     List<Cookie> getCookies() {
54 //         return cookies;
55 //     }
56 
57 //     override
58 //     List<ExtensionConfig> getExtensions() {
59 //         return extensions;
60 //     }
61 
62 //     override
63 //     string getHeader(string name) {
64 //         List<string> values = headers.get(name);
65 //         // no value list
66 //         if (values is null) {
67 //             return null;
68 //         }
69 //         int size = values.size();
70 //         // empty value list
71 //         if (size <= 0) {
72 //             return null;
73 //         }
74 //         // simple return
75 //         if (size == 1) {
76 //             return values.get(0);
77 //         }
78 //         return generateHeaderValue(values);
79 //     }
80 
81 //     override
82 //     int getHeaderInt(string name) {
83 //         List<string> values = headers.get(name);
84 //         // no value list
85 //         if (values is null) {
86 //             return -1;
87 //         }
88 //         int size = values.size();
89 //         // empty value list
90 //         if (size <= 0) {
91 //             return -1;
92 //         }
93 //         // simple return
94 //         if (size == 1) {
95 //             return Integer.parseInt(values.get(0));
96 //         }
97 //         throw new NumberFormatException("Cannot convert multi-value header into int");
98 //     }
99 
100 //     override
101 //     Map<string, List<string>> getHeaders() {
102 //         return headers;
103 //     }
104 
105 //     override
106 //     List<string> getHeaders(string name) {
107 //         return headers.get(name);
108 //     }
109 
110 //     override
111 //     string getHost() {
112 //         return host;
113 //     }
114 
115 //     override
116 //     string getHttpVersion() {
117 //         return httpVersion;
118 //     }
119 
120 //     override
121 //     string getMethod() {
122 //         return method;
123 //     }
124 
125 //     override
126 //     string getOrigin() {
127 //         return getHeader("Origin");
128 //     }
129 
130 //     /**
131 //      * Returns a map of the query parameters of the request.
132 //      *
133 //      * @return a unmodifiable map of query parameters of the request.
134 //      */
135 //     override
136 //     Map<string, List<string>> getParameterMap() {
137 //         return Collections.unmodifiableMap(parameters);
138 //     }
139 
140 //     override
141 //     string getProtocolVersion() {
142 //         string version = getHeader("Sec-WebSocket-Version");
143 //         if (version is null) {
144 //             return "13"; // Default
145 //         }
146 //         return version;
147 //     }
148 
149 //     override
150 //     string getQueryString() {
151 //         return requestURI.getQuery();
152 //     }
153 
154 //     override
155 //     HttpURI getRequestURI() {
156 //         return requestURI;
157 //     }
158 
159 //     /**
160 //      * Access the Servlet HTTP Session (if present)
161 //      * <p>
162 //      * Note: Never present on a Client UpgradeRequest.
163 //      *
164 //      * @return the Servlet HttpSession on server side UpgradeRequests
165 //      */
166 //     override
167 //     Object getSession() {
168 //         return session;
169 //     }
170 
171 //     override
172 //     List<string> getSubProtocols() {
173 //         return subProtocols;
174 //     }
175 
176 //     /**
177 //      * Get the User Principal for this request.
178 //      * <p>
179 //      * Only applicable when using UpgradeRequest from server side.
180 //      *
181 //      * @return the user principal
182 //      */
183 //     override
184 //     Principal getUserPrincipal() {
185 //         // Server side should override to implement
186 //         return null;
187 //     }
188 
189 //     override
190 //     bool hasSubProtocol(string test) {
191 //         for (string protocol : subProtocols) {
192 //             if (protocol.equalsIgnoreCase(test)) {
193 //                 return true;
194 //             }
195 //         }
196 //         return false;
197 //     }
198 
199 //     override
200 //     bool isOrigin(string test) {
201 //         return test.equalsIgnoreCase(getOrigin());
202 //     }
203 
204 //     override
205 //     bool isSecure() {
206 //         return secure;
207 //     }
208 
209 //     override
210 //     void setCookies(List<Cookie> cookies) {
211 //         this.cookies.clear();
212 //         if (cookies !is null && !cookies.isEmpty()) {
213 //             this.cookies.addAll(cookies);
214 //         }
215 //     }
216 
217 //     override
218 //     void setExtensions(List<ExtensionConfig> configs) {
219 //         this.extensions.clear();
220 //         if (configs !is null) {
221 //             this.extensions.addAll(configs);
222 //         }
223 //     }
224 
225 //     override
226 //     void setHeader(string name, List<string> values) {
227 //         headers.put(name, values);
228 //     }
229 
230 //     override
231 //     void setHeader(string name, string value) {
232 //         List<string> values = new ArrayList<>();
233 //         values.add(value);
234 //         setHeader(name, values);
235 //     }
236 
237 //     override
238 //     void setHeaders(Map<string, List<string>> headers) {
239 //         headers.clear();
240 
241 //         for (Map.Entry<string, List<string>> entry : headers.entrySet()) {
242 //             string name = entry.getKey();
243 //             List<string> values = entry.getValue();
244 //             setHeader(name, values);
245 //         }
246 //     }
247 
248 //     override
249 //     void setHttpVersion(string httpVersion) {
250 //         this.httpVersion = httpVersion;
251 //     }
252 
253 //     override
254 //     void setMethod(string method) {
255 //         this.method = method;
256 //     }
257 
258 //     protected void setParameterMap(Map<string, List<string>> parameters) {
259 //         this.parameters.clear();
260 //         this.parameters.putAll(parameters);
261 //     }
262 
263 //     override
264 //     void setRequestURI(HttpURI uri) {
265 //         this.requestURI = uri;
266 //         string scheme = uri.getScheme();
267 //         if ("ws".equalsIgnoreCase(scheme)) {
268 //             secure = false;
269 //         } else if ("wss".equalsIgnoreCase(scheme)) {
270 //             secure = true;
271 //         } else {
272 //             throw new IllegalArgumentException("URI scheme must be 'ws' or 'wss'");
273 //         }
274 //         this.host = this.requestURI.getHost();
275 //         this.parameters.clear();
276 //     }
277 
278 //     override
279 //     void setSession(Object session) {
280 //         this.session = session;
281 //     }
282 
283 //     override
284 //     void setSubProtocols(List<string> subProtocols) {
285 //         this.subProtocols.clear();
286 //         if (subProtocols !is null) {
287 //             this.subProtocols.addAll(subProtocols);
288 //         }
289 //     }
290 
291 //     /**
292 //      * Set Sub Protocol request list.
293 //      *
294 //      * @param protocols the sub protocols desired
295 //      */
296 //     override
297 //     void setSubProtocols(string... protocols) {
298 //         subProtocols.clear();
299 //         Collections.addAll(subProtocols, protocols);
300 //     }
301 // }