Skip to content
This repository was archived by the owner on Apr 29, 2020. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 01d508e

Browse files
committedSep 11, 2016
Integrate libp2p-ping
1 parent 178b75f commit 01d508e

File tree

5 files changed

+84
-1
lines changed

5 files changed

+84
-1
lines changed
 

‎examples/ping/node-dialer.js

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
'use strict'
2+
/* eslint-disable no-console */
3+
4+
const PeerId = require('peer-id')
5+
const PeerInfo = require('peer-info')
6+
const libp2p = require('../../src')
7+
const multiaddr = require('multiaddr')
8+
9+
const privateKeyA = 'CAASpAkwggSgAgEAAoIBAQCwJRMRUmQFEr1Y+JUm2A2IEZbGUbHi/D3+SQ5UQLVA561DOHpCNR8gd/3VlniuOrKVpBlZETSmx5tWhXkyvEzfzzP0+0oOK/60nRdDRhCs7xwBi0gZk3uHiEao1T8+x2YUz7XQYNCgXHN1ouSTtFRrI2ub5Zj4QPpc6tSmTczyziYgCYskT5VRxEfWts8R4LzJDhGSZUhZMEEEXSsI1nBXyNS4W81WmnCizidgIpxWM5GnUA5H+TNQ5qkEO78E4vOKjj44Nk6OUpfGwwdt2iTWIakrdme+mdcLAeXiwud3cv3P8d7YJYOjW8M/CTizmvU03IiA3m12AR0mbbY/7qHrAgMBAAECggEAJ6xiDA+7mWzsGuL6bSJSgeg8RnTWFSLtL53yzUU5zeGgo7hPySO/3AdKs9XNXqi32n54exgl/L6OnUE42BWTVwGLWU1UE7cTCkkrmSppzRmZ/DsLxT7znsYx7AsD0LcGpf9WmxWDR+sq0j8bLq16KhtzPEzNVHUGLvFxbfeuBq3KLhvma7cp0I22dbgVZ3DTA5SJWiGrZNjXrzH69MFu8TMiaGhRSqqP4LWWoZq/xwMjNtQrMAL5CVg4Vr9UYd8unKvLMpvMaA7wescpKj0Hgh32kyCiIRiTEKhuZgYxy+jK/681l55VTYvCyzOE7kXBqMgThI7agUwItedv9UAiMQKBgQDcKe4iTtjyDr304gEnvPXO2QzMzmzCo5strRHOGziF7qKo0N7ZxdHgnD9tRuvsA69On70Mpph3N6ds6vjvedPP9EO72bKTqHP2c0m5UIkXBFef39aRWLLvQmRLW86TifNc6s9rEDvPAwBJtYTmz1hgcSP09yfg4EHF74kCfOAu2QKBgQDM0OeqiSlUr4NrOoXn/qHfcvhAXbvCuvjOULFJAXNTlcV01um270m5TBhJI+Pr3W9/kxePAeONWo5pOcjr/+Od9jm5N9b56FOMHtgV6pFQbnC5p6AX2vAK2N/wimDG1zPbyJoLdzwNLo0shH/TZTphCdNz6SC4zpai887eqBYkYwKBgALaJDSbkuHn4PwYJW2vW/vXAfxxPCV1WyBHWrCx15Scl8zaD9kAYAyp2YR/47SGA7JgDWHpkpYQyYF2tczcZisOfgYj9tVE3GO38J+O9IewzbXLf4sYfBDvaj8zrERrCBUPEarQZgXzgwBxcoxO6VUuggm9Xe3i2ddHmB3JIlpZAn9tm15e5Qg5SbQKrkb64EnASsaPq5nPnD+KKaS2bRBKqtwAqwJn46aQgyh7+7j9gIMqwozY+ynLe6q6pTHhGg+1eQ9rD3b8RlhvpBH/qIgbgv7QW+RQ39mV9HnjQCqKPqCB/dhySlzYsRDbwgymFIYpaBjA7wGT5Pq4OcF7ZnhzAoGAIzHjYXZQcxFN7gOUm/bnXb+OuLnvdBaKzF1CFxeTy4gJmf7Jn9GEcJQQCehVpaJGAd2+hRM1fkZwPqtScnGEVSpNkU3IeTG7nCFVcP14o4eMLC9tMJNC7Ul8hjPqlhVEgS5cCDOOhdqkYY1jdvVGnRSjEDua4eSxA7OJjyMEcFc='
10+
11+
const privateKeyB = 'CAASpgkwggSiAgEAAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAECggEAZtju/bcKvKFPz0mkHiaJcpycy9STKphorpCT83srBVQi59CdFU6Mj+aL/xt0kCPMVigJw8P3/YCEJ9J+rS8BsoWE+xWUEsJvtXoT7vzPHaAtM3ci1HZd302Mz1+GgS8Epdx+7F5p80XAFLDUnELzOzKftvWGZmWfSeDnslwVONkL/1VAzwKy7Ce6hk4SxRE7l2NE2OklSHOzCGU1f78ZzVYKSnS5Ag9YrGjOAmTOXDbKNKN/qIorAQ1bovzGoCwx3iGIatQKFOxyVCyO1PsJYT7JO+kZbhBWRRE+L7l+ppPER9bdLFxs1t5CrKc078h+wuUr05S1P1JjXk68pk3+kQKBgQDeK8AR11373Mzib6uzpjGzgNRMzdYNuExWjxyxAzz53NAR7zrPHvXvfIqjDScLJ4NcRO2TddhXAfZoOPVH5k4PJHKLBPKuXZpWlookCAyENY7+Pd55S8r+a+MusrMagYNljb5WbVTgN8cgdpim9lbbIFlpN6SZaVjLQL3J8TWH6wKBgQDSChzItkqWX11CNstJ9zJyUE20I7LrpyBJNgG1gtvz3ZMUQCn3PxxHtQzN9n1P0mSSYs+jBKPuoSyYLt1wwe10/lpgL4rkKWU3/m1Myt0tveJ9WcqHh6tzcAbb/fXpUFT/o4SWDimWkPkuCb+8j//2yiXk0a/T2f36zKMuZvujqQKBgC6B7BAQDG2H2B/ijofp12ejJU36nL98gAZyqOfpLJ+FeMz4TlBDQ+phIMhnHXA5UkdDapQ+zA3SrFk+6yGk9Vw4Hf46B+82SvOrSbmnMa+PYqKYIvUzR4gg34rL/7AhwnbEyD5hXq4dHwMNsIDq+l2elPjwm/U9V0gdAl2+r50HAoGALtsKqMvhv8HucAMBPrLikhXP/8um8mMKFMrzfqZ+otxfHzlhI0L08Bo3jQrb0Z7ByNY6M8epOmbCKADsbWcVre/AAY0ZkuSZK/CaOXNX/AhMKmKJh8qAOPRY02LIJRBCpfS4czEdnfUhYV/TYiFNnKRj57PPYZdTzUsxa/yVTmECgYBr7slQEjb5Onn5mZnGDh+72BxLNdgwBkhO0OCdpdISqk0F0Pxby22DFOKXZEpiyI9XYP1C8wPiJsShGm2yEwBPWXnrrZNWczaVuCbXHrZkWQogBDG3HGXNdU4MAWCyiYlyinIBpPpoAJZSzpGLmWbMWh28+RJS6AQX6KHrK1o2uw=='
12+
13+
// Creation of PeerInfo of Dialer Node (this node)
14+
const idA = PeerId.createFromPrivKey(privateKeyA)
15+
const peerA = new PeerInfo(idA)
16+
peerA.multiaddr.add(multiaddr('/ip4/0.0.0.0/tcp/0'))
17+
const nodeA = new libp2p.Node(peerA)
18+
19+
// Creation of PeerInfo of Listener Node
20+
const idB = PeerId.createFromPrivKey(privateKeyB)
21+
const peerB = new PeerInfo(idB)
22+
peerB.multiaddr.add(multiaddr('/ip4/0.0.0.0/tcp/10333'))
23+
24+
nodeA.start((err) => {
25+
if (err) {
26+
throw err
27+
}
28+
console.log('Dialer node is ready')
29+
console.log('->', peerA.multiaddrs[0].toString())
30+
console.log('->', peerA.id.toB58String())
31+
32+
let count = 0
33+
const p = nodeA.ping(peerB)
34+
p.on('ping', (time) => {
35+
console.log(time + 'ms')
36+
37+
if (++count === 10) {
38+
p.stop() // stop sending pings
39+
nodeA.stop(process.exit)
40+
}
41+
})
42+
})

