diff --git a/HTML5-frontend/ndt-browser-client.js b/HTML5-frontend/ndt-browser-client.js
index 6288d5a..b9b430f 100644
--- a/HTML5-frontend/ndt-browser-client.js
+++ b/HTML5-frontend/ndt-browser-client.js
@@ -31,6 +31,7 @@ function NDTjs(server, serverPort, serverProtocol, serverPath, callbacks,
'onprogress': function () { return false; },
'onfinish': function () { return false; },
'onerror': function () { return false; },
+ 'onlog': function () { return false; },
};
} else {
this.callbacks = callbacks;
@@ -76,6 +77,7 @@ NDTjs.prototype.logger = function (logMessage, debugging) {
debugging = debugging || false;
if (debugging === true) {
console.log(logMessage);
+ this.callbacks.onlog(logMessage);
}
};
@@ -198,9 +200,79 @@ NDTjs.prototype.TestFailureException = function (message) {
*/
NDTjs.prototype.createWebsocket = function (serverProtocol, serverAddress,
serverPort, urlPath, protocol) {
- var createdWebsocket = new WebSocket(serverProtocol + '://' +
- serverAddress + ':' + serverPort +
- urlPath, protocol);
+ var that = this;
+ var ws_str = serverProtocol + '://' +
+ serverAddress + ':' + serverPort +
+ urlPath;
+ var createdWebsocket = new WebSocket(ws_str, protocol);
+ // did we succeed? If not, call onerror
+ createdWebsocket.onerror = function (event) {
+ that.callbacks.onerror( 'Error in '+protocol+' websocket '+ws_str ) ;
+ };
+ // if we succeeded log it
+ createdWebsocket.onopen = function (event) {
+ that.logger( 'websocket '+protocol+' opened: '+ws_str ) ;
+ };
+ // http://stackoverflow.com/questions/18803971/websocket-onerror-how-to-read-error-description
+ // and http://tools.ietf.org/html/rfc6455#section-7.4.1
+ createdWebsocket.onclose = function (event) {
+ var message;
+ if ( ( event.code == 1006 ) && ( ( protocol == 'c2s' ) || ( protocol == 's2c' ) ) ) {
+ // it is observed that even in successful measurements the c2s and s2c
+ // connections terminate with 1006. So we shoulnd't throw an error in that
+ // specific case. If the control socket is alive, everything is probably ok
+ return;
+ }
+ switch ( event.code ) {
+ case 1000:
+ message = 'normal closure';
+ return; // everything is normal
+ break;
+ case 1001:
+ message = 'endpoint went away';
+ break;
+ case 1002:
+ message = 'endpoint terminated the connection due to a protocol error';
+ break;
+ case 1003:
+ message = 'unacceptable type of data by endpoint';
+ break;
+ case 1004:
+ message = 'reserved';
+ break;
+ case 1005:
+ message = 'no status code was actually present';
+ break;
+ case 1006:
+ message = 'connection closed abnormally, e.g. without sending or receiving a Close control frame';
+ break;
+ case 1007:
+ message = 'endpoint received data inconsistent with message type';
+ break;
+ case 1008:
+ message = 'endpoint received data that violate its policy or otherwise data that it didn\'t like';
+ break;
+ case 1009:
+ message = 'endpoint received a message too big to process';
+ break;
+ case 1010:
+ message = 'endpoint terminated the connection because server didn\'t support extension';
+ break;
+ case 1011:
+ message = 'server encountered an unexpected condition';
+ break;
+ case 1015:
+ message = 'TLS handshake failure';
+ break;
+ default:
+ message = 'reason '+event.code+' unknown';
+ }
+ var err_str = 'error '+event.code+' ('+message+') (reason:'+event.reason+
+ ' clean: '+event.wasClean+') on '+protocol+' websocket '+
+ ws_str+'. See http://tools.ietf.org/html/rfc6455#section-7.4.1';
+ console.log(err_str);
+ throw that.TestFailureException(err_str);
+ };
createdWebsocket.binaryType = 'arraybuffer';
return createdWebsocket;
};
diff --git a/HTML5-frontend/ndt-wrapper-ww.js b/HTML5-frontend/ndt-wrapper-ww.js
index 7fecc25..3ba0963 100644
--- a/HTML5-frontend/ndt-wrapper-ww.js
+++ b/HTML5-frontend/ndt-wrapper-ww.js
@@ -59,7 +59,13 @@ function startNDT(hostname, port, protocol, path, update_interval) {
'cmd': 'onerror',
'error_message': error_message
});
- }
+ },
+ 'onlog': function(message) {
+ self.postMessage({
+ 'cmd': 'onlog',
+ 'message': message,
+ });
+ },
};
var client = new NDTjs(hostname, port, protocol, path, callbacks,