From fbc5248ef8b3087bd334e1f805135fe1ce43ff0d Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Sun, 11 Mar 2018 01:31:09 +0100 Subject: [PATCH] Handle HTTP status codes returned from blockchain rpc --- bchain/coins/btc/bitcoinrpc.go | 9 +++++++++ blockbook.go | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/bchain/coins/btc/bitcoinrpc.go b/bchain/coins/btc/bitcoinrpc.go index 3fdceb4d..c52aaa57 100644 --- a/bchain/coins/btc/bitcoinrpc.go +++ b/bchain/coins/btc/bitcoinrpc.go @@ -581,6 +581,15 @@ func (b *BitcoinRPC) call(req interface{}, res interface{}) error { // read the entire response body until the end to avoid memory leak when reusing http connection // see http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/ defer io.Copy(ioutil.Discard, httpRes.Body) + // if server returns HTTP error code it might not return json with response + // handle both cases + if httpRes.StatusCode != 200 { + err = json.NewDecoder(httpRes.Body).Decode(&res) + if err != nil { + return errors.New(httpRes.Status) + } + return nil + } return json.NewDecoder(httpRes.Body).Decode(&res) } diff --git a/blockbook.go b/blockbook.go index a50a61aa..f41ec41e 100644 --- a/blockbook.go +++ b/blockbook.go @@ -111,12 +111,12 @@ func main() { var err error if chain, err = coins.NewBlockChain(*coin, *rpcURL, *rpcUser, *rpcPass, time.Duration(*rpcTimeout)*time.Second, *parse); err != nil { - glog.Fatal("NewBlockChain: ", err) + glog.Fatal("rpc: ", err) } index, err = db.NewRocksDB(*dbPath, chain.GetChainParser()) if err != nil { - glog.Fatal("NewRocksDB: ", err) + glog.Fatal("rocksDB: ", err) } defer index.Close()