From 3bff502d67531979d9abc04dad72bc98b67ae6f8 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Fri, 27 Nov 2015 09:06:34 +0100 Subject: [PATCH] added ipcexperimental flag to enable the new RPC implementation --- cmd/geth/main.go | 1 + cmd/geth/usage.go | 1 + cmd/utils/flags.go | 68 +++++++++++++++++++++++++--------------------- 3 files changed, 39 insertions(+), 31 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 6ec30cebcf..bb291ccde2 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -313,6 +313,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso utils.IPCDisabledFlag, utils.IPCApiFlag, utils.IPCPathFlag, + utils.IPCExperimental, utils.ExecFlag, utils.WhisperEnabledFlag, utils.DevModeFlag, diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go index 5c09e29ce4..7a6ff704c4 100644 --- a/cmd/geth/usage.go +++ b/cmd/geth/usage.go @@ -158,6 +158,7 @@ var AppHelpFlagGroups = []flagGroup{ Flags: []cli.Flag{ utils.WhisperEnabledFlag, utils.NatspecEnabledFlag, + utils.IPCExperimental, }, }, { diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index b102692d14..f7825d268c 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -305,6 +305,10 @@ var ( Usage: "Filename for IPC socket/pipe", Value: DirectoryString{common.DefaultIpcPath()}, } + IPCExperimental = cli.BoolFlag{ + Name: "ipcexp", + Usage: "Enable the new RPC implementation", + } ExecFlag = cli.StringFlag{ Name: "exec", Usage: "Execute JavaScript statement (only in combination with console/attach)", @@ -778,7 +782,6 @@ func IpcSocketPath(ctx *cli.Context) (ipcpath string) { return } -// StartIPC starts a IPC JSON-RPC API server. func StartIPC(stack *node.Node, ctx *cli.Context) error { var ethereum *eth.Ethereum if err := stack.Service(ðereum); err != nil { @@ -788,39 +791,42 @@ func StartIPC(stack *node.Node, ctx *cli.Context) error { if err := stack.Service(&shh); err != nil { return err } - server := rpc.NewServer() - server.RegisterName("eth", accounts.NewAccountService(ethereum.AccountManager())) - server.RegisterName("eth", core.NewBlockChainService(ethereum.BlockChain(), ethereum.AccountManager())) - server.RegisterName("eth", core.NewTransactionPoolService(ethereum.TxPool(), ethereum.ChainDb(), ethereum.BlockChain(), ethereum.AccountManager())) - server.RegisterName("eth", miner.NewMinerService(ethereum.Miner())) - server.RegisterName("eth", eth.NewEthService(ethereum)) - server.RegisterName("eth", downloader.NewDownloaderService(ethereum.Downloader())) - server.RegisterName("eth", filters.NewFilterService(ethereum.ChainDb(), ethereum.EventMux())) - server.RegisterName("net", p2p.NewNetService(stack.Server(), ethereum.NetVersion())) - server.RegisterName("web3", eth.NewWeb3Service(stack)) - server.RegisterName("personal", accounts.NewPersonalService(ethereum.AccountManager())) - server.RegisterName("shh", whisper.NewWhisperService(shh)) + if ctx.GlobalIsSet(IPCExperimental.Name) { + server := rpc.NewServer() - ipcDir := filepath.Join(stack.DataDir(), "shared") - os.MkdirAll(ipcDir, 0700) - ipcEndpoint := filepath.Join(ipcDir, "ethereum.sock") - os.RemoveAll(ipcEndpoint) - l, err := net.ListenUnix("unix", &net.UnixAddr{Name: ipcEndpoint, Net: "unix"}) - if err != nil { - panic(err) - } - go func() { - glog.Infof("Unix socket for IPC service opened on %s\n", ipcEndpoint) - for { - conn, err := l.Accept() - if err != nil { - panic(err) - } - codec := rpc.NewJSONCodec(conn) - go server.ServeCodec(codec) + server.RegisterName("eth", accounts.NewAccountService(ethereum.AccountManager())) + server.RegisterName("eth", core.NewBlockChainService(ethereum.BlockChain(), ethereum.AccountManager())) + server.RegisterName("eth", core.NewTransactionPoolService(ethereum.TxPool(), ethereum.ChainDb(), ethereum.BlockChain(), ethereum.AccountManager())) + server.RegisterName("eth", miner.NewMinerService(ethereum.Miner())) + server.RegisterName("eth", eth.NewEthService(ethereum)) + server.RegisterName("eth", downloader.NewDownloaderService(ethereum.Downloader())) + server.RegisterName("eth", filters.NewFilterService(ethereum.ChainDb(), ethereum.EventMux())) + server.RegisterName("net", p2p.NewNetService(stack.Server(), ethereum.NetVersion())) + server.RegisterName("web3", eth.NewWeb3Service(stack)) + server.RegisterName("personal", accounts.NewPersonalService(ethereum.AccountManager())) + server.RegisterName("shh", whisper.NewWhisperService(shh)) + + ipcEndpoint := IpcSocketPath(ctx) + os.RemoveAll(ipcEndpoint) + l, err := net.ListenUnix("unix", &net.UnixAddr{Name: ipcEndpoint, Net: "unix"}) + if err != nil { + return err } - }() + go func() { + glog.Infof("IPC endpoint(%s)\n", ipcEndpoint) + for { + conn, err := l.Accept() + if err != nil { + panic(err) + } + codec := rpc.NewJSONCodec(conn) + go server.ServeCodec(codec) + } + }() + + return nil + } config := comms.IpcConfig{ Endpoint: IpcSocketPath(ctx),