fix: fix incorrect conversion between integer type

This commit is contained in:
pocketW 2022-08-02 19:42:29 +10:00
parent 84db0453cb
commit e46dc1d8d7
8 changed files with 23 additions and 21 deletions

View File

@ -31,7 +31,7 @@ type NodeStatus struct {
type NodeInfo struct { type NodeInfo struct {
NodeType string // Must be V2ray, Trojan, and Shadowsocks NodeType string // Must be V2ray, Trojan, and Shadowsocks
NodeID int NodeID int
Port int Port uint32
SpeedLimit uint64 // Bps SpeedLimit uint64 // Bps
AlterID uint16 AlterID uint16
TransportProtocol string TransportProtocol string
@ -50,7 +50,7 @@ type UserInfo struct {
UID int UID int
Email string Email string
Passwd string Passwd string
Port int Port uint32
Method string Method string
SpeedLimit uint64 // Bps SpeedLimit uint64 // Bps
DeviceLimit int DeviceLimit int

View File

@ -9,7 +9,7 @@ type NodeInfoResponse struct {
Method string `json:"method"` Method string `json:"method"`
TrafficRate float64 `json:"trafficRate"` TrafficRate float64 `json:"trafficRate"`
RawServerString string `json:"outServer"` RawServerString string `json:"outServer"`
Port int `json:"outPort"` Port uint32 `json:"outPort"`
AlterId uint16 `json:"alterId"` AlterId uint16 `json:"alterId"`
Network string `json:"network"` Network string `json:"network"`
Security string `json:"security"` Security string `json:"security"`

View File

@ -411,11 +411,8 @@ func (c *APIClient) ParseV2rayNodeResponse(nodeInfoResponse *NodeInfoResponse) (
// ParseSSNodeResponse parse the response for the given nodeinfor format // ParseSSNodeResponse parse the response for the given nodeinfor format
func (c *APIClient) ParseSSNodeResponse(nodeInfoResponse *NodeInfoResponse) (*api.NodeInfo, error) { func (c *APIClient) ParseSSNodeResponse(nodeInfoResponse *NodeInfoResponse) (*api.NodeInfo, error) {
var port int = 0
var speedlimit uint64 = 0 var speedlimit uint64 = 0
port = nodeInfoResponse.Port
if c.SpeedLimit > 0 { if c.SpeedLimit > 0 {
speedlimit = uint64((c.SpeedLimit * 1000000) / 8) speedlimit = uint64((c.SpeedLimit * 1000000) / 8)
} else { } else {
@ -425,7 +422,7 @@ func (c *APIClient) ParseSSNodeResponse(nodeInfoResponse *NodeInfoResponse) (*ap
nodeinfo := &api.NodeInfo{ nodeinfo := &api.NodeInfo{
NodeType: c.NodeType, NodeType: c.NodeType,
NodeID: c.NodeID, NodeID: c.NodeID,
Port: port, Port: nodeInfoResponse.Port,
SpeedLimit: speedlimit, SpeedLimit: speedlimit,
TransportProtocol: "tcp", TransportProtocol: "tcp",
CypherMethod: nodeInfoResponse.Method, CypherMethod: nodeInfoResponse.Method,

View File

@ -20,7 +20,7 @@ type V2rayNodeInfo struct {
Cert string `json:"pem"` Cert string `json:"pem"`
V2License string `json:"v2_license"` V2License string `json:"v2_license"`
V2AlterID uint16 `json:"v2_alter_id"` V2AlterID uint16 `json:"v2_alter_id"`
V2Port int `json:"v2_port"` V2Port uint32 `json:"v2_port"`
V2Method string `json:"v2_method"` V2Method string `json:"v2_method"`
V2Net string `json:"v2_net"` V2Net string `json:"v2_net"`
V2Type string `json:"v2_type"` V2Type string `json:"v2_type"`
@ -37,7 +37,7 @@ type ShadowsocksNodeInfo struct {
SpeedLimit uint64 `json:"speed_limit"` SpeedLimit uint64 `json:"speed_limit"`
ClientLimit int `json:"client_limit"` ClientLimit int `json:"client_limit"`
Method string `json:"method"` Method string `json:"method"`
Port int `json:"port"` Port uint32 `json:"port"`
} }
type TrojanNodeInfo struct { type TrojanNodeInfo struct {
@ -46,7 +46,7 @@ type TrojanNodeInfo struct {
SpeedLimit uint64 `json:"speed_limit"` SpeedLimit uint64 `json:"speed_limit"`
ClientLimit int `json:"client_limit"` ClientLimit int `json:"client_limit"`
PushPort int `json:"push_port"` PushPort int `json:"push_port"`
TrojanPort int `json:"trojan_port"` TrojanPort uint32 `json:"trojan_port"`
} }
// Node status report // Node status report

View File

@ -49,7 +49,7 @@ type UserResponse struct {
ID int `json:"id"` ID int `json:"id"`
Email string `json:"email"` Email string `json:"email"`
Passwd string `json:"passwd"` Passwd string `json:"passwd"`
Port int `json:"port"` Port uint32 `json:"port"`
Method string `json:"method"` Method string `json:"method"`
SpeedLimit float64 `json:"node_speedlimit"` SpeedLimit float64 `json:"node_speedlimit"`
DeviceLimit int `json:"node_connector"` DeviceLimit int `json:"node_connector"`

View File

@ -382,10 +382,12 @@ func (c *APIClient) ParseV2rayNodeResponse(nodeInfoResponse *NodeInfoResponse) (
} }
//nodeInfo.RawServerString = strings.ToLower(nodeInfo.RawServerString) //nodeInfo.RawServerString = strings.ToLower(nodeInfo.RawServerString)
serverConf := strings.Split(nodeInfoResponse.RawServerString, ";") serverConf := strings.Split(nodeInfoResponse.RawServerString, ";")
port, err := strconv.Atoi(serverConf[1])
parsedPort, err := strconv.ParseInt(serverConf[1], 10, 32)
if err != nil { if err != nil {
return nil, err return nil, err
} }
port := uint32(parsedPort)
parsedAlterID, err := strconv.ParseInt(serverConf[2], 10, 16) parsedAlterID, err := strconv.ParseInt(serverConf[2], 10, 16)
if err != nil { if err != nil {
@ -467,7 +469,7 @@ func (c *APIClient) ParseV2rayNodeResponse(nodeInfoResponse *NodeInfoResponse) (
// ParseSSNodeResponse parse the response for the given nodeinfor format // ParseSSNodeResponse parse the response for the given nodeinfor format
func (c *APIClient) ParseSSNodeResponse(nodeInfoResponse *NodeInfoResponse) (*api.NodeInfo, error) { func (c *APIClient) ParseSSNodeResponse(nodeInfoResponse *NodeInfoResponse) (*api.NodeInfo, error) {
var port int = 0 var port uint32 = 0
var speedlimit uint64 = 0 var speedlimit uint64 = 0
var method string var method string
path := "/mod_mu/users" path := "/mod_mu/users"
@ -524,10 +526,11 @@ func (c *APIClient) ParseSSPluginNodeResponse(nodeInfoResponse *NodeInfoResponse
var speedlimit uint64 = 0 var speedlimit uint64 = 0
serverConf := strings.Split(nodeInfoResponse.RawServerString, ";") serverConf := strings.Split(nodeInfoResponse.RawServerString, ";")
port, err := strconv.Atoi(serverConf[1]) parsedPort, err := strconv.ParseInt(serverConf[1], 10, 32)
if err != nil { if err != nil {
return nil, err return nil, err
} }
port := uint32(parsedPort)
port = port - 1 // Shadowsocks-Plugin requires two ports, one for ss the other for other stream protocol port = port - 1 // Shadowsocks-Plugin requires two ports, one for ss the other for other stream protocol
if port <= 0 { if port <= 0 {
return nil, fmt.Errorf("Shadowsocks-Plugin listen port must bigger than 1") return nil, fmt.Errorf("Shadowsocks-Plugin listen port must bigger than 1")
@ -618,10 +621,11 @@ func (c *APIClient) ParseTrojanNodeResponse(nodeInfoResponse *NodeInfoResponse)
p = outsidePort p = outsidePort
} }
port, err := strconv.Atoi(p) parsedPort, err := strconv.ParseInt(p, 10, 32)
if err != nil { if err != nil {
return nil, err return nil, err
} }
port := uint32(parsedPort)
serverConf := strings.Split(nodeInfoResponse.RawServerString, ";") serverConf := strings.Split(nodeInfoResponse.RawServerString, ";")
extraServerConf := strings.Split(serverConf[1], "|") extraServerConf := strings.Split(serverConf[1], "|")
@ -742,10 +746,11 @@ func (c *APIClient) ParseSSPanelNodeInfo(nodeInfoResponse *NodeInfoResponse) (*a
speedlimit = uint64((nodeInfoResponse.SpeedLimit * 1000000) / 8) speedlimit = uint64((nodeInfoResponse.SpeedLimit * 1000000) / 8)
} }
port, err := strconv.Atoi(nodeConfig.OffsetPortNode) parsedPort, err := strconv.ParseInt(nodeConfig.OffsetPortNode, 10, 32)
if err != nil { if err != nil {
return nil, err return nil, err
} }
port := uint32(parsedPort)
if c.NodeType == "Shadowsocks" { if c.NodeType == "Shadowsocks" {
transportProtocol = "tcp" transportProtocol = "tcp"

View File

@ -219,7 +219,7 @@ func (c *APIClient) GetUserList() (UserList *[]api.UserInfo, err error) {
user.Email = response.Get("data").GetIndex(i).Get("secret").MustString() user.Email = response.Get("data").GetIndex(i).Get("secret").MustString()
user.Passwd = response.Get("data").GetIndex(i).Get("secret").MustString() user.Passwd = response.Get("data").GetIndex(i).Get("secret").MustString()
user.Method = response.Get("data").GetIndex(i).Get("cipher").MustString() user.Method = response.Get("data").GetIndex(i).Get("cipher").MustString()
user.Port = response.Get("data").GetIndex(i).Get("port").MustInt() user.Port = uint32(response.Get("data").GetIndex(i).Get("port").MustUint64())
case "Trojan": case "Trojan":
user.UUID = response.Get("data").GetIndex(i).Get("trojan_user").Get("password").MustString() user.UUID = response.Get("data").GetIndex(i).Get("trojan_user").Get("password").MustString()
user.Email = response.Get("data").GetIndex(i).Get("trojan_user").Get("password").MustString() user.Email = response.Get("data").GetIndex(i).Get("trojan_user").Get("password").MustString()
@ -308,7 +308,7 @@ func (c *APIClient) ParseTrojanNodeResponse(nodeInfoResponse *simplejson.Json) (
if c.EnableXTLS { if c.EnableXTLS {
TLSType = "xtls" TLSType = "xtls"
} }
port := nodeInfoResponse.Get("local_port").MustInt() port := uint32(nodeInfoResponse.Get("local_port").MustUint64())
host := nodeInfoResponse.Get("ssl").Get("sni").MustString() host := nodeInfoResponse.Get("ssl").Get("sni").MustString()
// Create GeneralNodeInfo // Create GeneralNodeInfo
@ -326,7 +326,7 @@ func (c *APIClient) ParseTrojanNodeResponse(nodeInfoResponse *simplejson.Json) (
// ParseSSNodeResponse parse the response for the given nodeinfor format // ParseSSNodeResponse parse the response for the given nodeinfor format
func (c *APIClient) ParseSSNodeResponse() (*api.NodeInfo, error) { func (c *APIClient) ParseSSNodeResponse() (*api.NodeInfo, error) {
var port int var port uint32
var method string var method string
userInfo, err := c.GetUserList() userInfo, err := c.GetUserList()
if err != nil { if err != nil {
@ -372,7 +372,7 @@ func (c *APIClient) ParseV2rayNodeResponse(nodeInfoResponse *simplejson.Json) (*
return nil, fmt.Errorf("Unable to find inbound(s) in the nodeInfo.") return nil, fmt.Errorf("Unable to find inbound(s) in the nodeInfo.")
} }
port := inboundInfo.Get("port").MustInt() port := uint32(inboundInfo.Get("port").MustUint64())
transportProtocol := inboundInfo.Get("streamSettings").Get("network").MustString() transportProtocol := inboundInfo.Get("streamSettings").Get("network").MustString()
switch transportProtocol { switch transportProtocol {

View File

@ -27,7 +27,7 @@ func InboundBuilder(config *Config, nodeInfo *api.NodeInfo, tag string) (*core.I
// Build Port // Build Port
portList := &conf.PortList{ portList := &conf.PortList{
Range: []conf.PortRange{{From: uint32(nodeInfo.Port), To: uint32(nodeInfo.Port)}}, Range: []conf.PortRange{{From: nodeInfo.Port, To: nodeInfo.Port}},
} }
inboundDetourConfig.PortList = portList inboundDetourConfig.PortList = portList
// Build Tag // Build Tag