93 lines
2.2 KiB
Diff
93 lines
2.2 KiB
Diff
diff --git a/internal/localsend/localsend.go b/internal/localsend/localsend.go
|
|
index e30e6f5..c0c2b8e 100644
|
|
--- a/internal/localsend/localsend.go
|
|
+++ b/internal/localsend/localsend.go
|
|
@@ -2,6 +2,7 @@ package localsend
|
|
|
|
import (
|
|
"encoding/json"
|
|
+ "fmt"
|
|
"net"
|
|
|
|
"github.com/0w0mewo/localsend-cli/internal/localsend/constants"
|
|
@@ -13,41 +14,53 @@ import (
|
|
func GetDeviceInfo(ip string, https bool) (models.DeviceInfo, error) {
|
|
remoteAddr := net.JoinHostPort(ip, "53317")
|
|
|
|
- agent := fiber.AcquireAgent()
|
|
- defer fiber.ReleaseAgent(agent)
|
|
-
|
|
scheme := "http"
|
|
if https {
|
|
scheme = "https"
|
|
}
|
|
|
|
- req := agent.Request()
|
|
- req.URI().SetScheme(scheme)
|
|
- req.URI().SetHost(remoteAddr)
|
|
- req.URI().SetPath(constants.InfoPath)
|
|
- req.Header.SetMethod(fiber.MethodGet)
|
|
- err := agent.Parse()
|
|
- if err != nil {
|
|
- return models.DeviceInfo{}, err
|
|
- }
|
|
+ paths := []string{constants.InfoPath, "/api/localsend/v2/info", constants.InfoPathLegacy}
|
|
+ var lastErr error
|
|
|
|
- status, b, errs := agent.InsecureSkipVerify().Bytes()
|
|
- if len(errs) != 0 {
|
|
- return models.DeviceInfo{}, errs[0]
|
|
- }
|
|
- err = constants.ParseError(status)
|
|
- if err != nil {
|
|
- return models.DeviceInfo{}, err
|
|
- }
|
|
+ for _, path := range paths {
|
|
+ agent := fiber.AcquireAgent()
|
|
+ req := agent.Request()
|
|
+ req.URI().SetScheme(scheme)
|
|
+ req.URI().SetHost(remoteAddr)
|
|
+ req.URI().SetPath(path)
|
|
+ req.Header.SetMethod(fiber.MethodGet)
|
|
+ err := agent.Parse()
|
|
+ if err != nil {
|
|
+ fiber.ReleaseAgent(agent)
|
|
+ return models.DeviceInfo{}, err
|
|
+ }
|
|
|
|
- var res models.DeviceInfo
|
|
- err = json.Unmarshal(b, &res)
|
|
- if err != nil {
|
|
- return models.DeviceInfo{}, err
|
|
+ status, b, errs := agent.InsecureSkipVerify().Bytes()
|
|
+ fiber.ReleaseAgent(agent)
|
|
+ if len(errs) != 0 {
|
|
+ lastErr = errs[0]
|
|
+ continue
|
|
+ }
|
|
+ err = constants.ParseError(status)
|
|
+ if err != nil {
|
|
+ lastErr = err
|
|
+ continue
|
|
+ }
|
|
+
|
|
+ var res models.DeviceInfo
|
|
+ err = json.Unmarshal(b, &res)
|
|
+ if err != nil {
|
|
+ lastErr = err
|
|
+ continue
|
|
+ }
|
|
+ res.IP = ip
|
|
+ return res, nil
|
|
}
|
|
- res.IP = ip
|
|
|
|
- return res, nil
|
|
+ if lastErr == nil {
|
|
+ lastErr = fmt.Errorf("device info not found on known endpoints")
|
|
+ }
|
|
+ return models.DeviceInfo{}, lastErr
|
|
}
|
|
|
|
func NewFileSender(useDownloadAPI ...bool) send.FileSender {
|