(a Adaptor, c *gin.Context, info *common.RelayInfo, requestBody io.Reader)
| 367 | } |
| 368 | |
| 369 | func DoWssRequest(a Adaptor, c *gin.Context, info *common.RelayInfo, requestBody io.Reader) (*websocket.Conn, error) { |
| 370 | fullRequestURL, err := a.GetRequestURL(info) |
| 371 | if err != nil { |
| 372 | return nil, fmt.Errorf("get request url failed: %w", err) |
| 373 | } |
| 374 | targetHeader := http.Header{} |
| 375 | err = a.SetupRequestHeader(c, &targetHeader, info) |
| 376 | if err != nil { |
| 377 | return nil, fmt.Errorf("setup request header failed: %w", err) |
| 378 | } |
| 379 | // 在 SetupRequestHeader 之后应用 Header Override,确保用户设置优先级最高 |
| 380 | // 这样可以覆盖默认的 Authorization header 设置 |
| 381 | headerOverride, err := processHeaderOverride(info, c) |
| 382 | if err != nil { |
| 383 | return nil, err |
| 384 | } |
| 385 | for key, value := range headerOverride { |
| 386 | targetHeader.Set(key, value) |
| 387 | } |
| 388 | targetHeader.Set("Content-Type", c.Request.Header.Get("Content-Type")) |
| 389 | targetConn, _, err := websocket.DefaultDialer.Dial(fullRequestURL, targetHeader) |
| 390 | if err != nil { |
| 391 | return nil, fmt.Errorf("dial failed to %s: %w", fullRequestURL, err) |
| 392 | } |
| 393 | // send request body |
| 394 | //all, err := io.ReadAll(requestBody) |
| 395 | //err = service.WssString(c, targetConn, string(all)) |
| 396 | return targetConn, nil |
| 397 | } |
| 398 | |
| 399 | func startPingKeepAlive(c *gin.Context, pingInterval time.Duration) context.CancelFunc { |
| 400 | pingerCtx, stopPinger := context.WithCancel(context.Background()) |
no test coverage detected