Skip to content

Commit

Permalink
Add getmyextip RPC
Browse files Browse the repository at this point in the history
Signed-off-by: gdmmx <[email protected]>
  • Loading branch information
gdmmx committed Mar 18, 2019
1 parent 776d36b commit 39dd0ec
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
29 changes: 29 additions & 0 deletions api/common/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"encoding/hex"
"encoding/json"
"math"
"net"
"strings"

"github.com/gogo/protobuf/proto"
"github.com/nknorg/nkn/common"
Expand Down Expand Up @@ -1154,6 +1156,32 @@ func getTopicBucketsCount(s Serverer, params map[string]interface{}) map[string]
return respPacking(count, SUCCESS)
}

// getMyExtIP get RPC client's external IP
// params: ["address":<address>]
// return: {"result":<result>, "error":<errcode>}
func getMyExtIP(s Serverer, params map[string]interface{}) map[string]interface{} {
if len(params) < 1 {
return respPacking(nil, INVALID_PARAMS)
}

addr, ok := params["RemoteAddr"].(string)
if !ok || len(addr) == 0 {
log.Errorf("Invalid params: [%v, %v]", ok, addr)
return respPacking(nil, INVALID_PARAMS)
}

host, _, err := net.SplitHostPort(addr)
if err != nil {
if strings.LastIndexByte(addr, ':') >= 0 {
log.Errorf("getMyExtIP met invalid params %v: %v", addr, err)
return respPacking(nil, INVALID_PARAMS)
}
host = addr // addr just only host, without port
}
ret := map[string]interface{}{"RemoteAddr": host}
return respPacking(ret, SUCCESS)
}

// findSuccessorAddrs find the successors of a key
// params: ["address":<address>]
// return: {"result":<result>, "error":<errcode>}
Expand Down Expand Up @@ -1254,6 +1282,7 @@ var InitialAPIHandlers = map[string]APIHandler{
"getsubscribers": {Handler: getSubscribers, AccessCtrl: BIT_JSONRPC},
"getfirstavailabletopicbucket": {Handler: getFirstAvailableTopicBucket, AccessCtrl: BIT_JSONRPC},
"gettopicbucketscount": {Handler: getTopicBucketsCount, AccessCtrl: BIT_JSONRPC},
"getmyextip": {Handler: getMyExtIP, AccessCtrl: BIT_JSONRPC},
"findsuccessoraddr": {Handler: findSuccessorAddr, AccessCtrl: BIT_JSONRPC},
"findsuccessoraddrs": {Handler: findSuccessorAddrs, AccessCtrl: BIT_JSONRPC},
}
13 changes: 13 additions & 0 deletions api/httpjson/RPCserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,19 @@ func (s *RPCServer) Handle(w http.ResponseWriter, r *http.Request) {
w.Write(data)
return
}
// if params["RemoteAddr"] set but empty, used request.RemoteAddr
if addr, ok := params["RemoteAddr"]; ok {
switch addr.(type) {
case []byte, string:
if len(addr.(string)) == 0 { // empty string
params["RemoteAddr"] = r.RemoteAddr
}
case bool: // save remoteAddr whatever true or false
params["RemoteAddr"] = r.RemoteAddr
default:
log.Warningf("RemoteAddr unsupport type for %v", addr)
}
}

//get the corresponding function
function, ok := s.mainMux.m[method]
Expand Down

0 comments on commit 39dd0ec

Please sign in to comment.