diff options
author | obscuren <geffobscura@gmail.com> | 2015-04-01 18:51:39 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-04-01 18:51:39 +0800 |
commit | b0e09ec82752b48c2384c315dc420e5c39e785b6 (patch) | |
tree | 0dc20ee3807e3fe5a076fbfe2ec00bd6601792a6 /rpc | |
parent | 6afc5e762af0f81b70256ebb7e830b09caf17be0 (diff) | |
parent | 720d978e356bba74160dbdd95b51bcb8087fb92e (diff) | |
download | dexon-b0e09ec82752b48c2384c315dc420e5c39e785b6.tar.gz dexon-b0e09ec82752b48c2384c315dc420e5c39e785b6.tar.zst dexon-b0e09ec82752b48c2384c315dc420e5c39e785b6.zip |
merge conflict
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/http.go | 30 | ||||
-rw-r--r-- | rpc/messages.go | 6 |
2 files changed, 34 insertions, 2 deletions
diff --git a/rpc/http.go b/rpc/http.go index 919c567bd..f15d557ad 100644 --- a/rpc/http.go +++ b/rpc/http.go @@ -2,12 +2,15 @@ package rpc import ( "encoding/json" + "fmt" "io" "io/ioutil" + "net" "net/http" "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/xeth" + "github.com/rs/cors" ) var rpclogger = logger.NewLogger("RPC") @@ -17,13 +20,36 @@ const ( maxSizeReqLength = 1024 * 1024 // 1MB ) +func Start(pipe *xeth.XEth, config RpcConfig) error { + l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.ListenAddress, config.ListenPort)) + if err != nil { + rpclogger.Errorf("Can't listen on %s:%d: %v", config.ListenAddress, config.ListenPort, err) + return err + } + + var handler http.Handler + if len(config.CorsDomain) > 0 { + var opts cors.Options + opts.AllowedMethods = []string{"POST"} + opts.AllowedOrigins = []string{config.CorsDomain} + + c := cors.New(opts) + handler = c.Handler(JSONRPC(pipe)) + } else { + handler = JSONRPC(pipe) + } + + go http.Serve(l, handler) + + return nil +} + // JSONRPC returns a handler that implements the Ethereum JSON-RPC API. func JSONRPC(pipe *xeth.XEth) http.Handler { api := NewEthereumApi(pipe) return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - // TODO this needs to be configurable - w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Content-Type", "application/json") // Limit request size to resist DoS if req.ContentLength > maxSizeReqLength { diff --git a/rpc/messages.go b/rpc/messages.go index f868c5f9b..3c011cd93 100644 --- a/rpc/messages.go +++ b/rpc/messages.go @@ -108,6 +108,12 @@ func newHexNum(input interface{}) *hexnum { return d } +type RpcConfig struct { + ListenAddress string + ListenPort uint + CorsDomain string +} + type InvalidTypeError struct { method string msg string |