0

With this logs:

WebSocket connection to 'wss://xxxxxx.net/' failed: WebSocket opening handshake was canceled"

"TransportWebSocket.errorHandler - Error {}"

"TransportWebSocket.closeHandler - Error {"code":1006,"text":""}"

Please help with this problem.

sp.external.TransportWebSocket = function () {
        var self = this;
        var socket = null;
        var isOpen = false;
        var listSendMsg = [];

        this.openHandler = null;
        this.closeHandler = null;
        this.messageHandler = null;
        this.errorHandler = null;
        this.serverURL = '';

        this.send = function (_data, _highPrioritetFlag) {
            utils.logger.debug('TransportWebSocket', 'send', 'Open status:' + isOpen);

            _highPrioritetFlag = _highPrioritetFlag || false;

            if (isOpen) {
                if (_data && typeof _data === 'object') {
                    try {
                        socket.send(JSON.stringify(_data));
                    }
                    catch (error) {
                        throw new Error('Invalid JSON stringify');
                    }
                }
                else {
                    throw new Error('The data sent must be an object');
                }
            }
            else {
                if (_highPrioritetFlag) {
                    listSendMsg.unshift(_data);
                }
                else {
                    listSendMsg.push(_data);
                }

                openSocket();
            }
        };

        this.reopen = function () {
            utils.logger.debug('TransportWebSocket', 'reopen');
            openSocket();
        };

        this.close = function (_code) {
            utils.logger.debug('TransportWebSocket', 'close');
            socket.close(_code);
        };

        function procListMsg() {
            utils.logger.debug('TransportWebSocket', 'procListMsg', 'Processing buffer messages, items:' + listSendMsg.length);
            if (listSendMsg.length > 0) {
                self.send(listSendMsg.shift());
                setTimeout(procListMsg, 20);
            }
        }

        function openHandler() {
            utils.logger.debug('TransportWebSocket', 'openHandler', 'WebSocket.readyState:' + socket.readyState);
            if (socket.readyState === WebSocket.OPEN) {
                isOpen = true;

                procListMsg();

                if (self.openHandler) {
                    self.openHandler();
                }
            }
        }

        function closeHandler(error) {
            utils.logger.debug('TransportWebSocket', 'closeHandler', 'Error', {code: error.code, text: error.reason});
            isOpen = false;

            if (socket.readyState === WebSocket.CLOSED) {

                if (self.closeHandler) {
                    self.closeHandler(error);
                }
            }
        }

        function errorHandler(error) {
            utils.logger.debug('TransportWebSocket', 'errorHandler', 'Error', {code: error.code, text: error.reason});
            isOpen = false;

            if (self.errorHandler) {
                self.errorHandler(error);
            }
        }

        function messageHandler(e) {
            var msg = null;

            if (self.messageHandler) {
                try {
                    msg = JSON.parse(e.data);
                }
                catch (error) {
                    throw new Error('Invalid JSON format in response: ' + e.data);
                }

                self.messageHandler(msg);
            }
        }

        function openSocket() {
            utils.logger.debug('TransportWebSocket', 'openSocket', 'Opening');
            socket = new WebSocket(self.serverURL);
            socket.onopen = openHandler;
            socket.onclose = closeHandler;
            socket.onmessage = messageHandler;
            socket.onerror = errorHandler;
        }
    };

1 Answers1

0

I don't know if you have solved this issue, but for people encountering the same trouble and who find this thread, you may check this cordova "release" behaves differently to "debug" regarding SSL

In short, modify the file that is making the behavior different between debug and release: platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java

Comment out the content of the method onReceivedSslError and replace it with

handler.proceed();
return;
Kaixin
  • 103
  • 2
  • 8