Standardize on camelCase for functions in RFB

pull/36/head
Samuel Mannehed 5 years ago committed by Lauri Kasanen
parent eff38d47f9
commit 5a81223d96

@ -227,7 +227,7 @@ export default class RFB extends EventTargetMixin {
this._sock = new Websock(); this._sock = new Websock();
this._sock.on('message', () => { this._sock.on('message', () => {
this._handle_message(); this._handleMessage();
}); });
this._sock.on('open', () => { this._sock.on('open', () => {
if ((this._rfbConnectionState === 'connecting') && if ((this._rfbConnectionState === 'connecting') &&
@ -416,7 +416,7 @@ export default class RFB extends EventTargetMixin {
sendCredentials(creds) { sendCredentials(creds) {
this._rfbCredentials = creds; this._rfbCredentials = creds;
setTimeout(this._init_msg.bind(this), 0); setTimeout(this._initMsg.bind(this), 0);
} }
sendCtrlAltDel() { sendCtrlAltDel() {
@ -846,9 +846,9 @@ export default class RFB extends EventTargetMixin {
{ detail: { capabilities: this._capabilities } })); { detail: { capabilities: this._capabilities } }));
} }
_handle_message() { _handleMessage() {
if (this._sock.rQlen === 0) { if (this._sock.rQlen === 0) {
Log.Warn("handle_message called on an empty receive queue"); Log.Warn("handleMessage called on an empty receive queue");
return; return;
} }
@ -861,7 +861,7 @@ export default class RFB extends EventTargetMixin {
if (this._flushing) { if (this._flushing) {
break; break;
} }
if (!this._normal_msg()) { if (!this._normalMsg()) {
break; break;
} }
if (this._sock.rQlen === 0) { if (this._sock.rQlen === 0) {
@ -870,7 +870,7 @@ export default class RFB extends EventTargetMixin {
} }
break; break;
default: default:
this._init_msg(); this._initMsg();
break; break;
} }
} }
@ -946,7 +946,7 @@ export default class RFB extends EventTargetMixin {
// Message Handlers // Message Handlers
_negotiate_protocol_version() { _negotiateProtocolVersion() {
if (this._sock.rQwait("version", 12)) { if (this._sock.rQwait("version", 12)) {
return false; return false;
} }
@ -997,7 +997,7 @@ export default class RFB extends EventTargetMixin {
this._rfbInitState = 'Security'; this._rfbInitState = 'Security';
} }
_negotiate_security() { _negotiateSecurity() {
// Polyfill since IE and PhantomJS doesn't have // Polyfill since IE and PhantomJS doesn't have
// TypedArray.includes() // TypedArray.includes()
function includes(item, array) { function includes(item, array) {
@ -1018,7 +1018,7 @@ export default class RFB extends EventTargetMixin {
this._rfbInitState = "SecurityReason"; this._rfbInitState = "SecurityReason";
this._securityContext = "no security types"; this._securityContext = "no security types";
this._securityStatus = 1; this._securityStatus = 1;
return this._init_msg(); return this._initMsg();
} }
const types = this._sock.rQshiftBytes(numTypes); const types = this._sock.rQshiftBytes(numTypes);
@ -1049,17 +1049,17 @@ export default class RFB extends EventTargetMixin {
this._rfbInitState = "SecurityReason"; this._rfbInitState = "SecurityReason";
this._securityContext = "authentication scheme"; this._securityContext = "authentication scheme";
this._securityStatus = 1; this._securityStatus = 1;
return this._init_msg(); return this._initMsg();
} }
} }
this._rfbInitState = 'Authentication'; this._rfbInitState = 'Authentication';
Log.Debug('Authenticating using scheme: ' + this._rfbAuthScheme); Log.Debug('Authenticating using scheme: ' + this._rfbAuthScheme);
return this._init_msg(); // jump to authentication return this._initMsg(); // jump to authentication
} }
_handle_security_reason() { _handleSecurityReason() {
if (this._sock.rQwait("reason length", 4)) { if (this._sock.rQwait("reason length", 4)) {
return false; return false;
} }
@ -1091,7 +1091,7 @@ export default class RFB extends EventTargetMixin {
} }
// authentication // authentication
_negotiate_xvp_auth() { _negotiateXvpAuth() {
if (!this._rfbCredentials.username || if (!this._rfbCredentials.username ||
!this._rfbCredentials.password || !this._rfbCredentials.password ||
!this._rfbCredentials.target) { !this._rfbCredentials.target) {
@ -1107,11 +1107,11 @@ export default class RFB extends EventTargetMixin {
this._rfbCredentials.target; this._rfbCredentials.target;
this._sock.send_string(xvpAuthStr); this._sock.send_string(xvpAuthStr);
this._rfbAuthScheme = 2; this._rfbAuthScheme = 2;
return this._negotiate_authentication(); return this._negotiateAuthentication();
} }
// VeNCrypt authentication, currently only supports version 0.2 and only Plain subtype // VeNCrypt authentication, currently only supports version 0.2 and only Plain subtype
_negotiate_vencrypt_auth() { _negotiateVeNCryptAuth() {
// waiting for VeNCrypt version // waiting for VeNCrypt version
if (this._rfbVeNCryptState == 0) { if (this._rfbVeNCryptState == 0) {
@ -1198,7 +1198,7 @@ export default class RFB extends EventTargetMixin {
} }
} }
_negotiate_std_vnc_auth() { _negotiateStdVNCAuth() {
if (this._sock.rQwait("auth challenge", 16)) { return false; } if (this._sock.rQwait("auth challenge", 16)) { return false; }
// KasmVNC uses basic Auth, clear the VNC password, which is not used // KasmVNC uses basic Auth, clear the VNC password, which is not used
@ -1212,7 +1212,7 @@ export default class RFB extends EventTargetMixin {
return true; return true;
} }
_negotiate_tight_unix_auth() { _negotiateTightUnixAuth() {
if (this._rfbCredentials.username === undefined || if (this._rfbCredentials.username === undefined ||
this._rfbCredentials.password === undefined) { this._rfbCredentials.password === undefined) {
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
@ -1229,7 +1229,7 @@ export default class RFB extends EventTargetMixin {
return true; return true;
} }
_negotiate_tight_tunnels(numTunnels) { _negotiateTightTunnels(numTunnels) {
const clientSupportedTunnelTypes = { const clientSupportedTunnelTypes = {
0: { vendor: 'TGHT', signature: 'NOTUNNEL' } 0: { vendor: 'TGHT', signature: 'NOTUNNEL' }
}; };
@ -1270,7 +1270,7 @@ export default class RFB extends EventTargetMixin {
} }
} }
_negotiate_tight_auth() { _negotiateTightAuth() {
if (!this._rfbTightVNC) { // first pass, do the tunnel negotiation if (!this._rfbTightVNC) { // first pass, do the tunnel negotiation
if (this._sock.rQwait("num tunnels", 4)) { return false; } if (this._sock.rQwait("num tunnels", 4)) { return false; }
const numTunnels = this._sock.rQshift32(); const numTunnels = this._sock.rQshift32();
@ -1279,7 +1279,7 @@ export default class RFB extends EventTargetMixin {
this._rfbTightVNC = true; this._rfbTightVNC = true;
if (numTunnels > 0) { if (numTunnels > 0) {
this._negotiate_tight_tunnels(numTunnels); this._negotiateTightTunnels(numTunnels);
return false; // wait until we receive the sub auth to continue return false; // wait until we receive the sub auth to continue
} }
} }
@ -1321,10 +1321,10 @@ export default class RFB extends EventTargetMixin {
return true; return true;
case 'STDVVNCAUTH_': // VNC auth case 'STDVVNCAUTH_': // VNC auth
this._rfbAuthScheme = 2; this._rfbAuthScheme = 2;
return this._init_msg(); return this._initMsg();
case 'TGHTULGNAUTH': // UNIX auth case 'TGHTULGNAUTH': // UNIX auth
this._rfbAuthScheme = 129; this._rfbAuthScheme = 129;
return this._init_msg(); return this._initMsg();
default: default:
return this._fail("Unsupported tiny auth scheme " + return this._fail("Unsupported tiny auth scheme " +
"(scheme: " + authType + ")"); "(scheme: " + authType + ")");
@ -1335,7 +1335,7 @@ export default class RFB extends EventTargetMixin {
return this._fail("No supported sub-auth types!"); return this._fail("No supported sub-auth types!");
} }
_negotiate_authentication() { _negotiateAuthentication() {
switch (this._rfbAuthScheme) { switch (this._rfbAuthScheme) {
case 1: // no auth case 1: // no auth
if (this._rfbVersion >= 3.8) { if (this._rfbVersion >= 3.8) {
@ -1343,22 +1343,22 @@ export default class RFB extends EventTargetMixin {
return true; return true;
} }
this._rfbInitState = 'ClientInitialisation'; this._rfbInitState = 'ClientInitialisation';
return this._init_msg(); return this._initMsg();
case 22: // XVP auth case 22: // XVP auth
return this._negotiate_xvp_auth(); return this._negotiateXvpAuth();
case 2: // VNC authentication case 2: // VNC authentication
return this._negotiate_std_vnc_auth(); return this._negotiateStdVNCAuth();
case 16: // TightVNC Security Type case 16: // TightVNC Security Type
return this._negotiate_tight_auth(); return this._negotiateTightAuth();
case 19: // VeNCrypt Security Type case 19: // VeNCrypt Security Type
return this._negotiate_vencrypt_auth(); return this._negotiateVeNCryptAuth();
case 129: // TightVNC UNIX Security Type case 129: // TightVNC UNIX Security Type
return this._negotiate_tight_unix_auth(); return this._negotiateTightUnixAuth();
default: default:
return this._fail("Unsupported auth scheme (scheme: " + return this._fail("Unsupported auth scheme (scheme: " +
@ -1366,7 +1366,7 @@ export default class RFB extends EventTargetMixin {
} }
} }
_handle_security_result() { _handleSecurityResult() {
if (this._sock.rQwait('VNC auth response ', 4)) { return false; } if (this._sock.rQwait('VNC auth response ', 4)) { return false; }
const status = this._sock.rQshift32(); const status = this._sock.rQshift32();
@ -1374,13 +1374,13 @@ export default class RFB extends EventTargetMixin {
if (status === 0) { // OK if (status === 0) { // OK
this._rfbInitState = 'ClientInitialisation'; this._rfbInitState = 'ClientInitialisation';
Log.Debug('Authentication OK'); Log.Debug('Authentication OK');
return this._init_msg(); return this._initMsg();
} else { } else {
if (this._rfbVersion >= 3.8) { if (this._rfbVersion >= 3.8) {
this._rfbInitState = "SecurityReason"; this._rfbInitState = "SecurityReason";
this._securityContext = "security result"; this._securityContext = "security result";
this._securityStatus = status; this._securityStatus = status;
return this._init_msg(); return this._initMsg();
} else { } else {
this.dispatchEvent(new CustomEvent( this.dispatchEvent(new CustomEvent(
"securityfailure", "securityfailure",
@ -1391,7 +1391,7 @@ export default class RFB extends EventTargetMixin {
} }
} }
_negotiate_server_init() { _negotiateServerInit() {
if (this._sock.rQwait("server initialization", 24)) { return false; } if (this._sock.rQwait("server initialization", 24)) { return false; }
/* Screen size */ /* Screen size */
@ -1586,22 +1586,22 @@ export default class RFB extends EventTargetMixin {
* ClientInitialization - not triggered by server message * ClientInitialization - not triggered by server message
* ServerInitialization * ServerInitialization
*/ */
_init_msg() { _initMsg() {
switch (this._rfbInitState) { switch (this._rfbInitState) {
case 'ProtocolVersion': case 'ProtocolVersion':
return this._negotiate_protocol_version(); return this._negotiateProtocolVersion();
case 'Security': case 'Security':
return this._negotiate_security(); return this._negotiateSecurity();
case 'Authentication': case 'Authentication':
return this._negotiate_authentication(); return this._negotiateAuthentication();
case 'SecurityResult': case 'SecurityResult':
return this._handle_security_result(); return this._handleSecurityResult();
case 'SecurityReason': case 'SecurityReason':
return this._handle_security_reason(); return this._handleSecurityReason();
case 'ClientInitialisation': case 'ClientInitialisation':
this._sock.send([this._shared ? 1 : 0]); // ClientInitialisation this._sock.send([this._shared ? 1 : 0]); // ClientInitialisation
@ -1609,7 +1609,7 @@ export default class RFB extends EventTargetMixin {
return true; return true;
case 'ServerInitialisation': case 'ServerInitialisation':
return this._negotiate_server_init(); return this._negotiateServerInit();
default: default:
return this._fail("Unknown init state (state: " + return this._fail("Unknown init state (state: " +
@ -1617,13 +1617,13 @@ export default class RFB extends EventTargetMixin {
} }
} }
_handle_set_colour_map_msg() { _handleSetColourMapMsg() {
Log.Debug("SetColorMapEntries"); Log.Debug("SetColorMapEntries");
return this._fail("Unexpected SetColorMapEntries message"); return this._fail("Unexpected SetColorMapEntries message");
} }
_handle_server_cut_text() { _handleServerCutText() {
Log.Debug("ServerCutText"); Log.Debug("ServerCutText");
if (this._sock.rQwait("ServerCutText header", 7, 1)) { return false; } if (this._sock.rQwait("ServerCutText header", 7, 1)) { return false; }
@ -1807,7 +1807,7 @@ export default class RFB extends EventTargetMixin {
return true; return true;
} }
_handle_server_fence_msg() { _handleServerFenceMsg() {
if (this._sock.rQwait("ServerFence header", 8, 1)) { return false; } if (this._sock.rQwait("ServerFence header", 8, 1)) { return false; }
this._sock.rQskipBytes(3); // Padding this._sock.rQskipBytes(3); // Padding
let flags = this._sock.rQshift32(); let flags = this._sock.rQshift32();
@ -1849,7 +1849,7 @@ export default class RFB extends EventTargetMixin {
return true; return true;
} }
_handle_xvp_msg() { _handleXvpMsg() {
if (this._sock.rQwait("XVP version and message", 3, 1)) { return false; } if (this._sock.rQwait("XVP version and message", 3, 1)) { return false; }
this._sock.rQskipBytes(1); // Padding this._sock.rQskipBytes(1); // Padding
const xvpVer = this._sock.rQshift8(); const xvpVer = this._sock.rQshift8();
@ -1872,7 +1872,7 @@ export default class RFB extends EventTargetMixin {
return true; return true;
} }
_normal_msg() { _normalMsg() {
let msgType; let msgType;
if (this._FBU.rects > 0) { if (this._FBU.rects > 0) {
msgType = 0; msgType = 0;
@ -1891,7 +1891,7 @@ export default class RFB extends EventTargetMixin {
return ret; return ret;
case 1: // SetColorMapEntries case 1: // SetColorMapEntries
return this._handle_set_colour_map_msg(); return this._handleSetColourMapMsg();
case 2: // Bell case 2: // Bell
Log.Debug("Bell"); Log.Debug("Bell");
@ -1901,7 +1901,7 @@ export default class RFB extends EventTargetMixin {
return true; return true;
case 3: // ServerCutText case 3: // ServerCutText
return this._handle_server_cut_text(); return this._handleServerCutText();
case 150: // EndOfContinuousUpdates case 150: // EndOfContinuousUpdates
first = !this._supportsContinuousUpdates; first = !this._supportsContinuousUpdates;
@ -1921,10 +1921,10 @@ export default class RFB extends EventTargetMixin {
return this._handle_server_stats_msg(); return this._handle_server_stats_msg();
case 248: // ServerFence case 248: // ServerFence
return this._handle_server_fence_msg(); return this._handleServerFenceMsg();
case 250: // XVP case 250: // XVP
return this._handle_xvp_msg(); return this._handleXvpMsg();
default: default:
this._fail("Unexpected server message (type " + msgType + ")"); this._fail("Unexpected server message (type " + msgType + ")");
@ -1937,7 +1937,7 @@ export default class RFB extends EventTargetMixin {
this._flushing = false; this._flushing = false;
// Resume processing // Resume processing
if (this._sock.rQlen > 0) { if (this._sock.rQlen > 0) {
this._handle_message(); this._handleMessage();
} }
} }

@ -139,7 +139,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
container = null; container = null;
}); });
function make_rfb(url, options) { function makeRFB(url, options) {
url = url || 'wss://host:8675'; url = url || 'wss://host:8675';
const rfb = new RFB(container, url, options); const rfb = new RFB(container, url, options);
clock.tick(); clock.tick();
@ -171,7 +171,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('#disconnect', function () { describe('#disconnect', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
}); });
it('should go to state "disconnecting" before "disconnected"', function () { it('should go to state "disconnecting" before "disconnected"', function () {
@ -207,7 +207,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('#sendCredentials', function () { describe('#sendCredentials', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
client._rfbConnectionState = 'connecting'; client._rfbConnectionState = 'connecting';
}); });
@ -216,11 +216,11 @@ describe('Remote Frame Buffer Protocol Client', function () {
expect(client._rfbCredentials).to.deep.equal({ password: 'pass' }); expect(client._rfbCredentials).to.deep.equal({ password: 'pass' });
}); });
it('should call init_msg "soon"', function () { it('should call initMsg "soon"', function () {
client._init_msg = sinon.spy(); client._initMsg = sinon.spy();
client.sendCredentials({ password: 'pass' }); client.sendCredentials({ password: 'pass' });
this.clock.tick(5); this.clock.tick(5);
expect(client._init_msg).to.have.been.calledOnce; expect(client._initMsg).to.have.been.calledOnce;
}); });
}); });
}); });
@ -228,7 +228,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('Public API Basic Behavior', function () { describe('Public API Basic Behavior', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
}); });
describe('#sendCtrlAlDel', function () { describe('#sendCtrlAlDel', function () {
@ -408,7 +408,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('Clipping', function () { describe('Clipping', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
container.style.width = '70px'; container.style.width = '70px';
container.style.height = '80px'; container.style.height = '80px';
client.clipViewport = true; client.clipViewport = true;
@ -581,7 +581,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('Scaling', function () { describe('Scaling', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
container.style.width = '70px'; container.style.width = '70px';
container.style.height = '80px'; container.style.height = '80px';
client.scaleViewport = true; client.scaleViewport = true;
@ -664,7 +664,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('Remote resize', function () { describe('Remote resize', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
client._supportsSetDesktopSize = true; client._supportsSetDesktopSize = true;
client.resizeSession = true; client.resizeSession = true;
container.style.width = '70px'; container.style.width = '70px';
@ -797,7 +797,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('#_updateConnectionState', function () { describe('#_updateConnectionState', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
}); });
it('should clear the disconnect timer if the state is not "disconnecting"', function () { it('should clear the disconnect timer if the state is not "disconnecting"', function () {
@ -853,7 +853,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('#_fail', function () { describe('#_fail', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
}); });
it('should close the WebSocket connection', function () { it('should close the WebSocket connection', function () {
@ -904,7 +904,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('connected', function () { describe('connected', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
}); });
it('should result in a connect event if state becomes connected', function () { it('should result in a connect event if state becomes connected', function () {
@ -927,7 +927,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('disconnecting', function () { describe('disconnecting', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
}); });
it('should force disconnect if we do not call Websock.onclose within the disconnection timeout', function () { it('should force disconnect if we do not call Websock.onclose within the disconnection timeout', function () {
@ -993,12 +993,12 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('Protocol Initialization States', function () { describe('Protocol Initialization States', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
client._rfbConnectionState = 'connecting'; client._rfbConnectionState = 'connecting';
}); });
describe('ProtocolVersion', function () { describe('ProtocolVersion', function () {
function send_ver(ver, client) { function sendVer(ver, client) {
const arr = new Uint8Array(12); const arr = new Uint8Array(12);
for (let i = 0; i < ver.length; i++) { for (let i = 0; i < ver.length; i++) {
arr[i+4] = ver.charCodeAt(i); arr[i+4] = ver.charCodeAt(i);
@ -1010,54 +1010,54 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('version parsing', function () { describe('version parsing', function () {
it('should interpret version 003.003 as version 3.3', function () { it('should interpret version 003.003 as version 3.3', function () {
send_ver('003.003', client); sendVer('003.003', client);
expect(client._rfbVersion).to.equal(3.3); expect(client._rfbVersion).to.equal(3.3);
}); });
it('should interpret version 003.006 as version 3.3', function () { it('should interpret version 003.006 as version 3.3', function () {
send_ver('003.006', client); sendVer('003.006', client);
expect(client._rfbVersion).to.equal(3.3); expect(client._rfbVersion).to.equal(3.3);
}); });
it('should interpret version 003.889 as version 3.3', function () { it('should interpret version 003.889 as version 3.3', function () {
send_ver('003.889', client); sendVer('003.889', client);
expect(client._rfbVersion).to.equal(3.3); expect(client._rfbVersion).to.equal(3.3);
}); });
it('should interpret version 003.007 as version 3.7', function () { it('should interpret version 003.007 as version 3.7', function () {
send_ver('003.007', client); sendVer('003.007', client);
expect(client._rfbVersion).to.equal(3.7); expect(client._rfbVersion).to.equal(3.7);
}); });
it('should interpret version 003.008 as version 3.8', function () { it('should interpret version 003.008 as version 3.8', function () {
send_ver('003.008', client); sendVer('003.008', client);
expect(client._rfbVersion).to.equal(3.8); expect(client._rfbVersion).to.equal(3.8);
}); });
it('should interpret version 004.000 as version 3.8', function () { it('should interpret version 004.000 as version 3.8', function () {
send_ver('004.000', client); sendVer('004.000', client);
expect(client._rfbVersion).to.equal(3.8); expect(client._rfbVersion).to.equal(3.8);
}); });
it('should interpret version 004.001 as version 3.8', function () { it('should interpret version 004.001 as version 3.8', function () {
send_ver('004.001', client); sendVer('004.001', client);
expect(client._rfbVersion).to.equal(3.8); expect(client._rfbVersion).to.equal(3.8);
}); });
it('should interpret version 005.000 as version 3.8', function () { it('should interpret version 005.000 as version 3.8', function () {
send_ver('005.000', client); sendVer('005.000', client);
expect(client._rfbVersion).to.equal(3.8); expect(client._rfbVersion).to.equal(3.8);
}); });
it('should fail on an invalid version', function () { it('should fail on an invalid version', function () {
sinon.spy(client, "_fail"); sinon.spy(client, "_fail");
send_ver('002.000', client); sendVer('002.000', client);
expect(client._fail).to.have.been.calledOnce; expect(client._fail).to.have.been.calledOnce;
}); });
}); });
it('should send back the interpreted version', function () { it('should send back the interpreted version', function () {
send_ver('004.000', client); sendVer('004.000', client);
const expectedStr = 'RFB 003.008\n'; const expectedStr = 'RFB 003.008\n';
const expected = []; const expected = [];
@ -1069,18 +1069,18 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
it('should transition to the Security state on successful negotiation', function () { it('should transition to the Security state on successful negotiation', function () {
send_ver('003.008', client); sendVer('003.008', client);
expect(client._rfbInitState).to.equal('Security'); expect(client._rfbInitState).to.equal('Security');
}); });
describe('Repeater', function () { describe('Repeater', function () {
beforeEach(function () { beforeEach(function () {
client = make_rfb('wss://host:8675', { repeaterID: "12345" }); client = makeRFB('wss://host:8675', { repeaterID: "12345" });
client._rfbConnectionState = 'connecting'; client._rfbConnectionState = 'connecting';
}); });
it('should interpret version 000.000 as a repeater', function () { it('should interpret version 000.000 as a repeater', function () {
send_ver('000.000', client); sendVer('000.000', client);
expect(client._rfbVersion).to.equal(0); expect(client._rfbVersion).to.equal(0);
const sentData = client._sock._websocket._get_sent_data(); const sentData = client._sock._websocket._get_sent_data();
@ -1089,8 +1089,8 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
it('should handle two step repeater negotiation', function () { it('should handle two step repeater negotiation', function () {
send_ver('000.000', client); sendVer('000.000', client);
send_ver('003.008', client); sendVer('003.008', client);
expect(client._rfbVersion).to.equal(3.8); expect(client._rfbVersion).to.equal(3.8);
}); });
}); });
@ -1148,10 +1148,10 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should transition to the Authentication state and continue on successful negotiation', function () { it('should transition to the Authentication state and continue on successful negotiation', function () {
client._rfbVersion = 3.7; client._rfbVersion = 3.7;
const authSchemes = [1, 1]; const authSchemes = [1, 1];
client._negotiate_authentication = sinon.spy(); client._negotiateAuthentication = sinon.spy();
client._sock._websocket._receive_data(new Uint8Array(authSchemes)); client._sock._websocket._receive_data(new Uint8Array(authSchemes));
expect(client._rfbInitState).to.equal('Authentication'); expect(client._rfbInitState).to.equal('Authentication');
expect(client._negotiate_authentication).to.have.been.calledOnce; expect(client._negotiateAuthentication).to.have.been.calledOnce;
}); });
}); });
@ -1160,7 +1160,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
client._rfbInitState = 'Security'; client._rfbInitState = 'Security';
}); });
function send_security(type, cl) { function sendSecurity(type, cl) {
cl._sock._websocket._receive_data(new Uint8Array([1, type])); cl._sock._websocket._receive_data(new Uint8Array([1, type]));
} }
@ -1182,20 +1182,20 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should transition straight to SecurityResult on "no auth" (1) for versions >= 3.8', function () { it('should transition straight to SecurityResult on "no auth" (1) for versions >= 3.8', function () {
client._rfbVersion = 3.8; client._rfbVersion = 3.8;
send_security(1, client); sendSecurity(1, client);
expect(client._rfbInitState).to.equal('SecurityResult'); expect(client._rfbInitState).to.equal('SecurityResult');
}); });
it('should transition straight to ServerInitialisation on "no auth" for versions < 3.8', function () { it('should transition straight to ServerInitialisation on "no auth" for versions < 3.8', function () {
client._rfbVersion = 3.7; client._rfbVersion = 3.7;
send_security(1, client); sendSecurity(1, client);
expect(client._rfbInitState).to.equal('ServerInitialisation'); expect(client._rfbInitState).to.equal('ServerInitialisation');
}); });
it('should fail on an unknown auth scheme', function () { it('should fail on an unknown auth scheme', function () {
sinon.spy(client, "_fail"); sinon.spy(client, "_fail");
client._rfbVersion = 3.8; client._rfbVersion = 3.8;
send_security(57, client); sendSecurity(57, client);
expect(client._fail).to.have.been.calledOnce; expect(client._fail).to.have.been.calledOnce;
}); });
@ -1208,7 +1208,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should fire the credentialsrequired event if missing a password', function () { it('should fire the credentialsrequired event if missing a password', function () {
const spy = sinon.spy(); const spy = sinon.spy();
client.addEventListener("credentialsrequired", spy); client.addEventListener("credentialsrequired", spy);
send_security(2, client); sendSecurity(2, client);
const challenge = []; const challenge = [];
for (let i = 0; i < 16; i++) { challenge[i] = i; } for (let i = 0; i < 16; i++) { challenge[i] = i; }
@ -1221,7 +1221,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should encrypt the password with DES and then send it back', function () { it('should encrypt the password with DES and then send it back', function () {
client._rfbCredentials = { password: 'passwd' }; client._rfbCredentials = { password: 'passwd' };
send_security(2, client); sendSecurity(2, client);
client._sock._websocket._get_sent_data(); // skip the choice of auth reply client._sock._websocket._get_sent_data(); // skip the choice of auth reply
const challenge = []; const challenge = [];
@ -1234,7 +1234,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should transition to SecurityResult immediately after sending the password', function () { it('should transition to SecurityResult immediately after sending the password', function () {
client._rfbCredentials = { password: 'passwd' }; client._rfbCredentials = { password: 'passwd' };
send_security(2, client); sendSecurity(2, client);
const challenge = []; const challenge = [];
for (let i = 0; i < 16; i++) { challenge[i] = i; } for (let i = 0; i < 16; i++) { challenge[i] = i; }
@ -1254,16 +1254,16 @@ describe('Remote Frame Buffer Protocol Client', function () {
client._rfbCredentials = { username: 'user', client._rfbCredentials = { username: 'user',
target: 'target', target: 'target',
password: 'password' }; password: 'password' };
client._negotiate_std_vnc_auth = sinon.spy(); client._negotiateStdVNCAuth = sinon.spy();
send_security(22, client); sendSecurity(22, client);
expect(client._negotiate_std_vnc_auth).to.have.been.calledOnce; expect(client._negotiateStdVNCAuth).to.have.been.calledOnce;
}); });
it('should fire the credentialsrequired event if all credentials are missing', function () { it('should fire the credentialsrequired event if all credentials are missing', function () {
const spy = sinon.spy(); const spy = sinon.spy();
client.addEventListener("credentialsrequired", spy); client.addEventListener("credentialsrequired", spy);
client._rfbCredentials = {}; client._rfbCredentials = {};
send_security(22, client); sendSecurity(22, client);
expect(client._rfbCredentials).to.be.empty; expect(client._rfbCredentials).to.be.empty;
expect(spy).to.have.been.calledOnce; expect(spy).to.have.been.calledOnce;
@ -1275,7 +1275,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
client.addEventListener("credentialsrequired", spy); client.addEventListener("credentialsrequired", spy);
client._rfbCredentials = { username: 'user', client._rfbCredentials = { username: 'user',
target: 'target' }; target: 'target' };
send_security(22, client); sendSecurity(22, client);
expect(spy).to.have.been.calledOnce; expect(spy).to.have.been.calledOnce;
expect(spy.args[0][0].detail.types).to.have.members(["username", "password", "target"]); expect(spy.args[0][0].detail.types).to.have.members(["username", "password", "target"]);
@ -1285,9 +1285,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
client._rfbCredentials = { username: 'user', client._rfbCredentials = { username: 'user',
target: 'target', target: 'target',
password: 'password' }; password: 'password' };
client._negotiate_std_vnc_auth = sinon.spy(); client._negotiateStdVNCAuth = sinon.spy();
send_security(22, client); sendSecurity(22, client);
const expected = [22, 4, 6]; // auth selection, len user, len target const expected = [22, 4, 6]; // auth selection, len user, len target
for (let i = 0; i < 10; i++) { expected[i+3] = 'usertarget'.charCodeAt(i); } for (let i = 0; i < 10; i++) { expected[i+3] = 'usertarget'.charCodeAt(i); }
@ -1300,11 +1300,11 @@ describe('Remote Frame Buffer Protocol Client', function () {
beforeEach(function () { beforeEach(function () {
client._rfbInitState = 'Security'; client._rfbInitState = 'Security';
client._rfbVersion = 3.8; client._rfbVersion = 3.8;
send_security(16, client); sendSecurity(16, client);
client._sock._websocket._get_sent_data(); // skip the security reply client._sock._websocket._get_sent_data(); // skip the security reply
}); });
function send_num_str_pairs(pairs, client) { function sendNumStrPairs(pairs, client) {
const data = []; const data = [];
push32(data, pairs.length); push32(data, pairs.length);
@ -1328,57 +1328,57 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should fail if no supported tunnels are listed', function () { it('should fail if no supported tunnels are listed', function () {
sinon.spy(client, "_fail"); sinon.spy(client, "_fail");
send_num_str_pairs([[123, 'OTHR', 'SOMETHNG']], client); sendNumStrPairs([[123, 'OTHR', 'SOMETHNG']], client);
expect(client._fail).to.have.been.calledOnce; expect(client._fail).to.have.been.calledOnce;
}); });
it('should choose the notunnel tunnel type', function () { it('should choose the notunnel tunnel type', function () {
send_num_str_pairs([[0, 'TGHT', 'NOTUNNEL'], [123, 'OTHR', 'SOMETHNG']], client); sendNumStrPairs([[0, 'TGHT', 'NOTUNNEL'], [123, 'OTHR', 'SOMETHNG']], client);
expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 0])); expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 0]));
}); });
it('should choose the notunnel tunnel type for Siemens devices', function () { it('should choose the notunnel tunnel type for Siemens devices', function () {
send_num_str_pairs([[1, 'SICR', 'SCHANNEL'], [2, 'SICR', 'SCHANLPW']], client); sendNumStrPairs([[1, 'SICR', 'SCHANNEL'], [2, 'SICR', 'SCHANLPW']], client);
expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 0])); expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 0]));
}); });
it('should continue to sub-auth negotiation after tunnel negotiation', function () { it('should continue to sub-auth negotiation after tunnel negotiation', function () {
send_num_str_pairs([[0, 'TGHT', 'NOTUNNEL']], client); sendNumStrPairs([[0, 'TGHT', 'NOTUNNEL']], client);
client._sock._websocket._get_sent_data(); // skip the tunnel choice here client._sock._websocket._get_sent_data(); // skip the tunnel choice here
send_num_str_pairs([[1, 'STDV', 'NOAUTH__']], client); sendNumStrPairs([[1, 'STDV', 'NOAUTH__']], client);
expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 1])); expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 1]));
expect(client._rfbInitState).to.equal('SecurityResult'); expect(client._rfbInitState).to.equal('SecurityResult');
}); });
/*it('should attempt to use VNC auth over no auth when possible', function () { /*it('should attempt to use VNC auth over no auth when possible', function () {
client._rfbTightVNC = true; client._rfbTightVNC = true;
client._negotiate_std_vnc_auth = sinon.spy(); client._negotiateStdVNCAuth = sinon.spy();
send_num_str_pairs([[1, 'STDV', 'NOAUTH__'], [2, 'STDV', 'VNCAUTH_']], client); sendNumStrPairs([[1, 'STDV', 'NOAUTH__'], [2, 'STDV', 'VNCAUTH_']], client);
expect(client._sock).to.have.sent([0, 0, 0, 1]); expect(client._sock).to.have.sent([0, 0, 0, 1]);
expect(client._negotiate_std_vnc_auth).to.have.been.calledOnce; expect(client._negotiateStdVNCAuth).to.have.been.calledOnce;
expect(client._rfbAuthScheme).to.equal(2); expect(client._rfbAuthScheme).to.equal(2);
});*/ // while this would make sense, the original code doesn't actually do this });*/ // while this would make sense, the original code doesn't actually do this
it('should accept the "no auth" auth type and transition to SecurityResult', function () { it('should accept the "no auth" auth type and transition to SecurityResult', function () {
client._rfbTightVNC = true; client._rfbTightVNC = true;
send_num_str_pairs([[1, 'STDV', 'NOAUTH__']], client); sendNumStrPairs([[1, 'STDV', 'NOAUTH__']], client);
expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 1])); expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 1]));
expect(client._rfbInitState).to.equal('SecurityResult'); expect(client._rfbInitState).to.equal('SecurityResult');
}); });
it('should accept VNC authentication and transition to that', function () { it('should accept VNC authentication and transition to that', function () {
client._rfbTightVNC = true; client._rfbTightVNC = true;
client._negotiate_std_vnc_auth = sinon.spy(); client._negotiateStdVNCAuth = sinon.spy();
send_num_str_pairs([[2, 'STDV', 'VNCAUTH__']], client); sendNumStrPairs([[2, 'STDV', 'VNCAUTH__']], client);
expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 2])); expect(client._sock).to.have.sent(new Uint8Array([0, 0, 0, 2]));
expect(client._negotiate_std_vnc_auth).to.have.been.calledOnce; expect(client._negotiateStdVNCAuth).to.have.been.calledOnce;
expect(client._rfbAuthScheme).to.equal(2); expect(client._rfbAuthScheme).to.equal(2);
}); });
it('should fail if there are no supported auth types', function () { it('should fail if there are no supported auth types', function () {
sinon.spy(client, "_fail"); sinon.spy(client, "_fail");
client._rfbTightVNC = true; client._rfbTightVNC = true;
send_num_str_pairs([[23, 'stdv', 'badval__']], client); sendNumStrPairs([[23, 'stdv', 'badval__']], client);
expect(client._fail).to.have.been.calledOnce; expect(client._fail).to.have.been.calledOnce;
}); });
}); });
@ -1452,7 +1452,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('ClientInitialisation', function () { describe('ClientInitialisation', function () {
it('should transition to the ServerInitialisation state', function () { it('should transition to the ServerInitialisation state', function () {
const client = make_rfb(); const client = makeRFB();
client._rfbConnectionState = 'connecting'; client._rfbConnectionState = 'connecting';
client._rfbInitState = 'SecurityResult'; client._rfbInitState = 'SecurityResult';
client._sock._websocket._receive_data(new Uint8Array([0, 0, 0, 0])); client._sock._websocket._receive_data(new Uint8Array([0, 0, 0, 0]));
@ -1460,7 +1460,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
it('should send 1 if we are in shared mode', function () { it('should send 1 if we are in shared mode', function () {
const client = make_rfb('wss://host:8675', { shared: true }); const client = makeRFB('wss://host:8675', { shared: true });
client._rfbConnectionState = 'connecting'; client._rfbConnectionState = 'connecting';
client._rfbInitState = 'SecurityResult'; client._rfbInitState = 'SecurityResult';
client._sock._websocket._receive_data(new Uint8Array([0, 0, 0, 0])); client._sock._websocket._receive_data(new Uint8Array([0, 0, 0, 0]));
@ -1468,7 +1468,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
it('should send 0 if we are not in shared mode', function () { it('should send 0 if we are not in shared mode', function () {
const client = make_rfb('wss://host:8675', { shared: false }); const client = makeRFB('wss://host:8675', { shared: false });
client._rfbConnectionState = 'connecting'; client._rfbConnectionState = 'connecting';
client._rfbInitState = 'SecurityResult'; client._rfbInitState = 'SecurityResult';
client._sock._websocket._receive_data(new Uint8Array([0, 0, 0, 0])); client._sock._websocket._receive_data(new Uint8Array([0, 0, 0, 0]));
@ -1481,7 +1481,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
client._rfbInitState = 'ServerInitialisation'; client._rfbInitState = 'ServerInitialisation';
}); });
function send_server_init(opts, client) { function sendServerInit(opts, client) {
const fullOpts = { width: 10, height: 12, bpp: 24, depth: 24, big_endian: 0, const fullOpts = { width: 10, height: 12, bpp: 24, depth: 24, big_endian: 0,
true_color: 1, redMax: 255, greenMax: 255, blueMax: 255, true_color: 1, redMax: 255, greenMax: 255, blueMax: 255,
redShift: 16, greenShift: 8, blueShift: 0, name: 'a name' }; redShift: 16, greenShift: 8, blueShift: 0, name: 'a name' };
@ -1522,7 +1522,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
} }
it('should set the framebuffer width and height', function () { it('should set the framebuffer width and height', function () {
send_server_init({ width: 32, height: 84 }, client); sendServerInit({ width: 32, height: 84 }, client);
expect(client._fbWidth).to.equal(32); expect(client._fbWidth).to.equal(32);
expect(client._fbHeight).to.equal(84); expect(client._fbHeight).to.equal(84);
}); });
@ -1532,7 +1532,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should set the framebuffer name and call the callback', function () { it('should set the framebuffer name and call the callback', function () {
const spy = sinon.spy(); const spy = sinon.spy();
client.addEventListener("desktopname", spy); client.addEventListener("desktopname", spy);
send_server_init({ name: 'som€ nam€' }, client); sendServerInit({ name: 'som€ nam€' }, client);
expect(client._fbName).to.equal('som€ nam€'); expect(client._fbName).to.equal('som€ nam€');
expect(spy).to.have.been.calledOnce; expect(spy).to.have.been.calledOnce;
@ -1543,7 +1543,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
// NB(sross): we don't actually do anything with it, so just test that we can // NB(sross): we don't actually do anything with it, so just test that we can
// read it w/o throwing an error // read it w/o throwing an error
client._rfbTightVNC = true; client._rfbTightVNC = true;
send_server_init({}, client); sendServerInit({}, client);
const tightData = []; const tightData = [];
push16(tightData, 1); push16(tightData, 1);
@ -1560,7 +1560,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should resize the display', function () { it('should resize the display', function () {
sinon.spy(client._display, 'resize'); sinon.spy(client._display, 'resize');
send_server_init({ width: 27, height: 32 }, client); sendServerInit({ width: 27, height: 32 }, client);
expect(client._display.resize).to.have.been.calledOnce; expect(client._display.resize).to.have.been.calledOnce;
expect(client._display.resize).to.have.been.calledWith(27, 32); expect(client._display.resize).to.have.been.calledWith(27, 32);
@ -1569,7 +1569,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should grab the mouse and keyboard', function () { it('should grab the mouse and keyboard', function () {
sinon.spy(client._keyboard, 'grab'); sinon.spy(client._keyboard, 'grab');
sinon.spy(client._mouse, 'grab'); sinon.spy(client._mouse, 'grab');
send_server_init({}, client); sendServerInit({}, client);
expect(client._keyboard.grab).to.have.been.calledOnce; expect(client._keyboard.grab).to.have.been.calledOnce;
expect(client._mouse.grab).to.have.been.calledOnce; expect(client._mouse.grab).to.have.been.calledOnce;
}); });
@ -1589,7 +1589,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
// TODO(directxman12): test the various options in this configuration matrix // TODO(directxman12): test the various options in this configuration matrix
it('should reply with the pixel format, client encodings, and initial update request', function () { it('should reply with the pixel format, client encodings, and initial update request', function () {
send_server_init({ width: 27, height: 32 }, client); sendServerInit({ width: 27, height: 32 }, client);
expect(RFB.messages.pixelFormat).to.have.been.calledOnce; expect(RFB.messages.pixelFormat).to.have.been.calledOnce;
expect(RFB.messages.pixelFormat).to.have.been.calledWith(client._sock, 24, true); expect(RFB.messages.pixelFormat).to.have.been.calledWith(client._sock, 24, true);
@ -1602,7 +1602,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
it('should reply with restricted settings for Intel AMT servers', function () { it('should reply with restricted settings for Intel AMT servers', function () {
send_server_init({ width: 27, height: 32, name: "Intel(r) AMT KVM"}, client); sendServerInit({ width: 27, height: 32, name: "Intel(r) AMT KVM"}, client);
expect(RFB.messages.pixelFormat).to.have.been.calledOnce; expect(RFB.messages.pixelFormat).to.have.been.calledOnce;
expect(RFB.messages.pixelFormat).to.have.been.calledWith(client._sock, 8, true); expect(RFB.messages.pixelFormat).to.have.been.calledWith(client._sock, 8, true);
@ -1617,7 +1617,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
it('should transition to the "connected" state', function () { it('should transition to the "connected" state', function () {
send_server_init({}, client); sendServerInit({}, client);
expect(client._rfbConnectionState).to.equal('connected'); expect(client._rfbConnectionState).to.equal('connected');
}); });
}); });
@ -1627,7 +1627,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
client._fbName = 'some device'; client._fbName = 'some device';
client._fbWidth = 640; client._fbWidth = 640;
client._fbHeight = 20; client._fbHeight = 20;
@ -1656,7 +1656,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
targetDataCheck = new Uint8Array(targetDataCheckArr); targetDataCheck = new Uint8Array(targetDataCheckArr);
}); });
function send_fbu_msg(rectInfo, rectData, client, rectCnt) { function sendFbuMsg(rectInfo, rectData, client, rectCnt) {
let data = []; let data = [];
if (!rectCnt || rectCnt > -1) { if (!rectCnt || rectCnt > -1) {
@ -1720,7 +1720,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should fail on an unsupported encoding', function () { it('should fail on an unsupported encoding', function () {
sinon.spy(client, "_fail"); sinon.spy(client, "_fail");
const rectInfo = { x: 8, y: 11, width: 27, height: 32, encoding: 234 }; const rectInfo = { x: 8, y: 11, width: 27, height: 32, encoding: 234 };
send_fbu_msg([rectInfo], [[]], client); sendFbuMsg([rectInfo], [[]], client);
expect(client._fail).to.have.been.calledOnce; expect(client._fail).to.have.been.calledOnce;
}); });
@ -1735,8 +1735,8 @@ describe('Remote Frame Buffer Protocol Client', function () {
{ x: 2, y: 2, width: 2, height: 2, encoding: 0x01}]; { x: 2, y: 2, width: 2, height: 2, encoding: 0x01}];
// data says [{ old_x: 2, old_y: 0 }, { old_x: 0, old_y: 0 }] // data says [{ old_x: 2, old_y: 0 }, { old_x: 0, old_y: 0 }]
const rects = [[0, 2, 0, 0], [0, 0, 0, 0]]; const rects = [[0, 2, 0, 0], [0, 0, 0, 0]];
send_fbu_msg([info[0]], [rects[0]], client, 2); sendFbuMsg([info[0]], [rects[0]], client, 2);
send_fbu_msg([info[1]], [rects[1]], client, -1); sendFbuMsg([info[1]], [rects[1]], client, -1);
expect(client._display).to.have.displayed(targetDataCheck); expect(client._display).to.have.displayed(targetDataCheck);
}); });
@ -1760,7 +1760,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
[0xff, 0x00, 0x00, 0, 0xff, 0x00, 0x00, 0, 0xff, 0x00, 0x00, 0, 0xff, 0x00, 0x00, 0], [0xff, 0x00, 0x00, 0, 0xff, 0x00, 0x00, 0, 0xff, 0x00, 0x00, 0, 0xff, 0x00, 0x00, 0],
[0xff, 0x00, 0xee, 0, 0xff, 0xee, 0x00, 0, 0xff, 0xee, 0xaa, 0, 0xff, 0xee, 0xab, 0], [0xff, 0x00, 0xee, 0, 0xff, 0xee, 0x00, 0, 0xff, 0xee, 0xaa, 0, 0xff, 0xee, 0xab, 0],
[0xff, 0x00, 0xee, 0, 0xff, 0xee, 0x00, 0, 0xff, 0xee, 0xaa, 0, 0xff, 0xee, 0xab, 0]]; [0xff, 0x00, 0xee, 0, 0xff, 0xee, 0x00, 0, 0xff, 0xee, 0xaa, 0, 0xff, 0xee, 0xab, 0]];
send_fbu_msg(info, rects, client); sendFbuMsg(info, rects, client);
expect(client._display).to.have.displayed(targetData); expect(client._display).to.have.displayed(targetData);
}); });
@ -1775,7 +1775,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
[0x0c, 0x0c, 0x03, 0x03], [0x0c, 0x0c, 0x03, 0x03],
[0x0c, 0x0c, 0x03, 0x03]]; [0x0c, 0x0c, 0x03, 0x03]];
client._fbDepth = 8; client._fbDepth = 8;
send_fbu_msg(info, rects, client); sendFbuMsg(info, rects, client);
expect(client._display).to.have.displayed(targetDataCheck); expect(client._display).to.have.displayed(targetDataCheck);
}); });
@ -1787,7 +1787,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
{ x: 2, y: 2, width: 2, height: 2, encoding: 0x01}]; { x: 2, y: 2, width: 2, height: 2, encoding: 0x01}];
// data says [{ old_x: 0, old_y: 0 }, { old_x: 0, old_y: 0 }] // data says [{ old_x: 0, old_y: 0 }, { old_x: 0, old_y: 0 }]
const rects = [[0, 2, 0, 0], [0, 0, 0, 0]]; const rects = [[0, 2, 0, 0], [0, 0, 0, 0]];
send_fbu_msg(info, rects, client); sendFbuMsg(info, rects, client);
expect(client._display).to.have.displayed(targetDataCheck); expect(client._display).to.have.displayed(targetDataCheck);
}); });
@ -1815,7 +1815,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
push16(rect, 2); // y: 2 push16(rect, 2); // y: 2
push16(rect, 2); // width: 2 push16(rect, 2); // width: 2
push16(rect, 2); // height: 2 push16(rect, 2); // height: 2
send_fbu_msg(info, [rect], client); sendFbuMsg(info, [rect], client);
expect(client._display).to.have.displayed(targetDataCheck); expect(client._display).to.have.displayed(targetDataCheck);
}); });
@ -1834,7 +1834,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
rect.push(1 | (1 << 4)); // width: 2, height: 2 rect.push(1 | (1 << 4)); // width: 2, height: 2
rect.push(2 | (2 << 4)); // x: 2, y: 2 rect.push(2 | (2 << 4)); // x: 2, y: 2
rect.push(1 | (1 << 4)); // width: 2, height: 2 rect.push(1 | (1 << 4)); // width: 2, height: 2
send_fbu_msg(info, [rect], client); sendFbuMsg(info, [rect], client);
expect(client._display).to.have.displayed(targetDataCheck); expect(client._display).to.have.displayed(targetDataCheck);
}); });
@ -1848,7 +1848,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
rect.push(targetData[i]); rect.push(targetData[i]);
rect.push(targetData[i + 3]); rect.push(targetData[i + 3]);
} }
send_fbu_msg(info, [rect], client); sendFbuMsg(info, [rect], client);
expect(client._display).to.have.displayed(targetData); expect(client._display).to.have.displayed(targetData);
}); });
@ -1857,7 +1857,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
const rect = []; const rect = [];
rect.push(0x02); rect.push(0x02);
push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color push32(rect, 0xff00ff); // becomes 00ff00ff --> #00FF00 bg color
send_fbu_msg(info, [rect], client); sendFbuMsg(info, [rect], client);
const expected = []; const expected = [];
for (let i = 0; i < 16; i++) { push32(expected, 0xff00ff); } for (let i = 0; i < 16; i++) { push32(expected, 0xff00ff); }
@ -1880,7 +1880,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
// send an empty frame // send an empty frame
rect.push(0x00); rect.push(0x00);
send_fbu_msg(info, [rect], client); sendFbuMsg(info, [rect], client);
const expected = []; const expected = [];
for (let i = 0; i < 16; i++) { push32(expected, 0xff00ff); } // rect 1: solid for (let i = 0; i < 16; i++) { push32(expected, 0xff00ff); } // rect 1: solid
@ -1906,7 +1906,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
rect.push(0xff); rect.push(0xff);
rect.push(2 | (2 << 4)); // x: 2, y: 2 rect.push(2 | (2 << 4)); // x: 2, y: 2
rect.push(1 | (1 << 4)); // width: 2, height: 2 rect.push(1 | (1 << 4)); // width: 2, height: 2
send_fbu_msg(info, [rect], client); sendFbuMsg(info, [rect], client);
expect(client._display).to.have.displayed(targetDataCheck); expect(client._display).to.have.displayed(targetDataCheck);
}); });
@ -1934,7 +1934,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
rect.push(1); // 1 subrect rect.push(1); // 1 subrect
rect.push(0); // x: 0, y: 0 rect.push(0); // x: 0, y: 0
rect.push(1 | (1 << 4)); // width: 2, height: 2 rect.push(1 | (1 << 4)); // width: 2, height: 2
send_fbu_msg(info, [rect], client); sendFbuMsg(info, [rect], client);
let expected = []; let expected = [];
for (let i = 0; i < 4; i++) { expected = expected.concat(targetDataCheckArr); } for (let i = 0; i < 4; i++) { expected = expected.concat(targetDataCheckArr); }
@ -1946,7 +1946,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
sinon.spy(client, "_fail"); sinon.spy(client, "_fail");
const info = [{ x: 0, y: 0, width: 4, height: 4, encoding: 0x05 }]; const info = [{ x: 0, y: 0, width: 4, height: 4, encoding: 0x05 }];
const rects = [[45]]; // an invalid subencoding const rects = [[45]]; // an invalid subencoding
send_fbu_msg(info, rects, client); sendFbuMsg(info, rects, client);
expect(client._fail).to.have.been.calledOnce; expect(client._fail).to.have.been.calledOnce;
}); });
}); });
@ -1961,7 +1961,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
it('should handle the DesktopSize pseduo-encoding', function () { it('should handle the DesktopSize pseduo-encoding', function () {
sinon.spy(client._display, 'resize'); sinon.spy(client._display, 'resize');
send_fbu_msg([{ x: 0, y: 0, width: 20, height: 50, encoding: -223 }], [[]], client); sendFbuMsg([{ x: 0, y: 0, width: 20, height: 50, encoding: -223 }], [[]], client);
expect(client._fbWidth).to.equal(20); expect(client._fbWidth).to.equal(20);
expect(client._fbHeight).to.equal(50); expect(client._fbHeight).to.equal(50);
@ -1979,7 +1979,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
sinon.spy(client._display, 'resize'); sinon.spy(client._display, 'resize');
}); });
function make_screen_data(nrOfScreens) { function makeScreenData(nrOfScreens) {
const data = []; const data = [];
push8(data, nrOfScreens); // number-of-screens push8(data, nrOfScreens); // number-of-screens
push8(data, 0); // padding push8(data, 0); // padding
@ -1999,9 +1999,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
const reasonForChange = 1; // requested by this client const reasonForChange = 1; // requested by this client
const statusCode = 0; // No error const statusCode = 0; // No error
send_fbu_msg([{ x: reasonForChange, y: statusCode, sendFbuMsg([{ x: reasonForChange, y: statusCode,
width: 20, height: 50, encoding: -308 }], width: 20, height: 50, encoding: -308 }],
make_screen_data(1), client); makeScreenData(1), client);
expect(client._fbWidth).to.equal(20); expect(client._fbWidth).to.equal(20);
expect(client._fbHeight).to.equal(50); expect(client._fbHeight).to.equal(50);
@ -2014,9 +2014,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
const reasonForChange = 2; // requested by another client const reasonForChange = 2; // requested by another client
const statusCode = 0; // No error const statusCode = 0; // No error
send_fbu_msg([{ x: reasonForChange, y: statusCode, sendFbuMsg([{ x: reasonForChange, y: statusCode,
width: 20, height: 50, encoding: -308 }], width: 20, height: 50, encoding: -308 }],
make_screen_data(1), client); makeScreenData(1), client);
expect(client._fbWidth).to.equal(20); expect(client._fbWidth).to.equal(20);
expect(client._fbHeight).to.equal(50); expect(client._fbHeight).to.equal(50);
@ -2029,9 +2029,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
const reasonForChange = 2; // requested by another client const reasonForChange = 2; // requested by another client
const statusCode = 0; // No error const statusCode = 0; // No error
send_fbu_msg([{ x: reasonForChange, y: statusCode, sendFbuMsg([{ x: reasonForChange, y: statusCode,
width: 60, height: 50, encoding: -308 }], width: 60, height: 50, encoding: -308 }],
make_screen_data(3), client); makeScreenData(3), client);
expect(client._fbWidth).to.equal(60); expect(client._fbWidth).to.equal(60);
expect(client._fbHeight).to.equal(50); expect(client._fbHeight).to.equal(50);
@ -2044,9 +2044,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
const reasonForChange = 1; // requested by this client const reasonForChange = 1; // requested by this client
const statusCode = 1; // Resize is administratively prohibited const statusCode = 1; // Resize is administratively prohibited
send_fbu_msg([{ x: reasonForChange, y: statusCode, sendFbuMsg([{ x: reasonForChange, y: statusCode,
width: 20, height: 50, encoding: -308 }], width: 20, height: 50, encoding: -308 }],
make_screen_data(1), client); makeScreenData(1), client);
expect(client._fbWidth).to.equal(4); expect(client._fbWidth).to.equal(4);
expect(client._fbHeight).to.equal(4); expect(client._fbHeight).to.equal(4);
@ -2078,7 +2078,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
} }
expected = new Uint8Array(expected); expected = new Uint8Array(expected);
send_fbu_msg([info], [rect], client); sendFbuMsg([info], [rect], client);
expect(client._cursor.change).to.have.been.calledOnce; expect(client._cursor.change).to.have.been.calledOnce;
expect(client._cursor.change).to.have.been.calledWith(expected, 5, 7, 4, 4); expect(client._cursor.change).to.have.been.calledWith(expected, 5, 7, 4, 4);
@ -2090,7 +2090,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
encoding: -239}; encoding: -239};
const rect = []; const rect = [];
send_fbu_msg([info], [rect], client); sendFbuMsg([info], [rect], client);
expect(client._cursor.change).to.have.been.calledOnce; expect(client._cursor.change).to.have.been.calledOnce;
expect(client._cursor.change).to.have.been.calledWith(new Uint8Array, 0, 0, 0, 0); expect(client._cursor.change).to.have.been.calledWith(new Uint8Array, 0, 0, 0, 0);
@ -2113,7 +2113,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
} }
expected = new Uint8Array(expected); expected = new Uint8Array(expected);
send_fbu_msg([info], [rect], client); sendFbuMsg([info], [rect], client);
expect(client._cursor.change).to.have.been.calledOnce; expect(client._cursor.change).to.have.been.calledOnce;
expect(client._cursor.change).to.have.been.calledWith(expected, 5, 7, 4, 4); expect(client._cursor.change).to.have.been.calledWith(expected, 5, 7, 4, 4);
@ -2144,7 +2144,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
} }
expected = new Uint8Array(expected); expected = new Uint8Array(expected);
send_fbu_msg([info], [rect], client); sendFbuMsg([info], [rect], client);
expect(client._cursor.change).to.have.been.calledOnce; expect(client._cursor.change).to.have.been.calledOnce;
expect(client._cursor.change).to.have.been.calledWith(expected, 5, 7, 4, 4); expect(client._cursor.change).to.have.been.calledWith(expected, 5, 7, 4, 4);
@ -2157,7 +2157,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
const rect = []; const rect = [];
const dot = RFB.cursors.dot; const dot = RFB.cursors.dot;
send_fbu_msg([info], [rect], client); sendFbuMsg([info], [rect], client);
expect(client._cursor.change).to.have.been.calledOnce; expect(client._cursor.change).to.have.been.calledOnce;
expect(client._cursor.change).to.have.been.calledWith(dot.rgbaPixels, expect(client._cursor.change).to.have.been.calledWith(dot.rgbaPixels,
@ -2179,7 +2179,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
} }
push32(rect, 0x00000000); push32(rect, 0x00000000);
send_fbu_msg([info], [rect], client); sendFbuMsg([info], [rect], client);
expect(client._cursor.change).to.have.been.calledOnce; expect(client._cursor.change).to.have.been.calledOnce;
expect(client._cursor.change).to.have.been.calledWith(dot.rgbaPixels, expect(client._cursor.change).to.have.been.calledWith(dot.rgbaPixels,
@ -2217,9 +2217,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
push8(rect, data[i]); push8(rect, data[i]);
} }
send_fbu_msg([{ x: 0, y: 0, width: 2, height: 2, sendFbuMsg([{ x: 0, y: 0, width: 2, height: 2,
encoding: 0x574d5664}], encoding: 0x574d5664}],
[rect], client); [rect], client);
expect(client._FBU.rects).to.equal(0); expect(client._FBU.rects).to.equal(0);
}); });
@ -2245,9 +2245,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
push8(rect, data[i]); push8(rect, data[i]);
} }
send_fbu_msg([{ x: 0, y: 0, width: w, height: h, sendFbuMsg([{ x: 0, y: 0, width: w, height: h,
encoding: 0x574d5664}], encoding: 0x574d5664}],
[rect], client); [rect], client);
// expect one FBU to remain unhandled // expect one FBU to remain unhandled
expect(client._FBU.rects).to.equal(1); expect(client._FBU.rects).to.equal(1);
@ -2288,10 +2288,10 @@ describe('Remote Frame Buffer Protocol Client', function () {
0x33, 0x22, 0x11, 0xff, 0x33, 0x22, 0x11, 0xff,
0x00, 0x00, 0x00, 0xff]; 0x00, 0x00, 0x00, 0xff];
send_fbu_msg([{ x: hotx, y: hoty, sendFbuMsg([{ x: hotx, y: hoty,
width: w, height: h, width: w, height: h,
encoding: 0x574d5664}], encoding: 0x574d5664}],
[rect], client); [rect], client);
expect(client._cursor.change) expect(client._cursor.change)
.to.have.been.calledOnce; .to.have.been.calledOnce;
@ -2327,10 +2327,10 @@ describe('Remote Frame Buffer Protocol Client', function () {
0x00, 0xff, 0x00, 0x22, 0x00, 0xff, 0x00, 0x22,
0x00, 0x00, 0xff, 0xee]; 0x00, 0x00, 0xff, 0xee];
send_fbu_msg([{ x: hotx, y: hoty, sendFbuMsg([{ x: hotx, y: hoty,
width: w, height: h, width: w, height: h,
encoding: 0x574d5664}], encoding: 0x574d5664}],
[rect], client); [rect], client);
expect(client._cursor.change) expect(client._cursor.change)
.to.have.been.calledOnce; .to.have.been.calledOnce;
@ -2346,9 +2346,9 @@ describe('Remote Frame Buffer Protocol Client', function () {
push8(rect, 0); // padding push8(rect, 0); // padding
client._cursor.change.resetHistory(); client._cursor.change.resetHistory();
send_fbu_msg([{ x: 0, y: 0, width: 2, height: 2, sendFbuMsg([{ x: 0, y: 0, width: 2, height: 2,
encoding: 0x574d5664}], encoding: 0x574d5664}],
[rect], client); [rect], client);
expect(client._cursor.change) expect(client._cursor.change)
.to.not.have.been.called; .to.not.have.been.called;
@ -2356,7 +2356,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
}); });
it('should handle the last_rect pseudo-encoding', function () { it('should handle the last_rect pseudo-encoding', function () {
send_fbu_msg([{ x: 0, y: 0, width: 0, height: 0, encoding: -224}], [[]], client, 100); sendFbuMsg([{ x: 0, y: 0, width: 0, height: 0, encoding: -224}], [[]], client, 100);
expect(client._FBU.rects).to.equal(0); expect(client._FBU.rects).to.equal(0);
}); });
@ -2368,7 +2368,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
const spy = sinon.spy(); const spy = sinon.spy();
client.addEventListener("desktopname", spy); client.addEventListener("desktopname", spy);
send_fbu_msg([{ x: 0, y: 0, width: 0, height: 0, encoding: -307 }], [data], client); sendFbuMsg([{ x: 0, y: 0, width: 0, height: 0, encoding: -307 }], [data], client);
expect(client._fbName).to.equal('som€ nam€'); expect(client._fbName).to.equal('som€ nam€');
expect(spy).to.have.been.calledOnce; expect(spy).to.have.been.calledOnce;
@ -2719,7 +2719,7 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('Asynchronous Events', function () { describe('Asynchronous Events', function () {
let client; let client;
beforeEach(function () { beforeEach(function () {
client = make_rfb(); client = makeRFB();
}); });
describe('Mouse event handlers', function () { describe('Mouse event handlers', function () {
@ -2795,23 +2795,23 @@ describe('Remote Frame Buffer Protocol Client', function () {
describe('WebSocket event handlers', function () { describe('WebSocket event handlers', function () {
// message events // message events
it('should do nothing if we receive an empty message and have nothing in the queue', function () { it('should do nothing if we receive an empty message and have nothing in the queue', function () {
client._normal_msg = sinon.spy(); client._normalMsg = sinon.spy();
client._sock._websocket._receive_data(new Uint8Array([])); client._sock._websocket._receive_data(new Uint8Array([]));
expect(client._normal_msg).to.not.have.been.called; expect(client._normalMsg).to.not.have.been.called;
}); });
it('should handle a message in the connected state as a normal message', function () { it('should handle a message in the connected state as a normal message', function () {
client._normal_msg = sinon.spy(); client._normalMsg = sinon.spy();
client._sock._websocket._receive_data(new Uint8Array([1, 2, 3])); client._sock._websocket._receive_data(new Uint8Array([1, 2, 3]));
expect(client._normal_msg).to.have.been.called; expect(client._normalMsg).to.have.been.called;
}); });
it('should handle a message in any non-disconnected/failed state like an init message', function () { it('should handle a message in any non-disconnected/failed state like an init message', function () {
client._rfbConnectionState = 'connecting'; client._rfbConnectionState = 'connecting';
client._rfbInitState = 'ProtocolVersion'; client._rfbInitState = 'ProtocolVersion';
client._init_msg = sinon.spy(); client._initMsg = sinon.spy();
client._sock._websocket._receive_data(new Uint8Array([1, 2, 3])); client._sock._websocket._receive_data(new Uint8Array([1, 2, 3]));
expect(client._init_msg).to.have.been.called; expect(client._initMsg).to.have.been.called;
}); });
it('should process all normal messages directly', function () { it('should process all normal messages directly', function () {

Loading…
Cancel
Save