browser_client.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package splithttp
  2. import (
  3. "context"
  4. "io"
  5. gonet "net"
  6. "github.com/xtls/xray-core/transport/internet/browser_dialer"
  7. "github.com/xtls/xray-core/transport/internet/websocket"
  8. )
  9. // implements splithttp.DialerClient in terms of browser dialer
  10. // has no fields because everything is global state :O)
  11. type BrowserDialerClient struct{}
  12. func (c *BrowserDialerClient) IsClosed() bool {
  13. panic("not implemented yet")
  14. }
  15. func (c *BrowserDialerClient) OpenStream(ctx context.Context, url string, body io.Reader, uploadOnly bool) (io.ReadCloser, gonet.Addr, gonet.Addr, error) {
  16. if body != nil {
  17. panic("not implemented yet")
  18. }
  19. conn, err := browser_dialer.DialGet(url)
  20. dummyAddr := &gonet.IPAddr{}
  21. if err != nil {
  22. return nil, dummyAddr, dummyAddr, err
  23. }
  24. return websocket.NewConnection(conn, dummyAddr, nil, 0), conn.RemoteAddr(), conn.LocalAddr(), nil
  25. }
  26. func (c *BrowserDialerClient) PostPacket(ctx context.Context, url string, body io.Reader, contentLength int64) error {
  27. bytes, err := io.ReadAll(body)
  28. if err != nil {
  29. return err
  30. }
  31. err = browser_dialer.DialPost(url, bytes)
  32. if err != nil {
  33. return err
  34. }
  35. return nil
  36. }