Skip to content

Commit 573e5e6

Browse files
committed
Cleanup transport name and organization
1 parent b26579a commit 573e5e6

File tree

13 files changed

+163
-143
lines changed

13 files changed

+163
-143
lines changed

lib/app.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ const GenericApp = require('./generic-app');
44
const utils = require('./utils');
55

66
const trans_websocket = require('./transport/websocket');
7-
const trans_jsonp = require('./transport/jsonp');
8-
const trans_xhr = require('./transport/xhr');
9-
const iframe = require('./iframe');
7+
const trans_websocket_raw = require('./transport/websocket-raw');
8+
const trans_jsonp_polling = require('./transport/jsonp-polling');
9+
const trans_xhr_polling = require('./transport/xhr-polling');
10+
const trans_xhr_streaming = require('./transport/xhr-streaming');
11+
const iframe = require('./transport/iframe');
1012
const trans_eventsource = require('./transport/eventsource');
1113
const trans_htmlfile = require('./transport/htmlfile');
1214
const info = require('./info');
@@ -51,8 +53,10 @@ Object.assign(App.prototype,
5153
iframe,
5254
info,
5355
trans_websocket,
54-
trans_jsonp,
55-
trans_xhr,
56+
trans_websocket_raw,
57+
trans_jsonp_polling,
58+
trans_xhr_polling,
59+
trans_xhr_streaming,
5660
trans_eventsource,
5761
trans_htmlfile
5862
);

lib/session.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

33
const debug = require('debug')('sockjs:session');
4-
const Transport = require('./transport/type');
4+
const Transport = require('./transport/transport');
55
const SockJSConnection = require('./sockjs-connection');
66

77
const MAP = new Map();

lib/transport/generic.js renamed to lib/transport/base-receiver.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
'use strict';
22

33
const utils = require('../utils');
4-
const debug = require('debug')('sockjs:generic-receiver');
4+
const debug = require('debug')('sockjs:base-receiver');
55

6-
class GenericReceiver {
6+
class BaseReceiver {
77
constructor(socket) {
88
this.abort = this.abort.bind(this);
99
this.socket = socket;
@@ -45,4 +45,4 @@ class GenericReceiver {
4545
}
4646
}
4747

48-
module.exports = GenericReceiver;
48+
module.exports = BaseReceiver;

lib/transport/eventsource.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22
const utils = require('../utils');
3-
const ResponseReceiver = require('./response');
3+
const ResponseReceiver = require('./response-receiver');
44
const Session = require('../session');
55

66
class EventSourceReceiver extends ResponseReceiver {

lib/transport/htmlfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
const ResponseReceiver = require('./response');
3+
const ResponseReceiver = require('./response-receiver');
44
const Session = require('../session');
55

66
// Browsers fail with "Uncaught exception: ReferenceError: Security

lib/iframe.js renamed to lib/transport/iframe.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

3-
const utils = require('./utils');
4-
const middleware = require('./middleware');
3+
const utils = require('../utils');
4+
const middleware = require('../middleware');
55

66
const iframe_template = `<!DOCTYPE html>
77
<html>

lib/transport/jsonp.js renamed to lib/transport/jsonp-polling.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
2-
const ResponseReceiver = require('./response');
2+
const ResponseReceiver = require('./response-receiver');
33
const Session = require('../session');
44

55
class JsonpReceiver extends ResponseReceiver {

lib/transport/response.js renamed to lib/transport/response-receiver.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
'use strict';
22

3-
const GenericReceiver = require('./generic');
3+
const BaseReceiver = require('./base-receiver');
44
const debug = require('debug')('sockjs:response-receiver');
55

66
// Write stuff to response, using chunked encoding if possible.
7-
class ResponseReceiver extends GenericReceiver {
7+
class ResponseReceiver extends BaseReceiver {
88
constructor(request, response, options) {
99
super(request.socket);
1010
this.max_response_size = options.response_limit;
File renamed without changes.

lib/transport/websocket-raw.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
'use strict';
2+
3+
const FayeWebsocket = require('faye-websocket');
4+
const Session = require('../session');
5+
const Transport = require('./transport');
6+
const SockJSConnection = require('../sockjs-connection');
7+
8+
class RawWebsocketSessionReceiver {
9+
constructor(req, conn, server, ws) {
10+
this.ws = ws;
11+
this.prefix = server.options.prefix;
12+
this.readyState = Transport.OPEN;
13+
this.recv = {
14+
socket: conn,
15+
protocol: 'websocket-raw'
16+
};
17+
18+
this.connection = new SockJSConnection(this);
19+
Session.decorateConnection(req, this.connection, this.recv);
20+
server.emit('connection', this.connection);
21+
22+
this._close = this._close.bind(this);
23+
this.ws.once('close', this._close);
24+
25+
this.didMessage = this.didMessage.bind(this);
26+
this.ws.on('message', this.didMessage);
27+
}
28+
29+
didMessage(m) {
30+
if (this.readyState === Transport.OPEN) {
31+
this.connection.emit('data', m.data);
32+
}
33+
}
34+
35+
send(payload) {
36+
if (this.readyState !== Transport.OPEN) {
37+
return false;
38+
}
39+
this.ws.send(payload);
40+
return true;
41+
}
42+
43+
close(status=1000, reason='Normal closure') {
44+
if (this.readyState !== Transport.OPEN) {
45+
return false;
46+
}
47+
this.readyState = Transport.CLOSING;
48+
this.ws.close(status, reason, false);
49+
return true;
50+
}
51+
52+
_close() {
53+
if (!this.ws) {
54+
return;
55+
}
56+
this.ws.removeEventListener('message', this.didMessage);
57+
this.ws.removeEventListener('close', this._close);
58+
try {
59+
this.ws.close(1000, 'Normal closure', false);
60+
} catch (x) {
61+
// intentionally empty
62+
}
63+
this.ws = null;
64+
65+
this.readyState = Transport.CLOSED;
66+
this.connection.emit('end');
67+
this.connection.emit('close');
68+
this.connection = null;
69+
}
70+
}
71+
72+
module.exports = {
73+
raw_websocket(req, socket, head, next) {
74+
const ver = req.headers['sec-websocket-version'] || '';
75+
if (['8', '13'].indexOf(ver) === -1) {
76+
return next({
77+
status: 400,
78+
message: 'Only supported WebSocket protocol is RFC 6455.'
79+
});
80+
}
81+
const ws = new FayeWebsocket(req, socket, head, null,
82+
this.options.faye_server_options);
83+
ws.onopen = () => {
84+
new RawWebsocketSessionReceiver(req, socket, this, ws);
85+
};
86+
next();
87+
}
88+
};

0 commit comments

Comments
 (0)