Commit 78f95a6d1fe17f7747c2076c9ca3c86762b5e7f5
Merge branch 'master' into @cel/master
cel committed on 3/6/2017, 5:18:07 AMParent: c2147befb1738521c99a292e22e9fc7496e7e61f
Parent: 2df2c99636d2696c17aecdfff99b2f9b184d4c40
Files changed
.travis.yml | changed |
package.json | changed |
plugins/gossip.md | changed |
plugins/gossip/index.js | changed |
plugins/local.js | changed |
.travis.yml | ||
---|---|---|
@@ -1,4 +1,4 @@ | ||
1 | 1 … | language: node_js |
2 | 2 … | sudo: false |
3 | 3 … | node_js: |
4 | - - 'iojs-v2.5.0' | |
4 … | + - '6.9.5' |
package.json | ||
---|---|---|
@@ -1,8 +1,8 @@ | ||
1 | 1 … | { |
2 | 2 … | "name": "scuttlebot", |
3 | 3 … | "description": "network protocol layer for secure-scuttlebutt", |
4 | - "version": "9.4.3", | |
4 … | + "version": "9.4.4", | |
5 | 5 … | "homepage": "https://github.com/ssbc/scuttlebot", |
6 | 6 … | "repository": { |
7 | 7 … | "type": "git", |
8 | 8 … | "url": "git://github.com/ssbc/scuttlebot.git" |
plugins/gossip.md | ||
---|---|---|
@@ -36,8 +36,22 @@ | ||
36 | 36 … | - `host` (host string): IP address or hostname. |
37 | 37 … | - `port` (port number) |
38 | 38 … | - `key` (feedid) |
39 | 39 … | |
40 … | +## remove: sync | |
41 … | + | |
42 … | +Remove an address from the peer table. | |
43 … | + | |
44 … | +```bash | |
45 … | +remove {addr} | |
46 … | +remove --host {string} --port {number} --key {feedid} | |
47 … | +``` | |
48 … | + | |
49 … | +```js | |
50 … | +remove(addr) | |
51 … | +remove({ host:, port:, key: }) | |
52 … | +``` | |
53 … | + | |
40 | 54 … | ## ping: duplex |
41 | 55 … | |
42 | 56 … | used internally by the gossip plugin to measure latency and clock skew |
43 | 57 … |
plugins/gossip/index.js | ||
---|---|---|
@@ -150,8 +150,15 @@ | ||
150 | 150 … | f.announcers ++ |
151 | 151 … | |
152 | 152 … | return f |
153 | 153 … | }, 'string|object', 'string?'), |
154 … | + remove: function (addr) { | |
155 … | + var peer = gossip.get(addr) | |
156 … | + var index = peers.indexOf(peer) | |
157 … | + if (~index) { | |
158 … | + peers.splice(index, 1) | |
159 … | + } | |
160 … | + }, | |
154 | 161 … | ping: function (opts) { |
155 | 162 … | var timeout = config.timers && config.timers.ping || 5*60e3 |
156 | 163 … | //between 10 seconds and 30 minutes, default 5 min |
157 | 164 … | timeout = Math.max(10e3, Math.min(timeout, 30*60e3)) |
@@ -256,5 +263,4 @@ | ||
256 | 263 … | |
257 | 264 … | return gossip |
258 | 265 … | } |
259 | 266 … | } |
260 | - |
plugins/local.js | ||
---|---|---|
@@ -13,18 +13,35 @@ | ||
13 | 13 … | version: '2.0.0', |
14 | 14 … | init: function (sbot, config) { |
15 | 15 … | |
16 | 16 … | var local = broadcast(config.port) |
17 … | + var addrs = {} | |
18 … | + var lastSeen = {} | |
17 | 19 … | |
20 … | + // cleanup old local peers | |
21 … | + setInterval(function () { | |
22 … | + Object.keys(lastSeen).forEach((key) => { | |
23 … | + if (Date.now() - lastSeen[key] > 10e3) { | |
24 … | + sbot.gossip.remove(addrs[key]) | |
25 … | + delete lastSeen[key] | |
26 … | + } | |
27 … | + }) | |
28 … | + }, 5e3) | |
29 … | + | |
30 … | + // discover new local peers | |
18 | 31 … | local.on('data', function (buf) { |
19 | - if(buf.loopback) return | |
32 … | + if (buf.loopback) return | |
20 | 33 … | var data = buf.toString() |
21 | - if(ref.parseAddress(data)) | |
34 … | + var peer = ref.parseAddress(data) | |
35 … | + if (peer && peer.key !== sbot.id) { | |
36 … | + addrs[peer.key] = peer | |
37 … | + lastSeen[peer.key] = Date.now() | |
22 | 38 … | sbot.gossip.add(data, 'local') |
39 … | + } | |
23 | 40 … | }) |
24 | 41 … | |
42 … | + // broadcast self | |
25 | 43 … | setInterval(function () { |
26 | - // broadcast self | |
27 | 44 … | // TODO: sign beacons, so that receipient can be confidant |
28 | 45 … | // that is really your id. |
29 | 46 … | // (which means they can update their peer table) |
30 | 47 … | // Oh if this includes your local address, |
@@ -32,7 +49,4 @@ | ||
32 | 49 … | local.write(sbot.getAddress()) |
33 | 50 … | }, 1000) |
34 | 51 … | } |
35 | 52 … | } |
36 | - | |
37 | - | |
38 | - |
Built with git-ssb-web