[WIP] Use a managed HTTP(S) transport implementation #374

Closed
carlosmn wants to merge 15 commits from cmn/go-http into main
1 changed files with 23 additions and 2 deletions
Showing only changes of commit c726f932db - Show all commits

25
http.go
View File

@ -82,9 +82,17 @@ func RegisterManagedHttps() error {
return nil
}
type ManagedTransport struct{}
type ManagedTransport struct {
owner *C.git_transport
client *http.Client
}
func (self *ManagedTransport) Action(url string, action SmartService) (SmartSubtransportStream, error) {
if err := self.ensureClient(); err != nil {
return nil, err
}
var req *http.Request
var err error
switch action {
@ -128,6 +136,19 @@ func (self *ManagedTransport) Close() error {
func (self *ManagedTransport) Free() {
}
func (self *ManagedTransport) ensureClient() error {
if self.client != nil {
return nil
}
transport := &http.Transport{
Proxy: http.ProxyFromEnvironment,
}
self.client = &http.Client{Transport: transport}
return nil
}
type ManagedHttpStream struct {
req *http.Request
resp *http.Response
@ -247,7 +268,7 @@ func httpSmartSubtransportCb(out **C.git_smart_subtransport, owner *C.git_transp
}
transport := C.calloc(1, C.size_t(unsafe.Sizeof(C.managed_smart_subtransport{})))
managed := &ManagedTransport{}
managed := &ManagedTransport{owner: owner}
managedPtr := pointerHandles.Track(managed)
C._go_git_setup_smart_subtransport(transport, managedPtr)