Skip to content
Open
4 changes: 2 additions & 2 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ func buildFromConfig(logger Logger, config *httpClientConfig) (*http.Client, ban

clientProfile := config.clientProfile

transport, err := newRoundTripper(clientProfile, config.transportOptions, config.serverNameOverwrite, config.insecureSkipVerify, config.withRandomTlsExtensionOrder, config.forceHttp1, config.disableHttp3, config.certificatePins, config.badPinHandler, config.disableIPV6, config.disableIPV4, bandwidthTracker, dialer)
transport, err := newRoundTripper(clientProfile, config.transportOptions, config.serverNameOverwrite, config.insecureSkipVerify, config.withRandomTlsExtensionOrder, config.forceHttp1, config.disableHttp3, config.certificatePins, config.badPinHandler, config.disableIPV6, config.disableIPV4, config.initialStreamID, config.allowHTTP, bandwidthTracker, dialer)
if err != nil {
return nil, nil, clientProfile, err
}
Expand Down Expand Up @@ -264,7 +264,7 @@ func (c *httpClient) applyProxy() error {
dialer = proxyDialer
}

transport, err := newRoundTripper(c.config.clientProfile, c.config.transportOptions, c.config.serverNameOverwrite, c.config.insecureSkipVerify, c.config.withRandomTlsExtensionOrder, c.config.forceHttp1, c.config.disableHttp3, c.config.certificatePins, c.config.badPinHandler, c.config.disableIPV6, c.config.disableIPV4, c.bandwidthTracker, dialer)
transport, err := newRoundTripper(c.config.clientProfile, c.config.transportOptions, c.config.serverNameOverwrite, c.config.insecureSkipVerify, c.config.withRandomTlsExtensionOrder, c.config.forceHttp1, c.config.disableHttp3, c.config.certificatePins, c.config.badPinHandler, c.config.disableIPV6, c.config.disableIPV4, c.config.initialStreamID, c.config.allowHTTP, c.bandwidthTracker, dialer)
if err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions profiles/internal_custom_profiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ func getMMSClientProfile2() ClientProfile {
":authority",
}

return NewClientProfile(clientHelloId, settings, settingsOrder, pseudoHeaderOrder, 15663105, nil, nil)
return NewClientProfile(clientHelloId, settings, settingsOrder, pseudoHeaderOrder, 15663105, nil, nil, 0, false)
}

var MMSIos3 = getMMSClientProfile3()
Expand Down Expand Up @@ -209,5 +209,5 @@ func getMMSClientProfile3() ClientProfile {
":authority",
}

return NewClientProfile(clientHelloId, settings, settingsOrder, pseudoHeaderOrder, 15663105, nil, nil)
return NewClientProfile(clientHelloId, settings, settingsOrder, pseudoHeaderOrder, 15663105, nil, nil, 0, false)
}
16 changes: 15 additions & 1 deletion profiles/profiles.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,12 @@ type ClientProfile struct {
pseudoHeaderOrder []string
settingsOrder []http2.SettingID
connectionFlow uint32
// [ADD THESE FIELDS]
streamID uint32
allowHTTP bool
}

func NewClientProfile(clientHelloId tls.ClientHelloID, settings map[http2.SettingID]uint32, settingsOrder []http2.SettingID, pseudoHeaderOrder []string, connectionFlow uint32, priorities []http2.Priority, headerPriority *http2.PriorityParam) ClientProfile {
func NewClientProfile(clientHelloId tls.ClientHelloID, settings map[http2.SettingID]uint32, settingsOrder []http2.SettingID, pseudoHeaderOrder []string, connectionFlow uint32, priorities []http2.Priority, headerPriority *http2.PriorityParam, streamID uint32, allowHTTP bool) ClientProfile {
return ClientProfile{
clientHelloId: clientHelloId,
settings: settings,
Expand All @@ -97,6 +100,9 @@ func NewClientProfile(clientHelloId tls.ClientHelloID, settings map[http2.Settin
connectionFlow: connectionFlow,
priorities: priorities,
headerPriority: headerPriority,
// [ASSIGN THEM]
streamID: streamID,
allowHTTP: allowHTTP,
}
}

Expand Down Expand Up @@ -135,3 +141,11 @@ func (c ClientProfile) GetClientHelloId() tls.ClientHelloID {
func (c ClientProfile) GetPriorities() []http2.Priority {
return c.priorities
}

func (c ClientProfile) GetStreamID() uint32 {
return c.streamID
}

func (c ClientProfile) GetAllowHTTP() bool {
return c.allowHTTP
}
8 changes: 7 additions & 1 deletion roundtripper.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ const defaultIdleConnectionTimeout = 90 * time.Second
var errProtocolNegotiated = errors.New("protocol negotiated")

type roundTripper struct {
initialStreamID uint32
allowHTTP bool
clientHelloId tls.ClientHelloID
certificatePinner CertificatePinner

Expand Down Expand Up @@ -203,6 +205,8 @@ func (rt *roundTripper) dialTLS(ctx context.Context, network, addr string) (net.
ConnectionFlow: rt.connectionFlow,
HeaderPriority: rt.headerPriority,
IdleConnTimeout: idleConnectionTimeout,
InitialStreamID: rt.initialStreamID,
AllowHTTP: rt.allowHTTP,
}

if rt.transportOptions != nil {
Expand Down Expand Up @@ -371,7 +375,7 @@ func (rt *roundTripper) getDialTLSAddr(req *http.Request) string {
return net.JoinHostPort(req.URL.Host, "443")
}

func newRoundTripper(clientProfile profiles.ClientProfile, transportOptions *TransportOptions, serverNameOverwrite string, insecureSkipVerify bool, withRandomTlsExtensionOrder bool, forceHttp1 bool, disableHttp3 bool, certificatePins map[string][]string, badPinHandlerFunc BadPinHandlerFunc, disableIPV6 bool, disableIPV4 bool, bandwidthTracker bandwidth.BandwidthTracker, dialer ...proxy.ContextDialer) (http.RoundTripper, error) {
func newRoundTripper(clientProfile profiles.ClientProfile, transportOptions *TransportOptions, serverNameOverwrite string, insecureSkipVerify bool, withRandomTlsExtensionOrder bool, forceHttp1 bool, disableHttp3 bool, certificatePins map[string][]string, badPinHandlerFunc BadPinHandlerFunc, disableIPV6 bool, disableIPV4 bool, initialStreamID uint32, allowHTTP bool, bandwidthTracker bandwidth.BandwidthTracker, dialer ...proxy.ContextDialer) (http.RoundTripper, error) {
pinner, err := NewCertificatePinner(certificatePins)
if err != nil {
return nil, fmt.Errorf("can not instantiate certificate pinner: %w", err)
Expand Down Expand Up @@ -408,6 +412,8 @@ func newRoundTripper(clientProfile profiles.ClientProfile, transportOptions *Tra
disableIPV6: disableIPV6,
disableIPV4: disableIPV4,
bandwidthTracker: bandwidthTracker,
initialStreamID: clientProfile.GetStreamID(),
allowHTTP: clientProfile.GetAllowHTTP(),
}

if len(dialer) > 0 {
Expand Down