| 62 | } |
| 63 | |
| 64 | func (cfg *Engine) Remote(ctx context.Context) (wasConnected bool, err error) { |
| 65 | tlsConf := &tls.Config{ |
| 66 | InsecureSkipVerify: true, |
| 67 | NextProtos: []string{"monibuca"}, |
| 68 | } |
| 69 | |
| 70 | conn, err := quic.DialAddr(ctx, cfg.Server, tlsConf, &quic.Config{ |
| 71 | KeepAlivePeriod: time.Second * 10, |
| 72 | EnableDatagrams: true, |
| 73 | }) |
| 74 | wasConnected = err == nil |
| 75 | if stream := quic.Stream(nil); err == nil { |
| 76 | if stream, err = conn.OpenStreamSync(ctx); err == nil { |
| 77 | _, err = stream.Write(append([]byte{1}, (cfg.Secret + "\n")...)) |
| 78 | if msg := []byte(nil); err == nil { |
| 79 | if msg, err = bufio.NewReader(stream).ReadSlice(0); err == nil { |
| 80 | var rMessage map[string]any |
| 81 | if err = json.Unmarshal(msg[:len(msg)-1], &rMessage); err == nil { |
| 82 | if rMessage["code"].(float64) != 0 { |
| 83 | if Global.LogLang == "zh" { |
| 84 | log.Error("控制台服务器", cfg.Server, "返回错误", rMessage["msg"]) |
| 85 | } else { |
| 86 | log.Error("response from console server ", cfg.Server, " ", rMessage["msg"]) |
| 87 | } |
| 88 | return false, nil |
| 89 | } else { |
| 90 | cfg.reportStream = stream |
| 91 | if Global.LogLang == "zh" { |
| 92 | log.Info("连接到控制台服务器", cfg.Server, "成功", rMessage) |
| 93 | } else { |
| 94 | log.Info("response from console server ", cfg.Server, " success ", rMessage) |
| 95 | } |
| 96 | if v, ok := rMessage["enableReport"]; ok { |
| 97 | cfg.enableReport = v.(bool) |
| 98 | } |
| 99 | if v, ok := rMessage["instanceId"]; ok { |
| 100 | cfg.instanceId = v.(string) |
| 101 | } |
| 102 | } |
| 103 | } |
| 104 | } |
| 105 | } |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | for err == nil { |
| 110 | var s quic.Stream |
| 111 | if s, err = conn.AcceptStream(ctx); err == nil { |
| 112 | go cfg.ReceiveRequest(s, conn) |
| 113 | } |
| 114 | } |
| 115 | return wasConnected, err |
| 116 | } |
| 117 | |
| 118 | func (cfg *Engine) ReceiveRequest(s quic.Stream, conn quic.Connection) error { |
| 119 | defer s.Close() |