Revert "Make IPv4 and IPv6 localhost connections use the same room."

This reverts commit 8b99e921e7.
This commit is contained in:
JBYoshi 2019-02-18 15:47:21 -06:00
parent e6f3555619
commit 6de5e297d8
No known key found for this signature in database
GPG key ID: 468C80811BCC9A6A

View file

@ -14,8 +14,8 @@ class SnapdropServer {
} }
_onConnection(peer) { _onConnection(peer) {
let room = this._joinRoom(peer); this._joinRoom(peer);
peer.socket.on('message', message => this._onMessage(peer, room, message)); peer.socket.on('message', message => this._onMessage(peer, message));
this._keepAlive(peer); this._keepAlive(peer);
} }
@ -25,12 +25,12 @@ class SnapdropServer {
headers.push('Set-Cookie: peerid=' + response.peerId); headers.push('Set-Cookie: peerid=' + response.peerId);
} }
_onMessage(sender, roomName, message) { _onMessage(sender, message) {
message = JSON.parse(message); message = JSON.parse(message);
switch (message.type) { switch (message.type) {
case 'disconnect': case 'disconnect':
this._leaveRoom(sender, roomName); this._leaveRoom(sender);
break; break;
case 'pong': case 'pong':
sender.lastBeat = Date.now(); sender.lastBeat = Date.now();
@ -38,9 +38,9 @@ class SnapdropServer {
} }
// relay message to recipient // relay message to recipient
if (message.to && this._rooms[roomName]) { if (message.to && this._rooms[sender.ip]) {
const recipientId = message.to; // TODO: sanitize const recipientId = message.to; // TODO: sanitize
const recipient = this._rooms[roomName][recipientId]; const recipient = this._rooms[sender.ip][recipientId];
delete message.to; delete message.to;
// add sender id // add sender id
message.sender = sender.id; message.sender = sender.id;
@ -50,21 +50,14 @@ class SnapdropServer {
} }
_joinRoom(peer) { _joinRoom(peer) {
let roomName = peer.ip;
// localhost can use multiple IP addresses
if (roomName == '::1' || roomName == '::ffff:127.0.0.1') {
roomName = '127.0.0.1';
}
// if room doesn't exist, create it // if room doesn't exist, create it
if (!this._rooms[roomName]) { if (!this._rooms[peer.ip]) {
this._rooms[roomName] = {}; this._rooms[peer.ip] = {};
} }
// notify all other peers // notify all other peers
for (const otherPeerId in this._rooms[roomName]) { for (const otherPeerId in this._rooms[peer.ip]) {
const otherPeer = this._rooms[roomName][otherPeerId]; const otherPeer = this._rooms[peer.ip][otherPeerId];
this._send(otherPeer, { this._send(otherPeer, {
type: 'peer-joined', type: 'peer-joined',
peer: peer.getInfo() peer: peer.getInfo()
@ -73,8 +66,8 @@ class SnapdropServer {
// notify peer about the other peers // notify peer about the other peers
const otherPeers = []; const otherPeers = [];
for (const otherPeerId in this._rooms[roomName]) { for (const otherPeerId in this._rooms[peer.ip]) {
otherPeers.push(this._rooms[roomName][otherPeerId].getInfo()); otherPeers.push(this._rooms[peer.ip][otherPeerId].getInfo());
} }
this._send(peer, { this._send(peer, {
@ -83,26 +76,24 @@ class SnapdropServer {
}); });
// add peer to room // add peer to room
this._rooms[roomName][peer.id] = peer; this._rooms[peer.ip][peer.id] = peer;
return roomName;
} }
_leaveRoom(peer, roomName) { _leaveRoom(peer) {
if (!this._rooms[roomName] || !this._rooms[roomName][peer.id]) return; if (!this._rooms[peer.ip] || !this._rooms[peer.ip][peer.id]) return;
this._cancelKeepAlive(this._rooms[roomName][peer.id]); this._cancelKeepAlive(this._rooms[peer.ip][peer.id]);
// delete the peer // delete the peer
delete this._rooms[roomName][peer.id]; delete this._rooms[peer.ip][peer.id];
peer.socket.terminate(); peer.socket.terminate();
//if room is empty, delete the room //if room is empty, delete the room
if (!Object.keys(this._rooms[roomName]).length) { if (!Object.keys(this._rooms[peer.ip]).length) {
delete this._rooms[roomName]; delete this._rooms[peer.ip];
} else { } else {
// notify all other peers // notify all other peers
for (const otherPeerId in this._rooms[roomName]) { for (const otherPeerId in this._rooms[peer.ip]) {
const otherPeer = this._rooms[roomName][otherPeerId]; const otherPeer = this._rooms[peer.ip][otherPeerId];
this._send(otherPeer, { type: 'peer-left', peerId: peer.id }); this._send(otherPeer, { type: 'peer-left', peerId: peer.id });
} }
} }