1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package webrtc
import (
"net/http"
"github.com/johnandersen777/socialweb-computer-kcp/internal/contract/tunnel"
"github.com/johnandersen777/socialweb-computer-kcp/internal/kit/httptunnel"
)
func Client(base *http.Client, dialer tunnel.Dialer) *http.Client {
if base == nil {
base = http.DefaultClient
}
next := base.Transport
if next == nil {
next = http.DefaultTransport
}
out := *base
out.Transport = &router{next: next, webrtc: &httptunnel.Protocol{Dialer: dialer}}
return &out
}
type router struct {
next http.RoundTripper
webrtc http.RoundTripper
}
func (r *router) RoundTrip(req *http.Request) (*http.Response, error) {
if req.URL != nil && req.URL.Scheme == tunnel.KindWebRTC {
return r.webrtc.RoundTrip(req)
}
return r.next.RoundTrip(req)
}