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