‎examples/ping/node-listener.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict'
2+
/* eslint-disable no-console */
3+
4+
const PeerId = require('peer-id')
5+
const PeerInfo = require('peer-info')
6+
const libp2p = require('../../src')
7+
const multiaddr = require('multiaddr')
8+
9+
const privateKeyB = 'CAASpgkwggSiAgEAAoIBAQC2SKo/HMFZeBml1AF3XijzrxrfQXdJzjePBZAbdxqKR1Mc6juRHXij6HXYPjlAk01BhF1S3Ll4Lwi0cAHhggf457sMg55UWyeGKeUv0ucgvCpBwlR5cQ020i0MgzjPWOLWq1rtvSbNcAi2ZEVn6+Q2EcHo3wUvWRtLeKz+DZSZfw2PEDC+DGPJPl7f8g7zl56YymmmzH9liZLNrzg/qidokUv5u1pdGrcpLuPNeTODk0cqKB+OUbuKj9GShYECCEjaybJDl9276oalL9ghBtSeEv20kugatTvYy590wFlJkkvyl+nPxIH0EEYMKK9XRWlu9XYnoSfboiwcv8M3SlsjAgMBAAECggEAZtju/bcKvKFPz0mkHiaJcpycy9STKphorpCT83srBVQi59CdFU6Mj+aL/xt0kCPMVigJw8P3/YCEJ9J+rS8BsoWE+xWUEsJvtXoT7vzPHaAtM3ci1HZd302Mz1+GgS8Epdx+7F5p80XAFLDUnELzOzKftvWGZmWfSeDnslwVONkL/1VAzwKy7Ce6hk4SxRE7l2NE2OklSHOzCGU1f78ZzVYKSnS5Ag9YrGjOAmTOXDbKNKN/qIorAQ1bovzGoCwx3iGIatQKFOxyVCyO1PsJYT7JO+kZbhBWRRE+L7l+ppPER9bdLFxs1t5CrKc078h+wuUr05S1P1JjXk68pk3+kQKBgQDeK8AR11373Mzib6uzpjGzgNRMzdYNuExWjxyxAzz53NAR7zrPHvXvfIqjDScLJ4NcRO2TddhXAfZoOPVH5k4PJHKLBPKuXZpWlookCAyENY7+Pd55S8r+a+MusrMagYNljb5WbVTgN8cgdpim9lbbIFlpN6SZaVjLQL3J8TWH6wKBgQDSChzItkqWX11CNstJ9zJyUE20I7LrpyBJNgG1gtvz3ZMUQCn3PxxHtQzN9n1P0mSSYs+jBKPuoSyYLt1wwe10/lpgL4rkKWU3/m1Myt0tveJ9WcqHh6tzcAbb/fXpUFT/o4SWDimWkPkuCb+8j//2yiXk0a/T2f36zKMuZvujqQKBgC6B7BAQDG2H2B/ijofp12ejJU36nL98gAZyqOfpLJ+FeMz4TlBDQ+phIMhnHXA5UkdDapQ+zA3SrFk+6yGk9Vw4Hf46B+82SvOrSbmnMa+PYqKYIvUzR4gg34rL/7AhwnbEyD5hXq4dHwMNsIDq+l2elPjwm/U9V0gdAl2+r50HAoGALtsKqMvhv8HucAMBPrLikhXP/8um8mMKFMrzfqZ+otxfHzlhI0L08Bo3jQrb0Z7ByNY6M8epOmbCKADsbWcVre/AAY0ZkuSZK/CaOXNX/AhMKmKJh8qAOPRY02LIJRBCpfS4czEdnfUhYV/TYiFNnKRj57PPYZdTzUsxa/yVTmECgYBr7slQEjb5Onn5mZnGDh+72BxLNdgwBkhO0OCdpdISqk0F0Pxby22DFOKXZEpiyI9XYP1C8wPiJsShGm2yEwBPWXnrrZNWczaVuCbXHrZkWQogBDG3HGXNdU4MAWCyiYlyinIBpPpoAJZSzpGLmWbMWh28+RJS6AQX6KHrK1o2uw=='
10+
11+
const idB = PeerId.createFromPrivKey(privateKeyB)
12+
const peerB = new PeerInfo(idB)
13+
peerB.multiaddr.add(multiaddr('/ip4/0.0.0.0/tcp/10333'))
14+
const nodeB = new libp2p.Node(peerB)
15+
16+
nodeB.start((err) => {
17+
if (err) {
18+
throw err
19+
}
20+
21+
console.log('Listener node is ready')
22+
console.log('->', peerB.multiaddrs[0].toString())
23+
console.log('->', peerB.id.toB58String())
24+
})

