rpc: allow RPC requests on GET too
This commit is contained in:
parent
db056eeafe
commit
72c255caef
46
rpc/http.go
46
rpc/http.go
@ -18,21 +18,19 @@ package rpc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"net"
|
|
||||||
"net/http"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"errors"
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
@ -44,8 +42,8 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
httpServerMu sync.Mutex // prevent concurrent access to the httpListener and httpServer
|
httpServerMu sync.Mutex // prevent concurrent access to the httpListener and httpServer
|
||||||
httpListener net.Listener // listener for the http server
|
httpListener net.Listener // listener for the http server
|
||||||
httpRPCServer *Server // the node can only start 1 HTTP RPC server instance
|
httpRPCServer *Server // the node can only start 1 HTTP RPC server instance
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -57,8 +55,7 @@ var (
|
|||||||
type httpMessageStream struct {
|
type httpMessageStream struct {
|
||||||
conn net.Conn // TCP connection
|
conn net.Conn // TCP connection
|
||||||
rw *bufio.ReadWriter // buffered where HTTP requests/responses are read/written from/to
|
rw *bufio.ReadWriter // buffered where HTTP requests/responses are read/written from/to
|
||||||
currentReq *http.Request // pending request, codec can pass in a too small buffer for a single read
|
currentReq *http.Request // pending request, codec can pass in a too small buffer for a single read we need to keep track of the current requests if it was not read at once
|
||||||
// we need to keep track of the current requests if it was not read at once
|
|
||||||
payloadBytesRead int64 // number of bytes which are read from the current request
|
payloadBytesRead int64 // number of bytes which are read from the current request
|
||||||
allowedOrigins *set.Set // allowed CORS domains
|
allowedOrigins *set.Set // allowed CORS domains
|
||||||
origin string // origin of this connection/request
|
origin string // origin of this connection/request
|
||||||
@ -147,7 +144,7 @@ func (h *httpMessageStream) Read(buf []byte) (n int, err error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.EqualFold(h.currentReq.Method, "POST") {
|
if strings.EqualFold(h.currentReq.Method, "GET") || strings.EqualFold(h.currentReq.Method, "POST") {
|
||||||
n, err := h.currentReq.Body.Read(buf)
|
n, err := h.currentReq.Body.Read(buf)
|
||||||
h.payloadBytesRead += int64(n)
|
h.payloadBytesRead += int64(n)
|
||||||
|
|
||||||
@ -164,12 +161,9 @@ func (h *httpMessageStream) Read(buf []byte) (n int, err error) {
|
|||||||
h.currentReq = nil
|
h.currentReq = nil
|
||||||
h.payloadBytesRead = 0
|
h.payloadBytesRead = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// partial read of body
|
// partial read of body
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
h.currentReq = nil
|
|
||||||
return 0, fmt.Errorf("unsupported HTTP method '%s'", h.currentReq.Method)
|
return 0, fmt.Errorf("unsupported HTTP method '%s'", h.currentReq.Method)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -212,17 +206,17 @@ func httpTimestamp(t time.Time) []byte {
|
|||||||
t = t.UTC()
|
t = t.UTC()
|
||||||
yy, mm, dd := t.Date()
|
yy, mm, dd := t.Date()
|
||||||
hh, mn, ss := t.Clock()
|
hh, mn, ss := t.Clock()
|
||||||
day := days[3 * t.Weekday():]
|
day := days[3*t.Weekday():]
|
||||||
mon := months[3 * (mm - 1):]
|
mon := months[3*(mm-1):]
|
||||||
|
|
||||||
return append(b,
|
return append(b,
|
||||||
day[0], day[1], day[2], ',', ' ',
|
day[0], day[1], day[2], ',', ' ',
|
||||||
byte('0' + dd / 10), byte('0' + dd % 10), ' ',
|
byte('0'+dd/10), byte('0'+dd%10), ' ',
|
||||||
mon[0], mon[1], mon[2], ' ',
|
mon[0], mon[1], mon[2], ' ',
|
||||||
byte('0' + yy / 1000), byte('0' + (yy / 100) % 10), byte('0' + (yy / 10) % 10), byte('0' + yy % 10), ' ',
|
byte('0'+yy/1000), byte('0'+(yy/100)%10), byte('0'+(yy/10)%10), byte('0'+yy%10), ' ',
|
||||||
byte('0' + hh / 10), byte('0' + hh % 10), ':',
|
byte('0'+hh/10), byte('0'+hh%10), ':',
|
||||||
byte('0' + mn / 10), byte('0' + mn % 10), ':',
|
byte('0'+mn/10), byte('0'+mn%10), ':',
|
||||||
byte('0' + ss / 10), byte('0' + ss % 10), ' ',
|
byte('0'+ss/10), byte('0'+ss%10), ' ',
|
||||||
'G', 'M', 'T')
|
'G', 'M', 'T')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user