WebSockets RPC server (#5425)
* Basic WS server. * CLI for WS server. * Bump jsonrpc * Fixing test.
This commit is contained in:
parent
1df30ee83e
commit
ea09aa584d
@ -541,7 +541,7 @@ test-windows:
|
|||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
script:
|
script:
|
||||||
- set RUST_BACKTRACE=1
|
- set RUST_BACKTRACE=1
|
||||||
- echo cargo test --features json-tests -p rlp -p ethash -p ethcore -p ethcore-bigint -p ethcore-dapps -p ethcore-rpc -p ethcore-signer -p ethcore-util -p ethcore-network -p ethcore-io -p ethkey -p ethstore -p ethsync -p ethcore-ipc -p ethcore-ipc-tests -p ethcore-ipc-nano -p parity %CARGOFLAGS% --verbose --release
|
- echo cargo test --features json-tests -p rlp -p ethash -p ethcore -p ethcore-bigint -p ethcore-dapps -p parity-rpc -p ethcore-signer -p ethcore-util -p ethcore-network -p ethcore-io -p ethkey -p ethstore -p ethsync -p ethcore-ipc -p ethcore-ipc-tests -p ethcore-ipc-nano -p parity %CARGOFLAGS% --verbose --release
|
||||||
tags:
|
tags:
|
||||||
- rust-windows
|
- rust-windows
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
139
Cargo.lock
generated
139
Cargo.lock
generated
@ -18,7 +18,6 @@ dependencies = [
|
|||||||
"ethcore-ipc-tests 0.1.0",
|
"ethcore-ipc-tests 0.1.0",
|
||||||
"ethcore-light 1.7.0",
|
"ethcore-light 1.7.0",
|
||||||
"ethcore-logger 1.7.0",
|
"ethcore-logger 1.7.0",
|
||||||
"ethcore-rpc 1.7.0",
|
|
||||||
"ethcore-secretstore 1.0.0",
|
"ethcore-secretstore 1.0.0",
|
||||||
"ethcore-signer 1.7.0",
|
"ethcore-signer 1.7.0",
|
||||||
"ethcore-stratum 1.7.0",
|
"ethcore-stratum 1.7.0",
|
||||||
@ -38,6 +37,7 @@ dependencies = [
|
|||||||
"parity-ipfs-api 1.7.0",
|
"parity-ipfs-api 1.7.0",
|
||||||
"parity-local-store 0.1.0",
|
"parity-local-store 0.1.0",
|
||||||
"parity-reactor 0.1.0",
|
"parity-reactor 0.1.0",
|
||||||
|
"parity-rpc 1.7.0",
|
||||||
"parity-rpc-client 1.4.0",
|
"parity-rpc-client 1.4.0",
|
||||||
"parity-updater 1.7.0",
|
"parity-updater 1.7.0",
|
||||||
"path 0.1.0",
|
"path 0.1.0",
|
||||||
@ -592,49 +592,6 @@ dependencies = [
|
|||||||
"tiny-keccak 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tiny-keccak 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ethcore-rpc"
|
|
||||||
version = "1.7.0"
|
|
||||||
dependencies = [
|
|
||||||
"cid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"clippy 0.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"ethash 1.7.0",
|
|
||||||
"ethcore 1.7.0",
|
|
||||||
"ethcore-devtools 1.7.0",
|
|
||||||
"ethcore-io 1.7.0",
|
|
||||||
"ethcore-ipc 1.7.0",
|
|
||||||
"ethcore-light 1.7.0",
|
|
||||||
"ethcore-logger 1.7.0",
|
|
||||||
"ethcore-util 1.7.0",
|
|
||||||
"ethcrypto 0.1.0",
|
|
||||||
"ethjson 0.1.0",
|
|
||||||
"ethkey 0.2.0",
|
|
||||||
"ethstore 0.1.0",
|
|
||||||
"ethsync 1.7.0",
|
|
||||||
"fetch 0.1.0",
|
|
||||||
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
|
||||||
"jsonrpc-http-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
|
||||||
"jsonrpc-ipc-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
|
||||||
"jsonrpc-macros 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
|
||||||
"jsonrpc-minihttp-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
|
||||||
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"multihash 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"order-stat 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"parity-reactor 0.1.0",
|
|
||||||
"parity-updater 1.7.0",
|
|
||||||
"rlp 0.1.0",
|
|
||||||
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"serde 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"serde_derive 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"stats 0.1.0",
|
|
||||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"transient-hashmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethcore-secretstore"
|
name = "ethcore-secretstore"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@ -674,12 +631,12 @@ dependencies = [
|
|||||||
"env_logger 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"env_logger 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ethcore-devtools 1.7.0",
|
"ethcore-devtools 1.7.0",
|
||||||
"ethcore-io 1.7.0",
|
"ethcore-io 1.7.0",
|
||||||
"ethcore-rpc 1.7.0",
|
|
||||||
"ethcore-util 1.7.0",
|
"ethcore-util 1.7.0",
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"parity-dapps-glue 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"parity-rpc 1.7.0",
|
||||||
"parity-ui 1.7.0",
|
"parity-ui 1.7.0",
|
||||||
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -1080,7 +1037,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-core"
|
name = "jsonrpc-core"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -1092,7 +1049,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-http-server"
|
name = "jsonrpc-http-server"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hyper 0.10.0-a.0 (git+https://github.com/paritytech/hyper)",
|
"hyper 0.10.0-a.0 (git+https://github.com/paritytech/hyper)",
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
@ -1105,7 +1062,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-ipc-server"
|
name = "jsonrpc-ipc-server"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
@ -1117,7 +1074,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-macros"
|
name = "jsonrpc-macros"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"jsonrpc-pubsub 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-pubsub 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
@ -1127,7 +1084,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-minihttp-server"
|
name = "jsonrpc-minihttp-server"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
@ -1141,7 +1098,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-pubsub"
|
name = "jsonrpc-pubsub"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -1151,7 +1108,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-server-utils"
|
name = "jsonrpc-server-utils"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -1162,7 +1119,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "jsonrpc-tcp-server"
|
name = "jsonrpc-tcp-server"
|
||||||
version = "7.0.0"
|
version = "7.0.0"
|
||||||
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#32c1c083139db50db6a5d532ccfc2004236dbfc3"
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
@ -1172,6 +1129,17 @@ dependencies = [
|
|||||||
"tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tokio-service 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jsonrpc-ws-server"
|
||||||
|
version = "7.0.0"
|
||||||
|
source = "git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7#ad0682785a693eba3069e48b57ec89abb62c3b60"
|
||||||
|
dependencies = [
|
||||||
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ws 0.6.0 (git+https://github.com/tomusdrw/ws-rs)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kernel32-sys"
|
name = "kernel32-sys"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
@ -1708,16 +1676,60 @@ dependencies = [
|
|||||||
"tokio-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tokio-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "parity-rpc"
|
||||||
|
version = "1.7.0"
|
||||||
|
dependencies = [
|
||||||
|
"cid 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"clippy 0.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ethash 1.7.0",
|
||||||
|
"ethcore 1.7.0",
|
||||||
|
"ethcore-devtools 1.7.0",
|
||||||
|
"ethcore-io 1.7.0",
|
||||||
|
"ethcore-ipc 1.7.0",
|
||||||
|
"ethcore-light 1.7.0",
|
||||||
|
"ethcore-logger 1.7.0",
|
||||||
|
"ethcore-util 1.7.0",
|
||||||
|
"ethcrypto 0.1.0",
|
||||||
|
"ethjson 0.1.0",
|
||||||
|
"ethkey 0.2.0",
|
||||||
|
"ethstore 0.1.0",
|
||||||
|
"ethsync 1.7.0",
|
||||||
|
"fetch 0.1.0",
|
||||||
|
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"jsonrpc-http-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"jsonrpc-ipc-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"jsonrpc-macros 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"jsonrpc-minihttp-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"jsonrpc-ws-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"multihash 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"order-stat 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"parity-reactor 0.1.0",
|
||||||
|
"parity-updater 1.7.0",
|
||||||
|
"rlp 0.1.0",
|
||||||
|
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_derive 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"stats 0.1.0",
|
||||||
|
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"transient-hashmap 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parity-rpc-client"
|
name = "parity-rpc-client"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ethcore-rpc 1.7.0",
|
|
||||||
"ethcore-signer 1.7.0",
|
"ethcore-signer 1.7.0",
|
||||||
"ethcore-util 1.7.0",
|
"ethcore-util 1.7.0",
|
||||||
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
"jsonrpc-core 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)",
|
||||||
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"parity-rpc 1.7.0",
|
||||||
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 0.9.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_json 0.9.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2081,9 +2093,9 @@ name = "rpc-cli"
|
|||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ethcore-bigint 0.1.2",
|
"ethcore-bigint 0.1.2",
|
||||||
"ethcore-rpc 1.7.0",
|
|
||||||
"ethcore-util 1.7.0",
|
"ethcore-util 1.7.0",
|
||||||
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
"futures 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"parity-rpc 1.7.0",
|
||||||
"parity-rpc-client 1.4.0",
|
"parity-rpc-client 1.4.0",
|
||||||
"rpassword 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rpassword 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
@ -2710,6 +2722,21 @@ dependencies = [
|
|||||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ws"
|
||||||
|
version = "0.6.0"
|
||||||
|
source = "git+https://github.com/tomusdrw/ws-rs#3259e7ca906c848beae109eb32e492871f8f397d"
|
||||||
|
dependencies = [
|
||||||
|
"bytes 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"httparse 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"mio 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ws2_32-sys"
|
name = "ws2_32-sys"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
@ -2824,6 +2851,7 @@ dependencies = [
|
|||||||
"checksum jsonrpc-pubsub 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)" = "<none>"
|
"checksum jsonrpc-pubsub 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)" = "<none>"
|
||||||
"checksum jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)" = "<none>"
|
"checksum jsonrpc-server-utils 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)" = "<none>"
|
||||||
"checksum jsonrpc-tcp-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)" = "<none>"
|
"checksum jsonrpc-tcp-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)" = "<none>"
|
||||||
|
"checksum jsonrpc-ws-server 7.0.0 (git+https://github.com/paritytech/jsonrpc.git?branch=parity-1.7)" = "<none>"
|
||||||
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
|
||||||
"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
|
"checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
|
||||||
"checksum lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "49247ec2a285bb3dcb23cbd9c35193c025e7251bfce77c1d5da97e6362dffe7f"
|
"checksum lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "49247ec2a285bb3dcb23cbd9c35193c025e7251bfce77c1d5da97e6362dffe7f"
|
||||||
@ -2981,6 +3009,7 @@ dependencies = [
|
|||||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||||
"checksum ws 0.5.3 (git+https://github.com/paritytech/ws-rs.git?branch=parity-1.7)" = "<none>"
|
"checksum ws 0.5.3 (git+https://github.com/paritytech/ws-rs.git?branch=parity-1.7)" = "<none>"
|
||||||
|
"checksum ws 0.6.0 (git+https://github.com/tomusdrw/ws-rs)" = "<none>"
|
||||||
"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
|
"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
|
||||||
"checksum xdg 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "77b831a5ba77110f438f0ac5583aafeb087f70432998ba6b7dcb1d32185db453"
|
"checksum xdg 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "77b831a5ba77110f438f0ac5583aafeb087f70432998ba6b7dcb1d32185db453"
|
||||||
"checksum xml-rs 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "65e74b96bd3179209dc70a980da6df843dff09e46eee103a0376c0949257e3ef"
|
"checksum xml-rs 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "65e74b96bd3179209dc70a980da6df843dff09e46eee103a0376c0949257e3ef"
|
||||||
|
10
Cargo.toml
10
Cargo.toml
@ -33,7 +33,6 @@ ethcore = { path = "ethcore" }
|
|||||||
ethcore-util = { path = "util" }
|
ethcore-util = { path = "util" }
|
||||||
ethcore-io = { path = "util/io" }
|
ethcore-io = { path = "util/io" }
|
||||||
ethcore-devtools = { path = "devtools" }
|
ethcore-devtools = { path = "devtools" }
|
||||||
ethcore-rpc = { path = "rpc" }
|
|
||||||
ethcore-signer = { path = "signer" }
|
ethcore-signer = { path = "signer" }
|
||||||
ethcore-ipc = { path = "ipc/rpc" }
|
ethcore-ipc = { path = "ipc/rpc" }
|
||||||
ethcore-ipc-nano = { path = "ipc/nano" }
|
ethcore-ipc-nano = { path = "ipc/nano" }
|
||||||
@ -45,12 +44,13 @@ ethkey = { path = "ethkey" }
|
|||||||
evmbin = { path = "evmbin" }
|
evmbin = { path = "evmbin" }
|
||||||
rlp = { path = "util/rlp" }
|
rlp = { path = "util/rlp" }
|
||||||
rpc-cli = { path = "rpc_cli" }
|
rpc-cli = { path = "rpc_cli" }
|
||||||
parity-rpc-client = { path = "rpc_client" }
|
|
||||||
parity-hash-fetch = { path = "hash-fetch" }
|
parity-hash-fetch = { path = "hash-fetch" }
|
||||||
parity-ipfs-api = { path = "ipfs" }
|
parity-ipfs-api = { path = "ipfs" }
|
||||||
parity-updater = { path = "updater" }
|
|
||||||
parity-reactor = { path = "util/reactor" }
|
|
||||||
parity-local-store = { path = "local-store" }
|
parity-local-store = { path = "local-store" }
|
||||||
|
parity-reactor = { path = "util/reactor" }
|
||||||
|
parity-rpc = { path = "rpc" }
|
||||||
|
parity-rpc-client = { path = "rpc_client" }
|
||||||
|
parity-updater = { path = "updater" }
|
||||||
path = { path = "util/path" }
|
path = { path = "util/path" }
|
||||||
|
|
||||||
parity-dapps = { path = "dapps", optional = true }
|
parity-dapps = { path = "dapps", optional = true }
|
||||||
@ -85,7 +85,7 @@ ui-precompiled = [
|
|||||||
dapps = ["parity-dapps"]
|
dapps = ["parity-dapps"]
|
||||||
ipc = ["ethcore/ipc", "ethsync/ipc"]
|
ipc = ["ethcore/ipc", "ethsync/ipc"]
|
||||||
jit = ["ethcore/jit"]
|
jit = ["ethcore/jit"]
|
||||||
dev = ["clippy", "ethcore/dev", "ethcore-util/dev", "ethsync/dev", "ethcore-rpc/dev", "parity-dapps/dev", "ethcore-signer/dev"]
|
dev = ["clippy", "ethcore/dev", "ethcore-util/dev", "ethsync/dev", "parity-rpc/dev", "parity-dapps/dev", "ethcore-signer/dev"]
|
||||||
json-tests = ["ethcore/json-tests"]
|
json-tests = ["ethcore/json-tests"]
|
||||||
test-heavy = ["ethcore/test-heavy"]
|
test-heavy = ["ethcore/test-heavy"]
|
||||||
ethkey-cli = ["ethcore/ethkey-cli"]
|
ethkey-cli = ["ethcore/ethkey-cli"]
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use hyper;
|
use hyper;
|
||||||
|
|
||||||
use ethcore_rpc::{Metadata, Origin};
|
use parity_rpc::{Metadata, Origin};
|
||||||
use jsonrpc_core::{Middleware, MetaIoHandler};
|
use jsonrpc_core::{Middleware, MetaIoHandler};
|
||||||
use jsonrpc_http_server::{self as http, AccessControlAllowOrigin, HttpMetaExtractor};
|
use jsonrpc_http_server::{self as http, AccessControlAllowOrigin, HttpMetaExtractor};
|
||||||
use jsonrpc_http_server::tokio_core::reactor::Remote;
|
use jsonrpc_http_server::tokio_core::reactor::Remote;
|
||||||
|
@ -52,6 +52,14 @@ cors = "null"
|
|||||||
apis = ["web3", "eth", "net", "parity", "traces", "rpc"]
|
apis = ["web3", "eth", "net", "parity", "traces", "rpc"]
|
||||||
hosts = ["none"]
|
hosts = ["none"]
|
||||||
|
|
||||||
|
[websockets]
|
||||||
|
disable = false
|
||||||
|
port = 8546
|
||||||
|
interface = "local"
|
||||||
|
origins = ["none"]
|
||||||
|
apis = ["web3", "eth", "net", "parity", "traces", "rpc"]
|
||||||
|
hosts = ["none"]
|
||||||
|
|
||||||
[ipc]
|
[ipc]
|
||||||
disable = false
|
disable = false
|
||||||
path = "$HOME/.parity/jsonrpc.ipc"
|
path = "$HOME/.parity/jsonrpc.ipc"
|
||||||
|
@ -24,6 +24,9 @@ allow_ips = "public"
|
|||||||
reserved_only = true
|
reserved_only = true
|
||||||
reserved_peers = "./path/to/reserved_peers"
|
reserved_peers = "./path/to/reserved_peers"
|
||||||
|
|
||||||
|
[websockets]
|
||||||
|
disable = true
|
||||||
|
origins = ["none"]
|
||||||
|
|
||||||
[rpc]
|
[rpc]
|
||||||
disable = true
|
disable = true
|
||||||
|
@ -170,6 +170,20 @@ usage! {
|
|||||||
flag_jsonrpc_threads: Option<usize> = None,
|
flag_jsonrpc_threads: Option<usize> = None,
|
||||||
or |c: &Config| otry!(c.rpc).threads.map(Some),
|
or |c: &Config| otry!(c.rpc).threads.map(Some),
|
||||||
|
|
||||||
|
// WS
|
||||||
|
flag_no_ws: bool = false,
|
||||||
|
or |c: &Config| otry!(c.websockets).disable.clone(),
|
||||||
|
flag_ws_port: u16 = 8546u16,
|
||||||
|
or |c: &Config| otry!(c.websockets).port.clone(),
|
||||||
|
flag_ws_interface: String = "local",
|
||||||
|
or |c: &Config| otry!(c.websockets).interface.clone(),
|
||||||
|
flag_ws_apis: String = "web3,eth,net,parity,traces,rpc",
|
||||||
|
or |c: &Config| otry!(c.websockets).apis.as_ref().map(|vec| vec.join(",")),
|
||||||
|
flag_ws_origins: String = "none",
|
||||||
|
or |c: &Config| otry!(c.websockets).origins.as_ref().map(|vec| vec.join(",")),
|
||||||
|
flag_ws_hosts: String = "none",
|
||||||
|
or |c: &Config| otry!(c.websockets).hosts.as_ref().map(|vec| vec.join(",")),
|
||||||
|
|
||||||
// IPC
|
// IPC
|
||||||
flag_no_ipc: bool = false,
|
flag_no_ipc: bool = false,
|
||||||
or |c: &Config| otry!(c.ipc).disable.clone(),
|
or |c: &Config| otry!(c.ipc).disable.clone(),
|
||||||
@ -363,6 +377,7 @@ struct Config {
|
|||||||
ui: Option<Ui>,
|
ui: Option<Ui>,
|
||||||
network: Option<Network>,
|
network: Option<Network>,
|
||||||
rpc: Option<Rpc>,
|
rpc: Option<Rpc>,
|
||||||
|
websockets: Option<Ws>,
|
||||||
ipc: Option<Ipc>,
|
ipc: Option<Ipc>,
|
||||||
dapps: Option<Dapps>,
|
dapps: Option<Dapps>,
|
||||||
secretstore: Option<SecretStore>,
|
secretstore: Option<SecretStore>,
|
||||||
@ -440,6 +455,16 @@ struct Rpc {
|
|||||||
threads: Option<usize>,
|
threads: Option<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, PartialEq, RustcDecodable)]
|
||||||
|
struct Ws {
|
||||||
|
disable: Option<bool>,
|
||||||
|
port: Option<u16>,
|
||||||
|
interface: Option<String>,
|
||||||
|
apis: Option<Vec<String>>,
|
||||||
|
origins: Option<Vec<String>>,
|
||||||
|
hosts: Option<Vec<String>>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, PartialEq, RustcDecodable)]
|
#[derive(Default, Debug, PartialEq, RustcDecodable)]
|
||||||
struct Ipc {
|
struct Ipc {
|
||||||
disable: Option<bool>,
|
disable: Option<bool>,
|
||||||
@ -554,7 +579,7 @@ struct Misc {
|
|||||||
mod tests {
|
mod tests {
|
||||||
use super::{
|
use super::{
|
||||||
Args, ArgsError,
|
Args, ArgsError,
|
||||||
Config, Operating, Account, Ui, Network, Rpc, Ipc, Dapps, Ipfs, Mining, Footprint,
|
Config, Operating, Account, Ui, Network, Ws, Rpc, Ipc, Dapps, Ipfs, Mining, Footprint,
|
||||||
Snapshots, VM, Misc, SecretStore,
|
Snapshots, VM, Misc, SecretStore,
|
||||||
};
|
};
|
||||||
use toml;
|
use toml;
|
||||||
@ -699,6 +724,14 @@ mod tests {
|
|||||||
flag_jsonrpc_hosts: "none".into(),
|
flag_jsonrpc_hosts: "none".into(),
|
||||||
flag_jsonrpc_threads: None,
|
flag_jsonrpc_threads: None,
|
||||||
|
|
||||||
|
// WS
|
||||||
|
flag_no_ws: false,
|
||||||
|
flag_ws_port: 8546u16,
|
||||||
|
flag_ws_interface: "local".into(),
|
||||||
|
flag_ws_apis: "web3,eth,net,parity,traces,rpc".into(),
|
||||||
|
flag_ws_origins: "none".into(),
|
||||||
|
flag_ws_hosts: "none".into(),
|
||||||
|
|
||||||
// IPC
|
// IPC
|
||||||
flag_no_ipc: false,
|
flag_no_ipc: false,
|
||||||
flag_ipc_path: "$HOME/.parity/jsonrpc.ipc".into(),
|
flag_ipc_path: "$HOME/.parity/jsonrpc.ipc".into(),
|
||||||
@ -899,6 +932,14 @@ mod tests {
|
|||||||
reserved_only: Some(true),
|
reserved_only: Some(true),
|
||||||
no_serve_light: None,
|
no_serve_light: None,
|
||||||
}),
|
}),
|
||||||
|
websockets: Some(Ws {
|
||||||
|
disable: Some(true),
|
||||||
|
port: None,
|
||||||
|
interface: None,
|
||||||
|
apis: None,
|
||||||
|
origins: Some(vec!["none".into()]),
|
||||||
|
hosts: None,
|
||||||
|
}),
|
||||||
rpc: Some(Rpc {
|
rpc: Some(Rpc {
|
||||||
disable: Some(true),
|
disable: Some(true),
|
||||||
port: Some(8180),
|
port: Some(8180),
|
||||||
|
@ -157,7 +157,28 @@ API and Console Options:
|
|||||||
vectors. Special options: "all", "none",
|
vectors. Special options: "all", "none",
|
||||||
(default: {flag_jsonrpc_hosts}).
|
(default: {flag_jsonrpc_hosts}).
|
||||||
--jsonrpc-threads THREADS Enables experimental faster implementation of JSON-RPC server.
|
--jsonrpc-threads THREADS Enables experimental faster implementation of JSON-RPC server.
|
||||||
Requires Dapps server to be disabled using --no-dapps. (default: {flag_jsonrpc_threads:?})
|
Requires Dapps server to be disabled
|
||||||
|
using --no-dapps. (default: {flag_jsonrpc_threads:?})
|
||||||
|
|
||||||
|
--no-ws Disable the WebSockets server. (default: {flag_no_ws})
|
||||||
|
--ws-port PORT Specify the port portion of the WebSockets server
|
||||||
|
(default: {flag_ws_port}).
|
||||||
|
--ws-interface IP Specify the hostname portion of the WebSockets
|
||||||
|
server, IP should be an interface's IP address, or
|
||||||
|
all (all interfaces) or local (default: {flag_ws_interface}).
|
||||||
|
--ws-apis APIS Specify the APIs available through the WebSockets
|
||||||
|
interface. APIS is a comma-delimited list of API
|
||||||
|
name. Possible name are web3, eth, net, personal,
|
||||||
|
parity, parity_set, traces, rpc, parity_accounts.
|
||||||
|
(default: {flag_ws_apis}).
|
||||||
|
--ws-origins URL Specify Origin header values allowed to connect.
|
||||||
|
Special options: "all", "none".
|
||||||
|
(default: {flag_ws_origins})
|
||||||
|
--ws-hosts HOSTS List of allowed Host header values. This option will
|
||||||
|
validate the Host header sent by the browser, it
|
||||||
|
is additional security against some attack
|
||||||
|
vectors. Special options: "all", "none",
|
||||||
|
(default: {flag_ws_hosts}).
|
||||||
|
|
||||||
--no-ipc Disable JSON-RPC over IPC service. (default: {flag_no_ipc})
|
--no-ipc Disable JSON-RPC over IPC service. (default: {flag_no_ipc})
|
||||||
--ipc-path PATH Specify custom path for JSON-RPC over IPC service
|
--ipc-path PATH Specify custom path for JSON-RPC over IPC service
|
||||||
|
@ -30,9 +30,9 @@ use ethcore::client::{VMType};
|
|||||||
use ethcore::miner::{MinerOptions, Banning, StratumOptions};
|
use ethcore::miner::{MinerOptions, Banning, StratumOptions};
|
||||||
use ethcore::verification::queue::VerifierSettings;
|
use ethcore::verification::queue::VerifierSettings;
|
||||||
|
|
||||||
use rpc::{IpcConfiguration, HttpConfiguration};
|
use rpc::{IpcConfiguration, HttpConfiguration, WsConfiguration};
|
||||||
use rpc_apis::ApiSet;
|
use rpc_apis::ApiSet;
|
||||||
use ethcore_rpc::NetworkSettings;
|
use parity_rpc::NetworkSettings;
|
||||||
use cache::CacheConfig;
|
use cache::CacheConfig;
|
||||||
use helpers::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_price, replace_home, replace_home_for_db,
|
use helpers::{to_duration, to_mode, to_block_id, to_u256, to_pending_set, to_price, replace_home, replace_home_for_db,
|
||||||
geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address, to_gas_limit, to_queue_strategy};
|
geth_ipc_path, parity_ipc_path, to_bootnodes, to_addresses, to_address, to_gas_limit, to_queue_strategy};
|
||||||
@ -114,6 +114,7 @@ impl Configuration {
|
|||||||
};
|
};
|
||||||
let update_policy = self.update_policy()?;
|
let update_policy = self.update_policy()?;
|
||||||
let logger_config = self.logger_config();
|
let logger_config = self.logger_config();
|
||||||
|
let ws_conf = self.ws_config()?;
|
||||||
let http_conf = self.http_config()?;
|
let http_conf = self.http_config()?;
|
||||||
let ipc_conf = self.ipc_config()?;
|
let ipc_conf = self.ipc_config()?;
|
||||||
let net_conf = self.net_config()?;
|
let net_conf = self.net_config()?;
|
||||||
@ -352,6 +353,7 @@ impl Configuration {
|
|||||||
daemon: daemon,
|
daemon: daemon,
|
||||||
logger_config: logger_config.clone(),
|
logger_config: logger_config.clone(),
|
||||||
miner_options: miner_options,
|
miner_options: miner_options,
|
||||||
|
ws_conf: ws_conf,
|
||||||
http_conf: http_conf,
|
http_conf: http_conf,
|
||||||
ipc_conf: ipc_conf,
|
ipc_conf: ipc_conf,
|
||||||
net_conf: net_conf,
|
net_conf: net_conf,
|
||||||
@ -757,6 +759,14 @@ impl Configuration {
|
|||||||
Self::hosts(&self.args.flag_jsonrpc_hosts)
|
Self::hosts(&self.args.flag_jsonrpc_hosts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn ws_hosts(&self) -> Option<Vec<String>> {
|
||||||
|
Self::hosts(&self.args.flag_ws_hosts)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn ws_origins(&self) -> Option<Vec<String>> {
|
||||||
|
Self::hosts(&self.args.flag_ws_origins)
|
||||||
|
}
|
||||||
|
|
||||||
fn ipfs_hosts(&self) -> Option<Vec<String>> {
|
fn ipfs_hosts(&self) -> Option<Vec<String>> {
|
||||||
Self::hosts(&self.args.flag_ipfs_api_hosts)
|
Self::hosts(&self.args.flag_ipfs_api_hosts)
|
||||||
}
|
}
|
||||||
@ -801,6 +811,19 @@ impl Configuration {
|
|||||||
Ok(conf)
|
Ok(conf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn ws_config(&self) -> Result<WsConfiguration, String> {
|
||||||
|
let conf = WsConfiguration {
|
||||||
|
enabled: self.ws_enabled(),
|
||||||
|
interface: self.ws_interface(),
|
||||||
|
port: self.args.flag_ws_port,
|
||||||
|
apis: self.args.flag_ws_apis.parse()?,
|
||||||
|
hosts: self.ws_hosts(),
|
||||||
|
origins: self.ws_origins()
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(conf)
|
||||||
|
}
|
||||||
|
|
||||||
fn network_settings(&self) -> NetworkSettings {
|
fn network_settings(&self) -> NetworkSettings {
|
||||||
NetworkSettings {
|
NetworkSettings {
|
||||||
name: self.args.flag_identity.clone(),
|
name: self.args.flag_identity.clone(),
|
||||||
@ -913,6 +936,10 @@ impl Configuration {
|
|||||||
Self::interface(&self.network_settings().rpc_interface)
|
Self::interface(&self.network_settings().rpc_interface)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn ws_interface(&self) -> String {
|
||||||
|
Self::interface(&self.args.flag_ws_interface)
|
||||||
|
}
|
||||||
|
|
||||||
fn ipfs_interface(&self) -> String {
|
fn ipfs_interface(&self) -> String {
|
||||||
Self::interface(&self.args.flag_ipfs_api_interface)
|
Self::interface(&self.args.flag_ipfs_api_interface)
|
||||||
}
|
}
|
||||||
@ -965,6 +992,10 @@ impl Configuration {
|
|||||||
!self.args.flag_jsonrpc_off && !self.args.flag_no_jsonrpc
|
!self.args.flag_jsonrpc_off && !self.args.flag_no_jsonrpc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn ws_enabled(&self) -> bool {
|
||||||
|
!self.args.flag_no_ws
|
||||||
|
}
|
||||||
|
|
||||||
fn dapps_enabled(&self) -> bool {
|
fn dapps_enabled(&self) -> bool {
|
||||||
!self.args.flag_dapps_off && !self.args.flag_no_dapps && self.rpc_enabled() && cfg!(feature = "dapps")
|
!self.args.flag_dapps_off && !self.args.flag_no_dapps && self.rpc_enabled() && cfg!(feature = "dapps")
|
||||||
}
|
}
|
||||||
@ -1000,7 +1031,7 @@ impl Configuration {
|
|||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use cli::Args;
|
use cli::Args;
|
||||||
use ethcore_rpc::NetworkSettings;
|
use parity_rpc::NetworkSettings;
|
||||||
use ethcore::client::{VMType, BlockId};
|
use ethcore::client::{VMType, BlockId};
|
||||||
use ethcore::miner::{MinerOptions, PrioritizationStrategy};
|
use ethcore::miner::{MinerOptions, PrioritizationStrategy};
|
||||||
use helpers::{default_network_config};
|
use helpers::{default_network_config};
|
||||||
@ -1204,6 +1235,7 @@ mod tests {
|
|||||||
daemon: None,
|
daemon: None,
|
||||||
logger_config: Default::default(),
|
logger_config: Default::default(),
|
||||||
miner_options: Default::default(),
|
miner_options: Default::default(),
|
||||||
|
ws_conf: Default::default(),
|
||||||
http_conf: Default::default(),
|
http_conf: Default::default(),
|
||||||
ipc_conf: Default::default(),
|
ipc_conf: Default::default(),
|
||||||
net_conf: default_network_config(),
|
net_conf: default_network_config(),
|
||||||
|
@ -109,7 +109,7 @@ pub use self::server::{SyncStatus, Middleware, dapps_middleware};
|
|||||||
mod server {
|
mod server {
|
||||||
use super::Dependencies;
|
use super::Dependencies;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use ethcore_rpc::{hyper, RequestMiddleware, RequestMiddlewareAction};
|
use parity_rpc::{hyper, RequestMiddleware, RequestMiddlewareAction};
|
||||||
|
|
||||||
pub type SyncStatus = Fn() -> bool;
|
pub type SyncStatus = Fn() -> bool;
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@ use ethcore::service::ClientIoMessage;
|
|||||||
use ethcore::snapshot::service::Service as SnapshotService;
|
use ethcore::snapshot::service::Service as SnapshotService;
|
||||||
use ethcore::snapshot::{RestorationStatus, SnapshotService as SS};
|
use ethcore::snapshot::{RestorationStatus, SnapshotService as SS};
|
||||||
use number_prefix::{binary_prefix, Standalone, Prefixed};
|
use number_prefix::{binary_prefix, Standalone, Prefixed};
|
||||||
use ethcore_rpc::{is_major_importing};
|
use parity_rpc::{is_major_importing};
|
||||||
use ethcore_rpc::informant::RpcStats;
|
use parity_rpc::informant::RpcStats;
|
||||||
|
|
||||||
pub struct Informant {
|
pub struct Informant {
|
||||||
report: RwLock<Option<ClientReport>>,
|
report: RwLock<Option<ClientReport>>,
|
||||||
|
@ -51,18 +51,18 @@ extern crate ethcore_ipc_hypervisor as hypervisor;
|
|||||||
extern crate ethcore_ipc_nano as nanoipc;
|
extern crate ethcore_ipc_nano as nanoipc;
|
||||||
extern crate ethcore_light as light;
|
extern crate ethcore_light as light;
|
||||||
extern crate ethcore_logger;
|
extern crate ethcore_logger;
|
||||||
extern crate ethcore_rpc;
|
|
||||||
extern crate ethcore_signer;
|
extern crate ethcore_signer;
|
||||||
extern crate ethcore_util as util;
|
extern crate ethcore_util as util;
|
||||||
extern crate ethkey;
|
extern crate ethkey;
|
||||||
extern crate ethsync;
|
extern crate ethsync;
|
||||||
extern crate parity_hash_fetch as hash_fetch;
|
extern crate parity_hash_fetch as hash_fetch;
|
||||||
extern crate parity_ipfs_api;
|
extern crate parity_ipfs_api;
|
||||||
extern crate parity_reactor;
|
|
||||||
extern crate parity_updater as updater;
|
|
||||||
extern crate parity_local_store as local_store;
|
extern crate parity_local_store as local_store;
|
||||||
extern crate rpc_cli;
|
extern crate parity_reactor;
|
||||||
|
extern crate parity_rpc;
|
||||||
|
extern crate parity_updater as updater;
|
||||||
extern crate path;
|
extern crate path;
|
||||||
|
extern crate rpc_cli;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log as rlog;
|
extern crate log as rlog;
|
||||||
|
121
parity/rpc.rs
121
parity/rpc.rs
@ -14,19 +14,20 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
use std::{io, fmt};
|
use std::io;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use dapps;
|
use dapps;
|
||||||
use dir::default_data_path;
|
use dir::default_data_path;
|
||||||
use ethcore_rpc::informant::{RpcStats, Middleware};
|
use parity_rpc::informant::{RpcStats, Middleware};
|
||||||
use ethcore_rpc::{self as rpc, HttpServerError, Metadata, Origin, AccessControlAllowOrigin, Host};
|
use parity_rpc::{self as rpc, HttpServerError, Metadata, Origin, DomainsValidation};
|
||||||
use helpers::parity_ipc_path;
|
use helpers::parity_ipc_path;
|
||||||
use jsonrpc_core::MetaIoHandler;
|
use jsonrpc_core::MetaIoHandler;
|
||||||
use parity_reactor::TokioRemote;
|
use parity_reactor::TokioRemote;
|
||||||
use rpc_apis::{self, ApiSet};
|
use rpc_apis::{self, ApiSet};
|
||||||
|
|
||||||
pub use ethcore_rpc::{IpcServer, HttpServer, RequestMiddleware};
|
pub use parity_rpc::{IpcServer, HttpServer, RequestMiddleware};
|
||||||
|
pub use parity_rpc::ws::Server as WsServer;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub struct HttpConfiguration {
|
pub struct HttpConfiguration {
|
||||||
@ -71,12 +72,25 @@ impl Default for IpcConfiguration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for IpcConfiguration {
|
#[derive(Debug, PartialEq)]
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
pub struct WsConfiguration {
|
||||||
if self.enabled {
|
pub enabled: bool,
|
||||||
write!(f, "endpoint address [{}], api list [{:?}]", self.socket_addr, self.apis)
|
pub interface: String,
|
||||||
} else {
|
pub port: u16,
|
||||||
write!(f, "disabled")
|
pub apis: ApiSet,
|
||||||
|
pub origins: Option<Vec<String>>,
|
||||||
|
pub hosts: Option<Vec<String>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for WsConfiguration {
|
||||||
|
fn default() -> Self {
|
||||||
|
WsConfiguration {
|
||||||
|
enabled: true,
|
||||||
|
interface: "127.0.0.1".into(),
|
||||||
|
port: 8546,
|
||||||
|
apis: ApiSet::UnsafeContext,
|
||||||
|
origins: Some(Vec::new()),
|
||||||
|
hosts: Some(Vec::new()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,12 +126,71 @@ impl rpc::IpcMetaExtractor<Metadata> for RpcExtractor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl rpc::ws::MetaExtractor<Metadata> for RpcExtractor {
|
||||||
|
fn extract(&self, req: &rpc::ws::RequestContext) -> Metadata {
|
||||||
|
let mut metadata = Metadata::default();
|
||||||
|
let id = req.session_id as u64;
|
||||||
|
metadata.origin = Origin::Ws(id.into());
|
||||||
|
metadata
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct WsStats {
|
||||||
|
stats: Arc<RpcStats>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl rpc::ws::SessionStats for WsStats {
|
||||||
|
fn open_session(&self, _id: rpc::ws::SessionId) {
|
||||||
|
self.stats.open_session()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn close_session(&self, _id: rpc::ws::SessionId) {
|
||||||
|
self.stats.close_session()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn setup_apis<D>(apis: ApiSet, deps: &Dependencies<D>) -> MetaIoHandler<Metadata, Middleware<D::Notifier>>
|
fn setup_apis<D>(apis: ApiSet, deps: &Dependencies<D>) -> MetaIoHandler<Metadata, Middleware<D::Notifier>>
|
||||||
where D: rpc_apis::Dependencies
|
where D: rpc_apis::Dependencies
|
||||||
{
|
{
|
||||||
rpc_apis::setup_rpc(deps.stats.clone(), &*deps.apis, apis)
|
rpc_apis::setup_rpc(deps.stats.clone(), &*deps.apis, apis)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn new_ws<D: rpc_apis::Dependencies>(
|
||||||
|
conf: WsConfiguration,
|
||||||
|
deps: &Dependencies<D>,
|
||||||
|
) -> Result<Option<WsServer>, String> {
|
||||||
|
if !conf.enabled {
|
||||||
|
return Ok(None);
|
||||||
|
}
|
||||||
|
|
||||||
|
let url = format!("{}:{}", conf.interface, conf.port);
|
||||||
|
let addr = url.parse().map_err(|_| format!("Invalid WebSockets listen host/port given: {}", url))?;
|
||||||
|
let handler = setup_apis(conf.apis, deps);
|
||||||
|
let remote = deps.remote.clone();
|
||||||
|
let allowed_origins = into_domains(conf.origins);
|
||||||
|
let allowed_hosts = into_domains(conf.hosts);
|
||||||
|
|
||||||
|
let start_result = rpc::start_ws(
|
||||||
|
&addr,
|
||||||
|
handler,
|
||||||
|
remote,
|
||||||
|
allowed_origins,
|
||||||
|
allowed_hosts,
|
||||||
|
RpcExtractor,
|
||||||
|
WsStats {
|
||||||
|
stats: deps.stats.clone(),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
match start_result {
|
||||||
|
Ok(server) => Ok(Some(server)),
|
||||||
|
Err(rpc::ws::Error::Io(ref err)) if err.kind() == io::ErrorKind::AddrInUse => Err(
|
||||||
|
format!("WebSockets address {} is already in use, make sure that another instance of an Ethereum client is not running or change the address using the --ws-port and --ws-interface options.", url)
|
||||||
|
),
|
||||||
|
Err(e) => Err(format!("WebSockets error: {:?}", e)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn new_http<D: rpc_apis::Dependencies>(
|
pub fn new_http<D: rpc_apis::Dependencies>(
|
||||||
conf: HttpConfiguration,
|
conf: HttpConfiguration,
|
||||||
deps: &Dependencies<D>,
|
deps: &Dependencies<D>,
|
||||||
@ -128,17 +201,17 @@ pub fn new_http<D: rpc_apis::Dependencies>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let url = format!("{}:{}", conf.interface, conf.port);
|
let url = format!("{}:{}", conf.interface, conf.port);
|
||||||
let addr = url.parse().map_err(|_| format!("Invalid JSONRPC listen host/port given: {}", url))?;
|
let addr = url.parse().map_err(|_| format!("Invalid HTTP JSON-RPC listen host/port given: {}", url))?;
|
||||||
let handler = setup_apis(conf.apis, deps);
|
let handler = setup_apis(conf.apis, deps);
|
||||||
let remote = deps.remote.clone();
|
let remote = deps.remote.clone();
|
||||||
|
|
||||||
let cors_domains: Option<Vec<_>> = conf.cors.map(|domains| domains.into_iter().map(AccessControlAllowOrigin::from).collect());
|
let cors_domains = into_domains(conf.cors);
|
||||||
let allowed_hosts: Option<Vec<_>> = conf.hosts.map(|hosts| hosts.into_iter().map(Host::from).collect());
|
let allowed_hosts = into_domains(conf.hosts);
|
||||||
|
|
||||||
let start_result = rpc::start_http(
|
let start_result = rpc::start_http(
|
||||||
&addr,
|
&addr,
|
||||||
cors_domains.into(),
|
cors_domains,
|
||||||
allowed_hosts.into(),
|
allowed_hosts,
|
||||||
handler,
|
handler,
|
||||||
remote,
|
remote,
|
||||||
RpcExtractor,
|
RpcExtractor,
|
||||||
@ -153,16 +226,17 @@ pub fn new_http<D: rpc_apis::Dependencies>(
|
|||||||
|
|
||||||
match start_result {
|
match start_result {
|
||||||
Ok(server) => Ok(Some(server)),
|
Ok(server) => Ok(Some(server)),
|
||||||
Err(HttpServerError::Io(err)) => match err.kind() {
|
Err(HttpServerError::Io(ref err)) if err.kind() == io::ErrorKind::AddrInUse => Err(
|
||||||
io::ErrorKind::AddrInUse => Err(
|
format!("HTTP address {} is already in use, make sure that another instance of an Ethereum client is not running or change the address using the --jsonrpc-port and --jsonrpc-interface options.", url)
|
||||||
format!("RPC address {} is already in use, make sure that another instance of an Ethereum client is not running or change the address using the --jsonrpc-port and --jsonrpc-interface options.", url)
|
|
||||||
),
|
),
|
||||||
_ => Err(format!("RPC io error: {}", err)),
|
Err(e) => Err(format!("HTTP error: {:?}", e)),
|
||||||
},
|
|
||||||
Err(e) => Err(format!("RPC error: {:?}", e)),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn into_domains<T: From<String>>(items: Option<Vec<String>>) -> DomainsValidation<T> {
|
||||||
|
items.map(|vals| vals.into_iter().map(T::from).collect()).into()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn new_ipc<D: rpc_apis::Dependencies>(
|
pub fn new_ipc<D: rpc_apis::Dependencies>(
|
||||||
conf: IpcConfiguration,
|
conf: IpcConfiguration,
|
||||||
dependencies: &Dependencies<D>
|
dependencies: &Dependencies<D>
|
||||||
@ -170,18 +244,19 @@ pub fn new_ipc<D: rpc_apis::Dependencies>(
|
|||||||
if !conf.enabled {
|
if !conf.enabled {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
let handler = setup_apis(conf.apis, dependencies);
|
let handler = setup_apis(conf.apis, dependencies);
|
||||||
let remote = dependencies.remote.clone();
|
let remote = dependencies.remote.clone();
|
||||||
match rpc::start_ipc(&conf.socket_addr, handler, remote, RpcExtractor) {
|
match rpc::start_ipc(&conf.socket_addr, handler, remote, RpcExtractor) {
|
||||||
Ok(server) => Ok(Some(server)),
|
Ok(server) => Ok(Some(server)),
|
||||||
Err(io_error) => Err(format!("RPC io error: {}", io_error)),
|
Err(io_error) => Err(format!("IPC error: {}", io_error)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::RpcExtractor;
|
use super::RpcExtractor;
|
||||||
use ethcore_rpc::{HttpMetaExtractor, Origin};
|
use parity_rpc::{HttpMetaExtractor, Origin};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn should_extract_rpc_origin() {
|
fn should_extract_rpc_origin() {
|
||||||
|
@ -20,15 +20,15 @@ use std::collections::HashSet;
|
|||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
pub use ethcore_rpc::SignerService;
|
pub use parity_rpc::SignerService;
|
||||||
|
|
||||||
use ethcore::account_provider::AccountProvider;
|
use ethcore::account_provider::AccountProvider;
|
||||||
use ethcore::client::Client;
|
use ethcore::client::Client;
|
||||||
use ethcore::miner::{Miner, ExternalMiner};
|
use ethcore::miner::{Miner, ExternalMiner};
|
||||||
use ethcore::snapshot::SnapshotService;
|
use ethcore::snapshot::SnapshotService;
|
||||||
use ethcore_rpc::{Metadata, NetworkSettings};
|
use parity_rpc::{Metadata, NetworkSettings};
|
||||||
use ethcore_rpc::informant::{ActivityNotifier, Middleware, RpcStats, ClientNotifier};
|
use parity_rpc::informant::{ActivityNotifier, Middleware, RpcStats, ClientNotifier};
|
||||||
use ethcore_rpc::dispatch::{FullDispatcher, LightDispatcher};
|
use parity_rpc::dispatch::{FullDispatcher, LightDispatcher};
|
||||||
use ethsync::{ManageNetwork, SyncProvider, LightSync};
|
use ethsync::{ManageNetwork, SyncProvider, LightSync};
|
||||||
use hash_fetch::fetch::Client as FetchClient;
|
use hash_fetch::fetch::Client as FetchClient;
|
||||||
use jsonrpc_core::{MetaIoHandler};
|
use jsonrpc_core::{MetaIoHandler};
|
||||||
@ -203,7 +203,7 @@ impl Dependencies for FullDependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn extend_with_set(&self, handler: &mut MetaIoHandler<Metadata, Middleware>, apis: &[Api]) {
|
fn extend_with_set(&self, handler: &mut MetaIoHandler<Metadata, Middleware>, apis: &[Api]) {
|
||||||
use ethcore_rpc::v1::*;
|
use parity_rpc::v1::*;
|
||||||
|
|
||||||
macro_rules! add_signing_methods {
|
macro_rules! add_signing_methods {
|
||||||
($namespace:ident, $handler:expr, $deps:expr) => {
|
($namespace:ident, $handler:expr, $deps:expr) => {
|
||||||
@ -331,7 +331,7 @@ impl Dependencies for LightDependencies {
|
|||||||
|
|
||||||
fn activity_notifier(&self) -> Self::Notifier { LightClientNotifier }
|
fn activity_notifier(&self) -> Self::Notifier { LightClientNotifier }
|
||||||
fn extend_with_set(&self, handler: &mut MetaIoHandler<Metadata, Middleware<Self::Notifier>>, apis: &[Api]) {
|
fn extend_with_set(&self, handler: &mut MetaIoHandler<Metadata, Middleware<Self::Notifier>>, apis: &[Api]) {
|
||||||
use ethcore_rpc::v1::*;
|
use parity_rpc::v1::*;
|
||||||
|
|
||||||
let dispatcher = LightDispatcher::new(
|
let dispatcher = LightDispatcher::new(
|
||||||
self.sync.clone(),
|
self.sync.clone(),
|
||||||
|
@ -18,7 +18,7 @@ use std::sync::Arc;
|
|||||||
use std::net::{TcpListener};
|
use std::net::{TcpListener};
|
||||||
use ctrlc::CtrlC;
|
use ctrlc::CtrlC;
|
||||||
use fdlimit::raise_fd_limit;
|
use fdlimit::raise_fd_limit;
|
||||||
use ethcore_rpc::{NetworkSettings, informant, is_major_importing};
|
use parity_rpc::{NetworkSettings, informant, is_major_importing};
|
||||||
use ethsync::NetworkConfiguration;
|
use ethsync::NetworkConfiguration;
|
||||||
use util::{Colour, version, Mutex, Condvar};
|
use util::{Colour, version, Mutex, Condvar};
|
||||||
use io::{MayPanic, ForwardPanic, PanicHandler};
|
use io::{MayPanic, ForwardPanic, PanicHandler};
|
||||||
@ -80,6 +80,7 @@ pub struct RunCmd {
|
|||||||
pub daemon: Option<String>,
|
pub daemon: Option<String>,
|
||||||
pub logger_config: LogConfig,
|
pub logger_config: LogConfig,
|
||||||
pub miner_options: MinerOptions,
|
pub miner_options: MinerOptions,
|
||||||
|
pub ws_conf: rpc::WsConfiguration,
|
||||||
pub http_conf: rpc::HttpConfiguration,
|
pub http_conf: rpc::HttpConfiguration,
|
||||||
pub ipc_conf: rpc::IpcConfiguration,
|
pub ipc_conf: rpc::IpcConfiguration,
|
||||||
pub net_conf: NetworkConfiguration,
|
pub net_conf: NetworkConfiguration,
|
||||||
@ -295,7 +296,8 @@ fn execute_light(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) ->
|
|||||||
};
|
};
|
||||||
|
|
||||||
// start rpc servers
|
// start rpc servers
|
||||||
let _http_server = rpc::new_http(cmd.http_conf, &dependencies, None)?;
|
let _ws_server = rpc::new_ws(cmd.ws_conf, &dependencies)?;
|
||||||
|
let _http_server = rpc::new_http(cmd.http_conf.clone(), &dependencies, None)?;
|
||||||
let _ipc_server = rpc::new_ipc(cmd.ipc_conf, &dependencies)?;
|
let _ipc_server = rpc::new_ipc(cmd.ipc_conf, &dependencies)?;
|
||||||
|
|
||||||
// the signer server
|
// the signer server
|
||||||
@ -636,6 +638,7 @@ pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> R
|
|||||||
let dapps_middleware = dapps::new(cmd.dapps_conf.clone(), dapps_deps)?;
|
let dapps_middleware = dapps::new(cmd.dapps_conf.clone(), dapps_deps)?;
|
||||||
|
|
||||||
// start rpc servers
|
// start rpc servers
|
||||||
|
let ws_server = rpc::new_ws(cmd.ws_conf, &dependencies)?;
|
||||||
let http_server = rpc::new_http(cmd.http_conf.clone(), &dependencies, dapps_middleware)?;
|
let http_server = rpc::new_http(cmd.http_conf.clone(), &dependencies, dapps_middleware)?;
|
||||||
let ipc_server = rpc::new_ipc(cmd.ipc_conf, &dependencies)?;
|
let ipc_server = rpc::new_ipc(cmd.ipc_conf, &dependencies)?;
|
||||||
|
|
||||||
@ -716,7 +719,7 @@ pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> R
|
|||||||
let restart = wait_for_exit(panic_handler, Some(updater), Some(client), can_restart);
|
let restart = wait_for_exit(panic_handler, Some(updater), Some(client), can_restart);
|
||||||
|
|
||||||
// drop this stuff as soon as exit detected.
|
// drop this stuff as soon as exit detected.
|
||||||
drop((http_server, ipc_server, signer_server, secretstore_key_server, ipfs_server, event_loop));
|
drop((ws_server, http_server, ipc_server, signer_server, secretstore_key_server, ipfs_server, event_loop));
|
||||||
|
|
||||||
info!("Finishing work, please wait...");
|
info!("Finishing work, please wait...");
|
||||||
|
|
||||||
|
@ -22,8 +22,8 @@ pub use ethcore_signer::Server as SignerServer;
|
|||||||
|
|
||||||
use ansi_term::Colour;
|
use ansi_term::Colour;
|
||||||
use dir::default_data_path;
|
use dir::default_data_path;
|
||||||
use ethcore_rpc::informant::RpcStats;
|
use parity_rpc::informant::RpcStats;
|
||||||
use ethcore_rpc::{self, ConfirmationsQueue};
|
use parity_rpc::{self, ConfirmationsQueue};
|
||||||
use ethcore_signer as signer;
|
use ethcore_signer as signer;
|
||||||
use helpers::replace_home;
|
use helpers::replace_home;
|
||||||
use parity_reactor::TokioRemote;
|
use parity_reactor::TokioRemote;
|
||||||
@ -69,10 +69,10 @@ pub struct NewToken {
|
|||||||
|
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct StandardExtractor;
|
pub struct StandardExtractor;
|
||||||
impl signer::MetaExtractor<ethcore_rpc::Metadata> for StandardExtractor {
|
impl signer::MetaExtractor<parity_rpc::Metadata> for StandardExtractor {
|
||||||
fn extract_metadata(&self, session: &H256) -> ethcore_rpc::Metadata {
|
fn extract_metadata(&self, session: &H256) -> parity_rpc::Metadata {
|
||||||
let mut metadata = ethcore_rpc::Metadata::default();
|
let mut metadata = parity_rpc::Metadata::default();
|
||||||
metadata.origin = ethcore_rpc::Origin::Signer((*session).into());
|
metadata.origin = parity_rpc::Origin::Signer((*session).into());
|
||||||
metadata
|
metadata
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
description = "Ethcore jsonrpc"
|
description = "Parity JSON-RPC servers."
|
||||||
name = "ethcore-rpc"
|
name = "parity-rpc"
|
||||||
version = "1.7.0"
|
version = "1.7.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Parity Technologies <admin@parity.io>"]
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
@ -25,6 +25,7 @@ rust-crypto = "0.2.36"
|
|||||||
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
||||||
jsonrpc-http-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
jsonrpc-http-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
||||||
jsonrpc-minihttp-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
jsonrpc-minihttp-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
||||||
|
jsonrpc-ws-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
||||||
jsonrpc-ipc-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
jsonrpc-ipc-server = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
||||||
jsonrpc-macros = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
jsonrpc-macros = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
||||||
|
|
||||||
|
@ -8,10 +8,10 @@ authors = ["Parity Technologies <admin@parity.io>"]
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
ctrlc = { git = "https://github.com/paritytech/rust-ctrlc.git" }
|
ctrlc = { git = "https://github.com/paritytech/rust-ctrlc.git" }
|
||||||
docopt = "0.7"
|
docopt = "0.7"
|
||||||
rustc-serialize = "0.3"
|
|
||||||
ethcore = { path = "../../ethcore" }
|
ethcore = { path = "../../ethcore" }
|
||||||
ethcore-devtools = { path = "../../devtools" }
|
ethcore-devtools = { path = "../../devtools" }
|
||||||
ethcore-rpc = { path = ".." }
|
|
||||||
ethcore-util = { path = "../../util" }
|
ethcore-util = { path = "../../util" }
|
||||||
ethjson = { path = "../../json" }
|
ethjson = { path = "../../json" }
|
||||||
|
parity-rpc = { path = ".." }
|
||||||
|
rustc-serialize = "0.3"
|
||||||
serde_json = "0.8"
|
serde_json = "0.8"
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
|
|
||||||
extern crate ctrlc;
|
extern crate ctrlc;
|
||||||
extern crate docopt;
|
extern crate docopt;
|
||||||
extern crate rustc_serialize;
|
|
||||||
extern crate serde_json;
|
|
||||||
extern crate ethjson;
|
|
||||||
extern crate ethcore_util as util;
|
|
||||||
extern crate ethcore;
|
extern crate ethcore;
|
||||||
extern crate ethcore_devtools as devtools;
|
extern crate ethcore_devtools as devtools;
|
||||||
extern crate ethcore_rpc as rpc;
|
extern crate ethcore_util as util;
|
||||||
|
extern crate ethjson;
|
||||||
|
extern crate parity_rpc as rpc;
|
||||||
|
extern crate rustc_serialize;
|
||||||
|
extern crate serde_json;
|
||||||
|
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::{Arc, Mutex, Condvar};
|
use std::sync::{Arc, Mutex, Condvar};
|
||||||
|
@ -66,6 +66,8 @@ extern crate ethjson;
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
extern crate ethcore_devtools as devtools;
|
extern crate ethcore_devtools as devtools;
|
||||||
|
|
||||||
|
pub extern crate jsonrpc_ws_server as ws;
|
||||||
|
|
||||||
mod metadata;
|
mod metadata;
|
||||||
pub mod v1;
|
pub mod v1;
|
||||||
|
|
||||||
@ -73,7 +75,7 @@ pub use ipc::{Server as IpcServer, MetaExtractor as IpcMetaExtractor, RequestCon
|
|||||||
pub use http::{
|
pub use http::{
|
||||||
hyper,
|
hyper,
|
||||||
RequestMiddleware, RequestMiddlewareAction,
|
RequestMiddleware, RequestMiddlewareAction,
|
||||||
AccessControlAllowOrigin, Host,
|
AccessControlAllowOrigin, Host, DomainsValidation
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use v1::{SigningQueue, SignerService, ConfirmationsQueue, NetworkSettings, Metadata, Origin, informant, dispatch};
|
pub use v1::{SigningQueue, SignerService, ConfirmationsQueue, NetworkSettings, Metadata, Origin, informant, dispatch};
|
||||||
@ -193,3 +195,28 @@ pub fn start_ipc<M, S, H, T>(
|
|||||||
.session_metadata_extractor(extractor)
|
.session_metadata_extractor(extractor)
|
||||||
.start(addr)
|
.start(addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Start WS server and return `Server` handle.
|
||||||
|
pub fn start_ws<M, S, H, T, U>(
|
||||||
|
addr: &SocketAddr,
|
||||||
|
handler: H,
|
||||||
|
remote: tokio_core::reactor::Remote,
|
||||||
|
allowed_origins: ws::DomainsValidation<ws::Origin>,
|
||||||
|
allowed_hosts: ws::DomainsValidation<ws::Host>,
|
||||||
|
extractor: T,
|
||||||
|
stats: U,
|
||||||
|
) -> Result<ws::Server, ws::Error> where
|
||||||
|
M: jsonrpc_core::Metadata,
|
||||||
|
S: jsonrpc_core::Middleware<M>,
|
||||||
|
H: Into<jsonrpc_core::MetaIoHandler<M, S>>,
|
||||||
|
T: ws::MetaExtractor<M>,
|
||||||
|
U: ws::SessionStats,
|
||||||
|
{
|
||||||
|
ws::ServerBuilder::new(handler)
|
||||||
|
.event_loop_remote(remote)
|
||||||
|
.allowed_origins(allowed_origins)
|
||||||
|
.allowed_hosts(allowed_hosts)
|
||||||
|
.session_meta_extractor(extractor)
|
||||||
|
.session_stats(stats)
|
||||||
|
.start(addr)
|
||||||
|
}
|
||||||
|
@ -33,6 +33,9 @@ pub enum Origin {
|
|||||||
/// IPC server (includes session hash)
|
/// IPC server (includes session hash)
|
||||||
#[serde(rename="ipc")]
|
#[serde(rename="ipc")]
|
||||||
Ipc(H256),
|
Ipc(H256),
|
||||||
|
/// WS server (includes session hash)
|
||||||
|
#[serde(rename="ws")]
|
||||||
|
Ws(H256),
|
||||||
/// Signer (includes session hash)
|
/// Signer (includes session hash)
|
||||||
#[serde(rename="signer")]
|
#[serde(rename="signer")]
|
||||||
Signer(H256),
|
Signer(H256),
|
||||||
@ -53,6 +56,7 @@ impl fmt::Display for Origin {
|
|||||||
Origin::Rpc(ref origin) => write!(f, "RPC (service: {})", origin),
|
Origin::Rpc(ref origin) => write!(f, "RPC (service: {})", origin),
|
||||||
Origin::Dapps(ref origin) => write!(f, "Dapp {}", origin),
|
Origin::Dapps(ref origin) => write!(f, "Dapp {}", origin),
|
||||||
Origin::Ipc(ref session) => write!(f, "IPC (session: {})", session),
|
Origin::Ipc(ref session) => write!(f, "IPC (session: {})", session),
|
||||||
|
Origin::Ws(ref session) => write!(f, "WebSocket (session: {})", session),
|
||||||
Origin::Signer(ref session) => write!(f, "UI (session: {})", session),
|
Origin::Signer(ref session) => write!(f, "UI (session: {})", session),
|
||||||
Origin::Unknown => write!(f, "unknown origin"),
|
Origin::Unknown => write!(f, "unknown origin"),
|
||||||
}
|
}
|
||||||
@ -112,6 +116,7 @@ mod tests {
|
|||||||
let o3 = Origin::Ipc(5.into());
|
let o3 = Origin::Ipc(5.into());
|
||||||
let o4 = Origin::Signer(10.into());
|
let o4 = Origin::Signer(10.into());
|
||||||
let o5 = Origin::Unknown;
|
let o5 = Origin::Unknown;
|
||||||
|
let o6 = Origin::Ws(5.into());
|
||||||
|
|
||||||
// when
|
// when
|
||||||
let res1 = serde_json::to_string(&o1).unwrap();
|
let res1 = serde_json::to_string(&o1).unwrap();
|
||||||
@ -119,6 +124,7 @@ mod tests {
|
|||||||
let res3 = serde_json::to_string(&o3).unwrap();
|
let res3 = serde_json::to_string(&o3).unwrap();
|
||||||
let res4 = serde_json::to_string(&o4).unwrap();
|
let res4 = serde_json::to_string(&o4).unwrap();
|
||||||
let res5 = serde_json::to_string(&o5).unwrap();
|
let res5 = serde_json::to_string(&o5).unwrap();
|
||||||
|
let res6 = serde_json::to_string(&o6).unwrap();
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assert_eq!(res1, r#"{"rpc":"test service"}"#);
|
assert_eq!(res1, r#"{"rpc":"test service"}"#);
|
||||||
@ -126,6 +132,7 @@ mod tests {
|
|||||||
assert_eq!(res3, r#"{"ipc":"0x0000000000000000000000000000000000000000000000000000000000000005"}"#);
|
assert_eq!(res3, r#"{"ipc":"0x0000000000000000000000000000000000000000000000000000000000000005"}"#);
|
||||||
assert_eq!(res4, r#"{"signer":"0x000000000000000000000000000000000000000000000000000000000000000a"}"#);
|
assert_eq!(res4, r#"{"signer":"0x000000000000000000000000000000000000000000000000000000000000000a"}"#);
|
||||||
assert_eq!(res5, r#""unknown""#);
|
assert_eq!(res5, r#""unknown""#);
|
||||||
|
assert_eq!(res6, r#"{"ws":"0x0000000000000000000000000000000000000000000000000000000000000005"}"#);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -10,6 +10,6 @@ version = "1.4.0"
|
|||||||
futures = "0.1"
|
futures = "0.1"
|
||||||
rpassword = "0.3.0"
|
rpassword = "0.3.0"
|
||||||
ethcore-bigint = { path = "../util/bigint" }
|
ethcore-bigint = { path = "../util/bigint" }
|
||||||
ethcore-rpc = { path = "../rpc" }
|
parity-rpc = { path = "../rpc" }
|
||||||
parity-rpc-client = { path = "../rpc_client" }
|
parity-rpc-client = { path = "../rpc_client" }
|
||||||
ethcore-util = { path = "../util" }
|
ethcore-util = { path = "../util" }
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
extern crate futures;
|
extern crate futures;
|
||||||
|
|
||||||
extern crate ethcore_util as util;
|
|
||||||
extern crate ethcore_rpc as rpc;
|
|
||||||
extern crate ethcore_bigint as bigint;
|
|
||||||
extern crate rpassword;
|
extern crate rpassword;
|
||||||
|
|
||||||
|
extern crate ethcore_util as util;
|
||||||
|
extern crate ethcore_bigint as bigint;
|
||||||
|
|
||||||
|
extern crate parity_rpc as rpc;
|
||||||
extern crate parity_rpc_client as client;
|
extern crate parity_rpc_client as client;
|
||||||
|
|
||||||
use rpc::v1::types::{U256, ConfirmationRequest};
|
use rpc::v1::types::{U256, ConfirmationRequest};
|
||||||
|
@ -16,6 +16,6 @@ tempdir = "0.3.5"
|
|||||||
url = "1.2.0"
|
url = "1.2.0"
|
||||||
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
jsonrpc-core = { git = "https://github.com/paritytech/jsonrpc.git", branch = "parity-1.7" }
|
||||||
ws = { git = "https://github.com/paritytech/ws-rs.git", branch = "parity-1.7" }
|
ws = { git = "https://github.com/paritytech/ws-rs.git", branch = "parity-1.7" }
|
||||||
ethcore-rpc = { path = "../rpc" }
|
parity-rpc = { path = "../rpc" }
|
||||||
ethcore-signer = { path = "../signer" }
|
ethcore-signer = { path = "../signer" }
|
||||||
ethcore-util = { path = "../util" }
|
ethcore-util = { path = "../util" }
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
pub mod client;
|
pub mod client;
|
||||||
pub mod signer_client;
|
pub mod signer_client;
|
||||||
|
|
||||||
extern crate ws;
|
|
||||||
extern crate ethcore_signer;
|
extern crate ethcore_signer;
|
||||||
extern crate url;
|
|
||||||
extern crate futures;
|
|
||||||
extern crate ethcore_util as util;
|
extern crate ethcore_util as util;
|
||||||
extern crate ethcore_rpc as rpc;
|
extern crate futures;
|
||||||
|
extern crate jsonrpc_core;
|
||||||
|
extern crate parity_rpc as rpc;
|
||||||
|
extern crate rand;
|
||||||
extern crate serde;
|
extern crate serde;
|
||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
extern crate rand;
|
|
||||||
extern crate tempdir;
|
extern crate tempdir;
|
||||||
extern crate jsonrpc_core;
|
extern crate url;
|
||||||
|
extern crate ws;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log;
|
extern crate log;
|
||||||
|
@ -6,7 +6,7 @@ export TARGETS="
|
|||||||
-p ethcore \
|
-p ethcore \
|
||||||
-p ethcore-bigint\
|
-p ethcore-bigint\
|
||||||
-p parity-dapps \
|
-p parity-dapps \
|
||||||
-p ethcore-rpc \
|
-p parity-rpc \
|
||||||
-p ethcore-signer \
|
-p ethcore-signer \
|
||||||
-p ethcore-util \
|
-p ethcore-util \
|
||||||
-p ethcore-network \
|
-p ethcore-network \
|
||||||
|
@ -20,7 +20,7 @@ ws = { git = "https://github.com/paritytech/ws-rs.git", branch = "parity-1.7" }
|
|||||||
parity-dapps-glue = { version = "1.7", optional = true }
|
parity-dapps-glue = { version = "1.7", optional = true }
|
||||||
ethcore-util = { path = "../util" }
|
ethcore-util = { path = "../util" }
|
||||||
ethcore-io = { path = "../util/io" }
|
ethcore-io = { path = "../util/io" }
|
||||||
ethcore-rpc = { path = "../rpc" }
|
parity-rpc = { path = "../rpc" }
|
||||||
ethcore-devtools = { path = "../devtools" }
|
ethcore-devtools = { path = "../devtools" }
|
||||||
parity-ui = { path = "../dapps/ui", version = "1.4", optional = true }
|
parity-ui = { path = "../dapps/ui", version = "1.4", optional = true }
|
||||||
|
|
||||||
|
@ -32,13 +32,13 @@
|
|||||||
//! extern crate jsonrpc_core;
|
//! extern crate jsonrpc_core;
|
||||||
//! extern crate jsonrpc_server_utils;
|
//! extern crate jsonrpc_server_utils;
|
||||||
//! extern crate ethcore_signer;
|
//! extern crate ethcore_signer;
|
||||||
//! extern crate ethcore_rpc;
|
//! extern crate parity_rpc;
|
||||||
//!
|
//!
|
||||||
//! use std::sync::Arc;
|
//! use std::sync::Arc;
|
||||||
//! use jsonrpc_core::IoHandler;
|
//! use jsonrpc_core::IoHandler;
|
||||||
//! use jsonrpc_server_utils::reactor::RpcEventLoop;
|
//! use jsonrpc_server_utils::reactor::RpcEventLoop;
|
||||||
//! use ethcore_signer::ServerBuilder;
|
//! use ethcore_signer::ServerBuilder;
|
||||||
//! use ethcore_rpc::ConfirmationsQueue;
|
//! use parity_rpc::ConfirmationsQueue;
|
||||||
//!
|
//!
|
||||||
//! fn main() {
|
//! fn main() {
|
||||||
//! let queue = Arc::new(ConfirmationsQueue::default());
|
//! let queue = Arc::new(ConfirmationsQueue::default());
|
||||||
@ -55,11 +55,11 @@ extern crate log;
|
|||||||
extern crate env_logger;
|
extern crate env_logger;
|
||||||
extern crate rand;
|
extern crate rand;
|
||||||
|
|
||||||
extern crate ethcore_util as util;
|
|
||||||
extern crate ethcore_rpc as rpc;
|
|
||||||
extern crate ethcore_io as io;
|
extern crate ethcore_io as io;
|
||||||
|
extern crate ethcore_util as util;
|
||||||
extern crate jsonrpc_core;
|
extern crate jsonrpc_core;
|
||||||
extern crate jsonrpc_server_utils;
|
extern crate jsonrpc_server_utils;
|
||||||
|
extern crate parity_rpc as rpc;
|
||||||
extern crate ws;
|
extern crate ws;
|
||||||
|
|
||||||
extern crate ethcore_devtools as devtools;
|
extern crate ethcore_devtools as devtools;
|
||||||
|
Loading…
Reference in New Issue
Block a user