|
|
@@ -15,8 +15,8 @@ type URLs struct {
|
|
15
|
15
|
}
|
|
16
|
16
|
|
|
17
|
17
|
type IPURLs struct {
|
|
18
|
|
- IPv4 URLs `json:"ipv4"`
|
|
19
|
|
- IPv6 URLs `json:"ipv6"`
|
|
|
18
|
+ IPv4 *URLs `json:"ipv4,omitempty"`
|
|
|
19
|
+ IPv6 *URLs `json:"ipv6,omitempty"`
|
|
20
|
20
|
BotSecret string `json:"secret_for_mtproxybot"`
|
|
21
|
21
|
}
|
|
22
|
22
|
|
|
|
@@ -32,25 +32,33 @@ func GetURLs() (urls IPURLs) {
|
|
32
|
32
|
secret = "ee" + hex.EncodeToString(C.Secret) + hex.EncodeToString([]byte(C.CloakHost))
|
|
33
|
33
|
}
|
|
34
|
34
|
|
|
35
|
|
- urls.IPv4 = makeURLs(C.PublicIPv4, secret)
|
|
36
|
|
- urls.IPv6 = makeURLs(C.PublicIPv6, secret)
|
|
|
35
|
+ if C.PublicIPv4.IP != nil {
|
|
|
36
|
+ urls.IPv4 = makeURLs(C.PublicIPv4, secret)
|
|
|
37
|
+ }
|
|
|
38
|
+
|
|
|
39
|
+ if C.PublicIPv6.IP != nil {
|
|
|
40
|
+ urls.IPv6 = makeURLs(C.PublicIPv6, secret)
|
|
|
41
|
+ }
|
|
|
42
|
+
|
|
37
|
43
|
urls.BotSecret = hex.EncodeToString(C.Secret)
|
|
38
|
44
|
|
|
39
|
45
|
return urls
|
|
40
|
46
|
}
|
|
41
|
47
|
|
|
42
|
|
-func makeURLs(addr *net.TCPAddr, secret string) (urls URLs) {
|
|
|
48
|
+func makeURLs(addr *net.TCPAddr, secret string) *URLs {
|
|
|
49
|
+ urls := &URLs{}
|
|
|
50
|
+
|
|
43
|
51
|
values := url.Values{}
|
|
44
|
52
|
values.Set("server", addr.IP.String())
|
|
45
|
53
|
values.Set("port", strconv.Itoa(addr.Port))
|
|
46
|
54
|
values.Set("secret", secret)
|
|
47
|
55
|
|
|
48
|
|
- urls.TG = makeTGURL(values)
|
|
49
|
|
- urls.TMe = makeTMeURL(values)
|
|
50
|
|
- urls.TGQRCode = makeQRCodeURL(urls.TG)
|
|
51
|
|
- urls.TMeQRCode = makeQRCodeURL(urls.TMe)
|
|
52
|
|
-
|
|
53
|
|
- return
|
|
|
56
|
+ return &URLs{
|
|
|
57
|
+ TG: makeTGURL(values),
|
|
|
58
|
+ TMe: makeTMeURL(values),
|
|
|
59
|
+ TGQRCode: makeQRCodeURL(urls.TG),
|
|
|
60
|
+ TMeQRCode: makeQRCodeURL(urls.TMe),
|
|
|
61
|
+ }
|
|
54
|
62
|
}
|
|
55
|
63
|
|
|
56
|
64
|
func makeTGURL(values url.Values) string {
|