‎package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"run-parallel": "^1.1.6"
4040
},
4141
"dependencies": {
42+
"libp2p-ping": "^0.1.3",
4243
"libp2p-secio": "^0.4.2",
4344
"libp2p-spdy": "^0.9.0",
4445
"libp2p-swarm": "^0.23.0",
@@ -67,4 +68,4 @@
6768
"Stephen Whitmore <stephen.whitmore@gmail.com>",
6869
"dignifiedquire <dignifiedquire@gmail.com>"
6970
]
70-
}
71+
}

‎src/index.js

+7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const secio = require('libp2p-secio')
99
const PeerId = require('peer-id')
1010
const PeerInfo = require('peer-info')
1111
const PeerBook = require('peer-book')
12+
const Ping = require('libp2p-ping')
1213
const multiaddr = require('multiaddr')
1314
const mafmt = require('mafmt')
1415
const EE = require('events').EventEmitter
@@ -197,6 +198,12 @@ exports.Node = function Node (pInfo, pBook) {
197198
return this.swarm.unhandle(protocol)
198199
}
199200

201+
Ping.attach(this.swarm) // Enable this peer to echo Ping requests
202+
203+
this.ping = (peerDst) => {
204+
return new Ping(this.swarm, peerDst) // Ping peerDst, peerDst must be a peer-info object
205+
}
206+
200207
this.discovery = new EE()
201208
this.routing = null
202209
this.records = null

‎test/libp2p.spec.js

+9
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,15 @@ describe('libp2p-ipfs', () => {
415415
}
416416
})
417417

418+
it('nodeE ping to nodeF', (done) => {
419+
const p = nodeE.ping(nodeF.peerInfo)
420+
421+
p.on('ping', (time) => {
422+
p.stop()
423+
done()
424+
})
425+
})
426+
418427
it('stop', (done) => {
419428
parallel([
420429
nodeA.stop,

0 commit comments

Comments
 (0)
This repository has been archived.