browser_client.go 1.1 KB

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