2121import java .util .Map ;
2222
2323import javax .servlet .ServletException ;
24- import javax .servlet .UnavailableException ;
2524
2625import org .apache .cloudstack .framework .websocket .server .common .WebSocketHandler ;
2726import org .apache .cloudstack .framework .websocket .server .common .WebSocketRouter ;
3130import org .apache .logging .log4j .LogManager ;
3231import org .apache .logging .log4j .Logger ;
3332import org .eclipse .jetty .websocket .api .Session ;
33+ import org .eclipse .jetty .websocket .api .UpgradeRequest ;
3434import org .eclipse .jetty .websocket .servlet .ServletUpgradeRequest ;
3535import org .eclipse .jetty .websocket .servlet .ServletUpgradeResponse ;
3636import org .eclipse .jetty .websocket .servlet .WebSocketCreator ;
@@ -63,16 +63,13 @@ public void init() throws ServletException {
6363 LOGGER .info ("Initializing JettyWebSocketServlet" );
6464 if (!isWebSocketServletEnabled ()) {
6565 enabled = false ;
66- String msg = "WebSocket Server is not enabled, embedded WebSocket Server will not be running" ;
67- LOGGER .info (msg );
68- throw new UnavailableException (msg );
66+ LOGGER .info ("WebSocket Server is not enabled, embedded WebSocket Server will not be running" );
6967 }
7068 Integer port = getWebSocketServletPort ();
7169 if (port == null ) {
7270 enabled = false ;
73- String msg = "WebSocket Server port is configured, embedded WebSocket Server will not be running" ;
74- LOGGER .info (msg );
75- throw new UnavailableException (msg );
71+ LOGGER .info ("WebSocket Server port is configured, embedded WebSocket Server will not be running" );
72+ return ;
7673 }
7774 enabled = true ;
7875 LOGGER .info ("Embedded WebSocket Server initialized at {}/* with port: {}" ,
@@ -155,24 +152,31 @@ private Map<String, String> parse(String q) {
155152 }
156153
157154 @ Override
158- public void onWebSocketConnect (Session jettySess ) {
159- super .onWebSocketConnect (jettySess );
160- this .session = JettyWebSocketSession .adapt (jettySess , routePath , parse (rawQuery ));
155+ public void onWebSocketConnect (Session jettySession ) {
156+ super .onWebSocketConnect (jettySession );
157+ this .session = JettyWebSocketSession .adapt (jettySession , routePath , parse (rawQuery ));
158+ UpgradeRequest request = jettySession .getUpgradeRequest ();
159+ String remoteAddr = request .getHeader ("X-Forwarded-For" );
160+ if (remoteAddr == null ) {
161+ remoteAddr = jettySession .getRemoteAddress ().getAddress ().getHostAddress ();
162+ }
163+ this .session .setAttr (WebSocketSession .ATTR_REMOTE_ADDR , remoteAddr );
161164 try {
165+
162166 handler .onOpen (session );
163167 } catch (Throwable t ) {
164168 try {
165169 handler .onError (session , t );
166170 } finally {
167- jettySess .close ();
171+ jettySession .close ();
168172 }
169173 }
170174 }
171175
172176 @ Override
173177 public void onWebSocketText (String message ) {
174178 try {
175- handler .onText (session , message );
179+ handler .onTextMessage (session , message );
176180 } catch (Throwable t ) {
177181 handler .onError (session , t );
178182 }
@@ -181,7 +185,7 @@ public void onWebSocketText(String message) {
181185 @ Override
182186 public void onWebSocketBinary (byte [] payload , int offset , int len ) {
183187 try {
184- handler .onBinary (session , java .nio .ByteBuffer .wrap (payload , offset , len ));
188+ handler .onBinaryMessage (session , java .nio .ByteBuffer .wrap (payload , offset , len ));
185189 } catch (Throwable t ) {
186190 handler .onError (session , t );
187191 }
@@ -203,4 +207,4 @@ public void onWebSocketError(Throwable cause) {
203207 } finally { /* no-op */ }
204208 }
205209 }
206- }
210+ }
0 commit comments