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
ce5c94e4
Commit
ce5c94e4
authored
Jun 19, 2015
by
Bas van Kervel
Committed by
Bas van Kervel
Jun 22, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added attach over http/rpc support
parent
f2025637
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
134 additions
and
6 deletions
+134
-6
comms.go
rpc/comms/comms.go
+23
-0
http.go
rpc/comms/http.go
+109
-5
ipc.go
rpc/comms/ipc.go
+2
-1
No files found.
rpc/comms/comms.go
View file @
ce5c94e4
...
...
@@ -7,6 +7,8 @@ import (
"fmt"
"strings"
"strconv"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/rpc/api"
...
...
@@ -82,7 +84,28 @@ func ClientFromEndpoint(endpoint string, c codec.Codec) (EthereumClient, error)
}
if
strings
.
HasPrefix
(
endpoint
,
"rpc:"
)
{
parts
:=
strings
.
Split
(
endpoint
,
":"
)
addr
:=
"http://localhost"
port
:=
uint
(
8545
)
if
len
(
parts
)
>=
3
{
addr
=
parts
[
1
]
+
":"
+
parts
[
2
]
}
if
len
(
parts
)
>=
4
{
p
,
err
:=
strconv
.
Atoi
(
parts
[
3
])
if
err
!=
nil
{
return
nil
,
err
}
port
=
uint
(
p
)
}
cfg
:=
HttpConfig
{
ListenAddress
:
addr
,
ListenPort
:
port
,
}
return
NewHttpClient
(
cfg
,
codec
.
JSON
),
nil
}
return
nil
,
fmt
.
Errorf
(
"Invalid endpoint"
)
...
...
rpc/comms/http.go
View file @
ce5c94e4
...
...
@@ -5,10 +5,14 @@ import (
"net/http"
"strings"
"bytes"
"io/ioutil"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/rpc/api"
"github.com/ethereum/go-ethereum/rpc/codec"
"github.com/ethereum/go-ethereum/rpc/shared"
"github.com/rs/cors"
)
...
...
@@ -65,13 +69,19 @@ func StopHttp() {
}
type
httpClient
struct
{
codec
codec
.
ApiCoder
address
string
port
uint
codec
codec
.
ApiCoder
lastRes
interface
{}
lastErr
error
}
// Create a new in process client
func
NewHttpClient
(
cfg
HttpConfig
,
c
odec
codec
.
Codec
)
*
httpClient
{
func
NewHttpClient
(
cfg
HttpConfig
,
c
codec
.
Codec
)
*
httpClient
{
return
&
httpClient
{
codec
:
codec
.
New
(
nil
),
address
:
cfg
.
ListenAddress
,
port
:
cfg
.
ListenPort
,
codec
:
c
.
New
(
nil
),
}
}
...
...
@@ -80,9 +90,103 @@ func (self *httpClient) Close() {
}
func
(
self
*
httpClient
)
Send
(
req
interface
{})
error
{
return
nil
var
body
[]
byte
var
err
error
self
.
lastRes
=
nil
self
.
lastErr
=
nil
if
body
,
err
=
self
.
codec
.
Encode
(
req
);
err
!=
nil
{
return
err
}
httpReq
,
err
:=
http
.
NewRequest
(
"POST"
,
fmt
.
Sprintf
(
"%s:%d"
,
self
.
address
,
self
.
port
),
bytes
.
NewBuffer
(
body
))
if
err
!=
nil
{
return
err
}
httpReq
.
Header
.
Set
(
"Content-Type"
,
"application/json"
)
client
:=
http
.
Client
{}
resp
,
err
:=
client
.
Do
(
httpReq
)
if
err
!=
nil
{
return
err
}
defer
resp
.
Body
.
Close
()
if
resp
.
Status
==
"200 OK"
{
reply
,
_
:=
ioutil
.
ReadAll
(
resp
.
Body
)
var
rpcSuccessResponse
shared
.
SuccessResponse
if
err
=
self
.
codec
.
Decode
(
reply
,
&
rpcSuccessResponse
);
err
==
nil
{
self
.
lastRes
=
rpcSuccessResponse
.
Result
self
.
lastErr
=
err
return
nil
}
else
{
var
rpcErrorResponse
shared
.
ErrorResponse
if
err
=
self
.
codec
.
Decode
(
reply
,
&
rpcErrorResponse
);
err
==
nil
{
self
.
lastRes
=
rpcErrorResponse
.
Error
self
.
lastErr
=
err
return
nil
}
else
{
return
err
}
}
}
return
fmt
.
Errorf
(
"Not implemented"
)
}
func
(
self
*
httpClient
)
Recv
()
(
interface
{},
error
)
{
return
nil
,
nil
return
self
.
lastRes
,
self
.
lastErr
}
func
(
self
*
httpClient
)
SupportedModules
()
(
map
[
string
]
string
,
error
)
{
var
body
[]
byte
var
err
error
payload
:=
shared
.
Request
{
Id
:
1
,
Jsonrpc
:
"2.0"
,
Method
:
"modules"
,
}
if
body
,
err
=
self
.
codec
.
Encode
(
payload
);
err
!=
nil
{
return
nil
,
err
}
req
,
err
:=
http
.
NewRequest
(
"POST"
,
fmt
.
Sprintf
(
"%s:%d"
,
self
.
address
,
self
.
port
),
bytes
.
NewBuffer
(
body
))
if
err
!=
nil
{
return
nil
,
err
}
req
.
Header
.
Set
(
"Content-Type"
,
"application/json"
)
client
:=
http
.
Client
{}
resp
,
err
:=
client
.
Do
(
req
)
if
err
!=
nil
{
return
nil
,
err
}
defer
resp
.
Body
.
Close
()
if
resp
.
Status
==
"200 OK"
{
reply
,
_
:=
ioutil
.
ReadAll
(
resp
.
Body
)
var
rpcRes
shared
.
SuccessResponse
if
err
=
self
.
codec
.
Decode
(
reply
,
&
rpcRes
);
err
!=
nil
{
return
nil
,
err
}
result
:=
make
(
map
[
string
]
string
)
if
modules
,
ok
:=
rpcRes
.
Result
.
(
map
[
string
]
interface
{});
ok
{
for
a
,
v
:=
range
modules
{
result
[
a
]
=
fmt
.
Sprintf
(
"%s"
,
v
)
}
return
result
,
nil
}
err
=
fmt
.
Errorf
(
"Unable to parse module response - %v"
,
rpcRes
.
Result
)
}
else
{
fmt
.
Printf
(
"resp.Status = %s
\n
"
,
resp
.
Status
)
fmt
.
Printf
(
"err = %v
\n
"
,
err
)
}
return
nil
,
err
}
rpc/comms/ipc.go
View file @
ce5c94e4
...
...
@@ -4,10 +4,11 @@ import (
"fmt"
"net"
"encoding/json"
"github.com/ethereum/go-ethereum/rpc/api"
"github.com/ethereum/go-ethereum/rpc/codec"
"github.com/ethereum/go-ethereum/rpc/shared"
"encoding/json"
)
type
IpcConfig
struct
{
...
...
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