From 705599ff6aa29857e8ed1b3da11e6e8ba05e9aa9 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Tue, 12 Jun 2018 12:12:45 -0400 Subject: [PATCH] LP#1776510 JS libs handle transport errors Teach the websocket client code to look for the transport_error flag applied to the websocket wrapper message by the websocket gateway when a request for an unavilable service is made. When encountered, fire the transport or generic error handler callbacks, if available. Avoid any attempts to further process the message. Signed-off-by: Bill Erickson Signed-off-by: Galen Charlton --- src/javascript/opensrf.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/javascript/opensrf.js b/src/javascript/opensrf.js index 394cddd..e18efa5 100644 --- a/src/javascript/opensrf.js +++ b/src/javascript/opensrf.js @@ -361,6 +361,29 @@ OpenSRF.Session.prototype.setup_single_ws = function() { "Error parsing JSON in shared WS response: " + msg); throw E; } + + if (msg.transport_error) { + // Websockets gateway returns bounced messages (e.g. for + // requets to unavailable services) with a transport_error + // flag set. + console.error( + 'Websocket request failed with a transport error', msg); + + var ses = OpenSRF.Session.find_session(msg.thread); + if (ses) { + if (msg.osrf_msg && msg.osrf_msg[0]) { + var req = ses.find_request(msg.osrf_msg[0].threadTrace()); + if (req) { + var handler = req.ontransporterror || req.onerror; + if (handler) { + handler('Service ' + ses.service + ' unavailable'); + } + } + } + } + return; // No viable error handlers + } + OpenSRF.Stack.push( new OpenSRF.NetMessage( null, null, msg.thread, null, msg.osrf_msg) -- 2.43.2