Skip to content

Commit

Permalink
fix: ipv6 parser, local matcher
Browse files Browse the repository at this point in the history
  • Loading branch information
ztelliot committed May 31, 2024
1 parent 182af57 commit 7d315bb
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 17 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,4 @@ jobs:
HOOKS: ${{ secrets.HOOKS }}
run: |
export IFS=";"
for hook in $HOOKS; do curl -k -X POST -H "Authorization: $TOKEN" -H "Content-Type: application/json" --data "{\"version\":\"$VERSION\",\"platform\":$PLATFORM}" $hook; done
for hook in $HOOKS; do curl -k -X POST -H "Content-Type: application/json" --data "{\"version\":\"$VERSION\",\"platform\":$PLATFORM}" "$hook?token=$TOKEN"; done
35 changes: 23 additions & 12 deletions defs/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ import (
"fmt"
"io"
"math"
"net"
"net/http"
"net/url"
"os"
"strconv"
"strings"
"time"

Expand Down Expand Up @@ -79,47 +82,55 @@ type Server struct {
NoICMP bool `json:"-"`
}

func (s *Server) URL() *url.URL {
u := url.URL{
Scheme: "http",
Host: net.JoinHostPort(s.Host, strconv.Itoa(int(s.Port))),
}
return &u
}

func (s *Server) DownloadURL() string {
if s.DownloadURI != "" {
return fmt.Sprintf("http://%s:%d%s", s.Host, s.Port, s.DownloadURI)
return fmt.Sprintf("%s%s", s.URL().String(), s.DownloadURI)
} else {
switch s.Type {
case Perception:
return fmt.Sprintf("http://%s:%d/speedtest/download", s.Host, s.Port)
return fmt.Sprintf("%s/speedtest/download", s.URL().String())
case WirelessSpeed:
return fmt.Sprintf("http://%s:%d/GSpeedTestServer/download", s.Host, s.Port)
return fmt.Sprintf("%s/GSpeedTestServer/download", s.URL().String())
default:
return fmt.Sprintf("http://%s:%d/speed/File(1G).dl", s.Host, s.Port)
return fmt.Sprintf("%s/speed/File(1G).dl", s.URL().String())
}
}
}

func (s *Server) UploadURL() string {
if s.UploadURI != "" {
return fmt.Sprintf("http://%s:%d%s", s.Host, s.Port, s.UploadURI)
return fmt.Sprintf("%s%s", s.URL().String(), s.UploadURI)
} else {
switch s.Type {
case Perception:
return fmt.Sprintf("http://%s:%d/speedtest/upload", s.Host, s.Port)
return fmt.Sprintf("%s/speedtest/upload", s.URL().String())
case WirelessSpeed:
return fmt.Sprintf("http://%s:%d/GSpeedTestServer/upload", s.Host, s.Port)
return fmt.Sprintf("%s/GSpeedTestServer/upload", s.URL().String())
default:
return fmt.Sprintf("http://%s:%d/speed/doAnalsLoad.do", s.Host, s.Port)
return fmt.Sprintf("%s/speed/doAnalsLoad.do", s.URL().String())
}
}
}

func (s *Server) PingURL() string {
if s.PingURI != "" {
return fmt.Sprintf("http://%s:%d%s", s.Host, s.Port, s.PingURI)
return fmt.Sprintf("%s%s", s.URL().String(), s.PingURI)
} else {
switch s.Type {
case Perception:
return fmt.Sprintf("http://%s:%d/speedtest/ping", s.Host, s.Port)
return fmt.Sprintf("%s/speedtest/ping", s.URL().String())
case WirelessSpeed:
return fmt.Sprintf("http://%s:%d/GSpeedTestServer/", s.Host, s.Port)
return fmt.Sprintf("%s/GSpeedTestServer/", s.URL().String())
default:
return fmt.Sprintf("http://%s:%d/speed/", s.Host, s.Port)
return fmt.Sprintf("%s/speed/", s.URL().String())
}
}
}
Expand Down
10 changes: 8 additions & 2 deletions speedtest/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ func enQueue(s defs.Server) string {
md5Ctx.Write([]byte(fmt.Sprintf("model=Android&imei=%s&stime=%s", imei, ts)))
token := hex.EncodeToString(md5Ctx.Sum(nil))

url := fmt.Sprintf("http://%s:%d/speed/dovalid?key=&flag=true&bandwidth=200&model=Android&imei=%s&time=%s&token=%s", s.Host, s.Port, imei, ts, token)
url := fmt.Sprintf("%s/speed/dovalid?key=&flag=true&bandwidth=200&model=Android&imei=%s&time=%s&token=%s", s.URL().String(), imei, ts, token)

req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
Expand Down Expand Up @@ -295,7 +295,7 @@ func enQueue(s defs.Server) string {
}

func deQueue(s defs.Server, key string) bool {
url := fmt.Sprintf("http://%s:%d/speed/dovalid?key=%s", s.Host, s.Port, key)
url := fmt.Sprintf("%s/speed/dovalid?key=%s", s.URL().String(), key)

req, err := http.NewRequest(http.MethodPost, url, nil)
if err != nil {
Expand Down Expand Up @@ -328,6 +328,9 @@ func deQueue(s defs.Server, key string) bool {

func MatchProvince(prov string, provinces *[]defs.ProvinceInfo) uint8 {
for _, p := range *provinces {
if p.ID == 0 {
continue
}
if p.Short == prov || p.Name == prov || strings.Contains(p.Name, prov) || strings.Contains(prov, p.Short) {
return p.ID
}
Expand All @@ -337,6 +340,9 @@ func MatchProvince(prov string, provinces *[]defs.ProvinceInfo) uint8 {

func MatchISP(isp string) uint8 {
for _, i := range defs.ISPMap {
if i.ID == 0 {
continue
}
if i.Name == isp || strings.Contains(isp, i.Name) || strings.Contains(i.Name, isp) {
return i.ID
}
Expand Down
10 changes: 8 additions & 2 deletions speedtest/speedtest.go
Original file line number Diff line number Diff line change
Expand Up @@ -297,8 +297,14 @@ func SpeedTest(c *cli.Context) error {
}

if !c.IsSet(defs.OptionServer) && !c.IsSet(defs.OptionServerGroup) && !c.Bool(defs.OptionList) {
if ispInfo != nil && ispInfo.Province != "" && ispInfo.ISP != "" && ispInfo.Country == "中国" {
province, isp := MatchProvince(ispInfo.Province, &provinces), MatchISP(ispInfo.ISP)
if ispInfo != nil && (ispInfo.Province != "" || ispInfo.ISP != "") && ispInfo.Country == "中国" {
province, isp := uint8(0), uint8(0)
if ispInfo.Province != "" {
province = MatchProvince(ispInfo.Province, &provinces)
}
if ispInfo.ISP != "" {
isp = MatchISP(ispInfo.ISP)
}
if province != 0 || isp != 0 {
_groups = append(_groups, fmt.Sprintf("%d@%d", province, isp))
} else {
Expand Down

0 comments on commit 7d315bb

Please sign in to comment.