~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
34 lines · 777 B Raw History
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)
}