From 5a21d6356efa0176cf32d097777979154c1dd2ee Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 2 Apr 2012 14:55:56 -0400 Subject: [PATCH] Detect and repair multipart/mixed message delivery errors For unknown reasons, the Content-Type header will occasionally be included in the XHR.responseText for multipart/mixed messages. When this happens, strip the header and newlines from the message body and re-parse. Signed-off-by: Bill Erickson Signed-off-by: Dan Scott --- src/javascript/opensrf.js | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/javascript/opensrf.js b/src/javascript/opensrf.js index dfff52a..c0e454c 100644 --- a/src/javascript/opensrf.js +++ b/src/javascript/opensrf.js @@ -388,11 +388,43 @@ OpenSRF.Stack = function() { // global inbound message queue OpenSRF.Stack.queue = []; +// XXX testing +function log(msg) { + try { + dump(msg + '\n'); // xulrunner + } catch(E) { + console.log(msg); + } +} + OpenSRF.Stack.push = function(net_msg, callbacks) { var ses = OpenSRF.Session.find_session(net_msg.thread); if(!ses) return; ses.remote_id = net_msg.from; - osrf_msgs = JSON2js(net_msg.body); + osrf_msgs = []; + + try { + osrf_msgs = JSON2js(net_msg.body); + + } catch(E) { + log('Error parsing OpenSRF message body as JSON: ' + net_msg.body + '\n' + E); + + /** UGH + * For unknown reasons, the Content-Type header will occasionally + * be included in the XHR.responseText for multipart/mixed messages. + * When this happens, strip the header and newlines from the message + * body and re-parse. + */ + net_msg.body = net_msg.body.replace(/^.*\n\n/, ''); + log('Cleaning up and retrying...'); + + try { + osrf_msgs = JSON2js(net_msg.body); + } catch(E2) { + log('Unable to clean up message, giving up: ' + net_msg.body); + return; + } + } // push the latest responses onto the end of the inbound message queue for(var i = 0; i < osrf_msgs.length; i++) -- 2.43.2