Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
1549a29c
Commit
1549a29c
authored
Sep 16, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Connect to previous peer
parent
66e309c5
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
63 additions
and
40 deletions
+63
-40
ethereum.go
ethereum.go
+54
-37
peer.go
peer.go
+9
-3
No files found.
ethereum.go
View file @
1549a29c
...
...
@@ -2,9 +2,11 @@ package eth
import
(
"container/list"
"encoding/json"
"fmt"
"math/rand"
"net"
"path"
"strconv"
"strings"
"sync"
...
...
@@ -31,9 +33,7 @@ var ethlogger = ethlog.NewLogger("SERV")
func
eachPeer
(
peers
*
list
.
List
,
callback
func
(
*
Peer
,
*
list
.
Element
))
{
// Loop thru the peers and close them (if we had them)
for
e
:=
peers
.
Front
();
e
!=
nil
;
e
=
e
.
Next
()
{
if
peer
,
ok
:=
e
.
Value
.
(
*
Peer
);
ok
{
callback
(
peer
,
e
)
}
callback
(
e
.
Value
.
(
*
Peer
),
e
)
}
}
...
...
@@ -399,47 +399,57 @@ func (s *Ethereum) Start(seed bool) {
}
func
(
s
*
Ethereum
)
Seed
()
{
ethlogger
.
Debugln
(
"Retrieving seed nodes"
)
// Eth-Go Bootstrapping
ips
,
er
:=
net
.
LookupIP
(
"seed.bysh.me"
)
if
er
==
nil
{
peers
:=
[]
string
{}
var
ips
[]
string
data
,
_
:=
ethutil
.
ReadAllFile
(
path
.
Join
(
ethutil
.
Config
.
ExecPath
,
"known_peers.json"
))
json
.
Unmarshal
([]
byte
(
data
),
&
ips
)
if
len
(
ips
)
>
0
{
for
_
,
ip
:=
range
ips
{
node
:=
fmt
.
Sprintf
(
"%s:%d"
,
ip
.
String
(),
30303
)
ethlogger
.
Debugln
(
"Found DNS Go Peer:"
,
node
)
peers
=
append
(
peers
,
node
)
ethlogger
.
Infoln
(
"Connecting to previous peer "
,
ip
)
s
.
ConnectToPeer
(
ip
)
}
}
else
{
ethlogger
.
Debugln
(
"Retrieving seed nodes"
)
// Eth-Go Bootstrapping
ips
,
er
:=
net
.
LookupIP
(
"seed.bysh.me"
)
if
er
==
nil
{
peers
:=
[]
string
{}
for
_
,
ip
:=
range
ips
{
node
:=
fmt
.
Sprintf
(
"%s:%d"
,
ip
.
String
(),
30303
)
ethlogger
.
Debugln
(
"Found DNS Go Peer:"
,
node
)
peers
=
append
(
peers
,
node
)
}
s
.
ProcessPeerList
(
peers
)
}
s
.
ProcessPeerList
(
peers
)
}
// Official DNS Bootstrapping
_
,
nodes
,
err
:=
net
.
LookupSRV
(
"eth"
,
"tcp"
,
"ethereum.org"
)
if
err
==
nil
{
peers
:=
[]
string
{}
// Iterate SRV nodes
for
_
,
n
:=
range
nodes
{
target
:=
n
.
Target
port
:=
strconv
.
Itoa
(
int
(
n
.
Port
))
// Resolve target to ip (Go returns list, so may resolve to multiple ips?)
addr
,
err
:=
net
.
LookupHost
(
target
)
if
err
==
nil
{
for
_
,
a
:=
range
addr
{
// Build string out of SRV port and Resolved IP
peer
:=
net
.
JoinHostPort
(
a
,
port
)
ethlogger
.
Debugln
(
"Found DNS Bootstrap Peer:"
,
peer
)
peers
=
append
(
peers
,
peer
)
// Official DNS Bootstrapping
_
,
nodes
,
err
:=
net
.
LookupSRV
(
"eth"
,
"tcp"
,
"ethereum.org"
)
if
err
==
nil
{
peers
:=
[]
string
{}
// Iterate SRV nodes
for
_
,
n
:=
range
nodes
{
target
:=
n
.
Target
port
:=
strconv
.
Itoa
(
int
(
n
.
Port
))
// Resolve target to ip (Go returns list, so may resolve to multiple ips?)
addr
,
err
:=
net
.
LookupHost
(
target
)
if
err
==
nil
{
for
_
,
a
:=
range
addr
{
// Build string out of SRV port and Resolved IP
peer
:=
net
.
JoinHostPort
(
a
,
port
)
ethlogger
.
Debugln
(
"Found DNS Bootstrap Peer:"
,
peer
)
peers
=
append
(
peers
,
peer
)
}
}
else
{
ethlogger
.
Debugln
(
"Couldn't resolve :"
,
target
)
}
}
else
{
ethlogger
.
Debugln
(
"Couldn't resolve :"
,
target
)
}
// Connect to Peer list
s
.
ProcessPeerList
(
peers
)
}
// Connect to Peer list
s
.
ProcessPeerList
(
peers
)
}
// XXX tmp
s
.
ConnectToPeer
(
seedNodeAddress
)
// XXX tmp
s
.
ConnectToPeer
(
seedNodeAddress
)
}
}
func
(
s
*
Ethereum
)
peerHandler
(
listener
net
.
Listener
)
{
...
...
@@ -459,6 +469,13 @@ func (s *Ethereum) Stop() {
// Close the database
defer
s
.
db
.
Close
()
var
ips
[]
string
eachPeer
(
s
.
peers
,
func
(
p
*
Peer
,
e
*
list
.
Element
)
{
ips
=
append
(
ips
,
p
.
conn
.
RemoteAddr
()
.
String
())
})
d
,
_
:=
json
.
MarshalIndent
(
ips
,
""
,
" "
)
ethutil
.
WriteFile
(
path
.
Join
(
ethutil
.
Config
.
ExecPath
,
"known_peers.json"
),
d
)
eachPeer
(
s
.
peers
,
func
(
p
*
Peer
,
e
*
list
.
Element
)
{
p
.
Stop
()
})
...
...
peer.go
View file @
1549a29c
...
...
@@ -680,7 +680,7 @@ func (p *Peer) handleHandshake(msg *ethwire.Msg) {
var
(
p2pVersion
=
c
.
Get
(
0
)
.
Uint
()
clientId
=
c
.
Get
(
1
)
.
Str
()
caps
=
c
.
Get
(
2
)
.
Raw
()
caps
=
c
.
Get
(
2
)
port
=
c
.
Get
(
3
)
.
Uint
()
pub
=
c
.
Get
(
4
)
.
Bytes
()
)
...
...
@@ -734,11 +734,17 @@ func (p *Peer) handleHandshake(msg *ethwire.Msg) {
p
.
ethereum
.
PushPeer
(
p
)
p
.
ethereum
.
reactor
.
Post
(
"peerList"
,
p
.
ethereum
.
Peers
())
ethlogger
.
Infof
(
"Added peer (%s) %d / %d (%v)
\n
"
,
p
.
conn
.
RemoteAddr
(),
p
.
ethereum
.
Peers
()
.
Len
(),
p
.
ethereum
.
MaxPeers
,
caps
)
ethlogger
.
Infof
(
"Added peer (%s) %d / %d (%v)
\n
"
,
p
.
conn
.
RemoteAddr
(),
p
.
ethereum
.
Peers
()
.
Len
(),
p
.
ethereum
.
MaxPeers
,
caps
.
Raw
()
)
peerlogger
.
Debugln
(
p
)
p
.
pushStatus
()
capsIt
:=
caps
.
NewIterator
()
for
capsIt
.
Next
()
{
switch
capsIt
.
Value
()
.
Str
()
{
case
"eth"
:
p
.
pushStatus
()
}
}
}
func
(
p
*
Peer
)
String
()
string
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment