mirror of
https://github.com/MetaCubeX/ClashMetaForAndroid.git
synced 2024-11-25 06:46:09 +03:00
using clashHttp in config/fetch.go
This commit is contained in:
parent
e5563b392e
commit
d4c078bab0
@ -1 +1 @@
|
||||
Subproject commit 150bf7fc65c7736d7c56e2ce7866f03a620d9014
|
||||
Subproject commit e4abecd4e25514ec0266e6d855de328a449dbfd1
|
@ -1,6 +1,7 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
@ -12,7 +13,8 @@ import (
|
||||
"time"
|
||||
|
||||
"cfa/native/app"
|
||||
"github.com/Dreamacro/clash/component/dialer"
|
||||
|
||||
clashHttp "github.com/Dreamacro/clash/component/http"
|
||||
)
|
||||
|
||||
type Status struct {
|
||||
@ -22,30 +24,15 @@ type Status struct {
|
||||
MaxProgress int `json:"max"`
|
||||
}
|
||||
|
||||
var client = &http.Client{
|
||||
Transport: &http.Transport{
|
||||
DisableKeepAlives: true,
|
||||
TLSHandshakeTimeout: 10 * time.Second,
|
||||
ExpectContinueTimeout: 1 * time.Second,
|
||||
DialContext: dialer.DialTunnelContext,
|
||||
},
|
||||
Timeout: 60 * time.Second,
|
||||
}
|
||||
|
||||
func openUrl(url string) (io.ReadCloser, error) {
|
||||
request, err := http.NewRequest(http.MethodGet, url, nil)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
||||
defer cancel()
|
||||
response, err := clashHttp.HttpRequest(ctx, url, http.MethodGet, http.Header{"User-Agent": {"ClashMetaForAndroid/" + app.VersionName()}}, nil)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
request.Header.Set("User-Agent", "ClashMetaForAndroid/"+app.VersionName())
|
||||
|
||||
response, err := client.Do(request)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return response.Body, nil
|
||||
}
|
||||
|
||||
|
@ -1,43 +0,0 @@
|
||||
package tunnel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/Dreamacro/clash/component/dialer"
|
||||
C "github.com/Dreamacro/clash/constant"
|
||||
"github.com/Dreamacro/clash/tunnel"
|
||||
)
|
||||
|
||||
func init() {
|
||||
dialer.DefaultTunnelDialer = func(context context.Context, network, address string) (net.Conn, error) {
|
||||
if !strings.HasPrefix(network, "tcp") {
|
||||
return nil, net.UnknownNetworkError("unsupported network")
|
||||
}
|
||||
|
||||
host, port, err := net.SplitHostPort(address)
|
||||
dstPort, _ := strconv.Atoi(port)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
left, right := net.Pipe()
|
||||
|
||||
metadata := &C.Metadata{
|
||||
NetWork: C.TCP,
|
||||
Type: C.HTTPS,
|
||||
SrcIP: loopback,
|
||||
SrcPort: 65535,
|
||||
DstPort: uint16(dstPort),
|
||||
Host: host,
|
||||
RawSrcAddr: left.RemoteAddr(),
|
||||
RawDstAddr: left.LocalAddr(),
|
||||
}
|
||||
|
||||
go tunnel.Tunnel.HandleTCPConn(right, metadata)
|
||||
|
||||
return left, nil
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user