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.ServletException;
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletResponse;
26
27 import org.eclipse.jetty.server.Request;
28 import org.eclipse.jetty.server.handler.HandlerWrapper;
29 import org.eclipse.jetty.websocket.server.pathmap.PathMappings;
30 import org.eclipse.jetty.websocket.server.pathmap.PathMappings.MappedResource;
31 import org.eclipse.jetty.websocket.server.pathmap.PathSpec;
32 import org.eclipse.jetty.websocket.servlet.WebSocketCreator;
33
34 public class WebSocketUpgradeHandlerWrapper extends HandlerWrapper implements MappedWebSocketCreator
35 {
36 private PathMappings<WebSocketCreator> pathmap = new PathMappings<>();
37 private final WebSocketServerFactory factory;
38
39 public WebSocketUpgradeHandlerWrapper()
40 {
41 factory = new WebSocketServerFactory();
42 }
43
44 @Override
45 public void addMapping(PathSpec spec, WebSocketCreator creator)
46 {
47 pathmap.put(spec,creator);
48 }
49
50 @Override
51 public PathMappings<WebSocketCreator> getMappings()
52 {
53 return pathmap;
54 }
55
56 @Override
57 public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
58 {
59 if (factory.isUpgradeRequest(request,response))
60 {
61 MappedResource<WebSocketCreator> resource = pathmap.getMatch(target);
62 if (resource == null)
63 {
64
65 response.sendError(HttpServletResponse.SC_NOT_FOUND,"No websocket endpoint matching path: " + target);
66 return;
67 }
68
69 WebSocketCreator creator = resource.getResource();
70
71
72 request.setAttribute(PathSpec.class.getName(),resource);
73
74
75 if (factory.acceptWebSocket(creator,request,response))
76 {
77
78 return;
79 }
80
81
82
83
84 if (response.isCommitted())
85 {
86
87 return;
88 }
89 }
90 super.handle(target,baseRequest,request,response);
91 }
92 }