-
Notifications
You must be signed in to change notification settings - Fork 0
/
Peer_keyfile.go
76 lines (69 loc) · 1.79 KB
/
Peer_keyfile.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package epsp
import (
"encoding/json"
"os"
"strings"
"time"
)
type keyFile struct {
PeerID string
SecKey string
PubKey string
Expire time.Time
KeySig string
Global bool
PeerCountByRegion PeerCounts
Peers []string
}
// SaveKey は、キーをセーブするメソッドです。
func (peer *Peer) SaveKey() {
var k keyFile
k.Expire = peer.keyExpire
k.KeySig = peer.keySig
k.PeerID = peer.PeerID
k.PubKey = peer.pubKey
k.SecKey = peer.secKey
k.Global = peer.Global
k.PeerCountByRegion = peer.PeerCountsByRegion
maxRxUniq := uint64(0)
for i := range peer.Clients {
rxUniq := peer.Clients[i].RxUniq
if maxRxUniq < rxUniq {
maxRxUniq = rxUniq
}
}
for i := range peer.Clients {
if maxRxUniq < 10 || peer.Clients[i].RxUniq <= maxRxUniq/10 { // maxRxUniq < 10 or save only useful peers.
k.Peers = append(k.Peers, strings.Replace(peer.Clients[i].IPPort, `:`, `,`, 1)+`,`+peer.Clients[i].PeerID)
}
}
keyfile, err := os.Create(peer.keyfilename)
if err != nil {
logln(`[WARN] SaveKey OpenFile` + err.Error())
return
}
if err = json.NewEncoder(keyfile).Encode(k); err != nil {
logln(`[WARN] SaveKey Encode` + err.Error())
return
}
}
// LoadKey は、キーをロードするメソッドです。
func (peer *Peer) LoadKey() (peers []string, err error) {
var k keyFile
keyfile, err := os.Open(peer.keyfilename)
if err != nil {
return nil, err
}
if err = json.NewDecoder(keyfile).Decode(&k); err != nil {
return nil, err
}
logln(`[INFO] ノード: 証明書有効期限`, k.Expire)
peer.keyExpire = k.Expire
peer.keySig = k.KeySig
peer.PeerID = k.PeerID
peer.pubKey = k.PubKey
peer.secKey = k.SecKey
peer.Global = k.Global
peer.PeerCountsByRegion = k.PeerCountByRegion
return k.Peers, nil
}