rfb: Allow port to be optionally appended to URI

Supports server configurations that might prefer wss:// connections
on the default port, then proxies them through the web server to the
VNC server.

This proxy configuration is helpful on servers using self-signed
certificates.  Accessing the https://host/vnc_auto.html page and
adding an exception for that host is sufficient to also satisfy the
wss://host/ request, unlike requests to wss://host:port/ which
may require an extra certificate exception.
This commit is contained in:
Kyle Russell 2016-11-04 20:52:46 -04:00
parent 38f3d92c5e
commit 1a50f6809f
2 changed files with 15 additions and 12 deletions

View File

@ -273,9 +273,9 @@
this._rfb_password = (password !== undefined) ? password : ""; this._rfb_password = (password !== undefined) ? password : "";
this._rfb_path = (path !== undefined) ? path : ""; this._rfb_path = (path !== undefined) ? path : "";
if (!this._rfb_host || !this._rfb_port) { if (!this._rfb_host) {
return this._fail( return this._fail(
_("Must set host and port")); _("Must set host"));
} }
this._rfb_init_state = ''; this._rfb_init_state = '';
@ -379,7 +379,12 @@
uri = this._encrypt ? 'wss' : 'ws'; uri = this._encrypt ? 'wss' : 'ws';
} }
uri += '://' + this._rfb_host + ':' + this._rfb_port + '/' + this._rfb_path; uri += '://' + this._rfb_host;
if(this._rfb_port) {
uri += ':' + this._rfb_port;
}
uri += '/' + this._rfb_path;
Util.Info("connecting to " + uri); Util.Info("connecting to " + uri);
try { try {

View File

@ -81,15 +81,6 @@ describe('Remote Frame Buffer Protocol Client', function() {
expect(client._updateConnectionState).to.not.have.been.called; expect(client._updateConnectionState).to.not.have.been.called;
expect(client._rfb_connection_state).to.equal(''); expect(client._rfb_connection_state).to.equal('');
}); });
it('should not try to connect if we are missing a port', function () {
client._fail = sinon.spy();
client._rfb_connection_state = '';
client.connect('abc');
expect(client._fail).to.have.been.calledOnce;
expect(client._updateConnectionState).to.not.have.been.called;
expect(client._rfb_connection_state).to.equal('');
});
}); });
describe('#disconnect', function () { describe('#disconnect', function () {
@ -487,6 +478,13 @@ describe('Remote Frame Buffer Protocol Client', function() {
client._updateConnectionState('connecting'); client._updateConnectionState('connecting');
expect(client._sock.open).to.have.been.calledWith('ws://HOST:8675/PATH'); expect(client._sock.open).to.have.been.calledWith('ws://HOST:8675/PATH');
}); });
it('should not include a port in the uri if not specified in connect', function () {
sinon.spy(client._sock, 'open');
client.set_encrypt(true);
client.connect('HOST', undefined)
expect(client._sock.open).to.have.been.calledWith('wss://HOST/');
});
}); });
describe('disconnecting', function () { describe('disconnecting', function () {