mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-11-16 22:04:39 +01:00
Fixed h2c enable crash bug
- Moved h2c roundtripper to a dedicated module - Fixed h2c enable crash bug
This commit is contained in:
45
src/mod/dynamicproxy/modh2c/modh2c.go
Normal file
45
src/mod/dynamicproxy/modh2c/modh2c.go
Normal file
@@ -0,0 +1,45 @@
|
||||
package modh2c
|
||||
|
||||
/*
|
||||
modh2c.go
|
||||
|
||||
This module is a simple h2c roundtripper for dpcore
|
||||
*/
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/http2"
|
||||
)
|
||||
|
||||
type H2CRoundTripper struct {
|
||||
}
|
||||
|
||||
func NewH2CRoundTripper() *H2CRoundTripper {
|
||||
return &H2CRoundTripper{}
|
||||
}
|
||||
|
||||
// Example from https://github.com/thrawn01/h2c-golang-example/blob/master/cmd/client/main.go
|
||||
func (h2c *H2CRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
||||
defer cancel()
|
||||
|
||||
req, err := http.NewRequestWithContext(ctx, req.Method, req.RequestURI, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tr := &http2.Transport{
|
||||
AllowHTTP: true,
|
||||
DialTLSContext: func(ctx context.Context, network, addr string, cfg *tls.Config) (net.Conn, error) {
|
||||
var d net.Dialer
|
||||
return d.DialContext(ctx, network, addr)
|
||||
},
|
||||
}
|
||||
|
||||
return tr.RoundTrip(req)
|
||||
}
|
||||
Reference in New Issue
Block a user