mirror of
https://github.com/schlagmichdoch/PairDrop.git
synced 2025-04-20 07:05:05 -04:00
Make IPv4 and IPv6 localhost connections use the same room.
This commit is contained in:
parent
a251483e97
commit
8b99e921e7
1 changed files with 30 additions and 21 deletions
|
@ -14,8 +14,8 @@ class SnapdropServer {
|
|||
}
|
||||
|
||||
_onConnection(peer) {
|
||||
this._joinRoom(peer);
|
||||
peer.socket.on('message', message => this._onMessage(peer, message));
|
||||
let room = this._joinRoom(peer);
|
||||
peer.socket.on('message', message => this._onMessage(peer, room, message));
|
||||
this._keepAlive(peer);
|
||||
}
|
||||
|
||||
|
@ -25,12 +25,12 @@ class SnapdropServer {
|
|||
headers.push('Set-Cookie: peerid=' + response.peerId);
|
||||
}
|
||||
|
||||
_onMessage(sender, message) {
|
||||
_onMessage(sender, roomName, message) {
|
||||
message = JSON.parse(message);
|
||||
|
||||
switch (message.type) {
|
||||
case 'disconnect':
|
||||
this._leaveRoom(sender);
|
||||
this._leaveRoom(sender, roomName);
|
||||
break;
|
||||
case 'pong':
|
||||
sender.lastBeat = Date.now();
|
||||
|
@ -38,9 +38,9 @@ class SnapdropServer {
|
|||
}
|
||||
|
||||
// relay message to recipient
|
||||
if (message.to && this._rooms[sender.ip]) {
|
||||
if (message.to && this._rooms[roomName]) {
|
||||
const recipientId = message.to; // TODO: sanitize
|
||||
const recipient = this._rooms[sender.ip][recipientId];
|
||||
const recipient = this._rooms[roomName][recipientId];
|
||||
delete message.to;
|
||||
// add sender id
|
||||
message.sender = sender.id;
|
||||
|
@ -50,14 +50,21 @@ class SnapdropServer {
|
|||
}
|
||||
|
||||
_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 (!this._rooms[peer.ip]) {
|
||||
this._rooms[peer.ip] = {};
|
||||
if (!this._rooms[roomName]) {
|
||||
this._rooms[roomName] = {};
|
||||
}
|
||||
|
||||
// notify all other peers
|
||||
for (const otherPeerId in this._rooms[peer.ip]) {
|
||||
const otherPeer = this._rooms[peer.ip][otherPeerId];
|
||||
for (const otherPeerId in this._rooms[roomName]) {
|
||||
const otherPeer = this._rooms[roomName][otherPeerId];
|
||||
this._send(otherPeer, {
|
||||
type: 'peer-joined',
|
||||
peer: peer.getInfo()
|
||||
|
@ -66,8 +73,8 @@ class SnapdropServer {
|
|||
|
||||
// notify peer about the other peers
|
||||
const otherPeers = [];
|
||||
for (const otherPeerId in this._rooms[peer.ip]) {
|
||||
otherPeers.push(this._rooms[peer.ip][otherPeerId].getInfo());
|
||||
for (const otherPeerId in this._rooms[roomName]) {
|
||||
otherPeers.push(this._rooms[roomName][otherPeerId].getInfo());
|
||||
}
|
||||
|
||||
this._send(peer, {
|
||||
|
@ -76,24 +83,26 @@ class SnapdropServer {
|
|||
});
|
||||
|
||||
// add peer to room
|
||||
this._rooms[peer.ip][peer.id] = peer;
|
||||
this._rooms[roomName][peer.id] = peer;
|
||||
|
||||
return roomName;
|
||||
}
|
||||
|
||||
_leaveRoom(peer) {
|
||||
if (!this._rooms[peer.ip] || !this._rooms[peer.ip][peer.id]) return;
|
||||
this._cancelKeepAlive(this._rooms[peer.ip][peer.id]);
|
||||
_leaveRoom(peer, roomName) {
|
||||
if (!this._rooms[roomName] || !this._rooms[roomName][peer.id]) return;
|
||||
this._cancelKeepAlive(this._rooms[roomName][peer.id]);
|
||||
|
||||
// delete the peer
|
||||
delete this._rooms[peer.ip][peer.id];
|
||||
delete this._rooms[roomName][peer.id];
|
||||
|
||||
peer.socket.terminate();
|
||||
//if room is empty, delete the room
|
||||
if (!Object.keys(this._rooms[peer.ip]).length) {
|
||||
delete this._rooms[peer.ip];
|
||||
if (!Object.keys(this._rooms[roomName]).length) {
|
||||
delete this._rooms[roomName];
|
||||
} else {
|
||||
// notify all other peers
|
||||
for (const otherPeerId in this._rooms[peer.ip]) {
|
||||
const otherPeer = this._rooms[peer.ip][otherPeerId];
|
||||
for (const otherPeerId in this._rooms[roomName]) {
|
||||
const otherPeer = this._rooms[roomName][otherPeerId];
|
||||
this._send(otherPeer, { type: 'peer-left', peerId: peer.id });
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue