1// Copyright 2015 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// +build go1.8 6 7package http2 8 9import ( 10 "crypto/tls" 11 "io" 12 "net/http" 13) 14 15func cloneTLSConfig(c *tls.Config) *tls.Config { 16 c2 := c.Clone() 17 c2.GetClientCertificate = c.GetClientCertificate // golang.org/issue/19264 18 return c2 19} 20 21var _ http.Pusher = (*responseWriter)(nil) 22 23// Push implements http.Pusher. 24func (w *responseWriter) Push(target string, opts *http.PushOptions) error { 25 internalOpts := pushOptions{} 26 if opts != nil { 27 internalOpts.Method = opts.Method 28 internalOpts.Header = opts.Header 29 } 30 return w.push(target, internalOpts) 31} 32 33func configureServer18(h1 *http.Server, h2 *Server) error { 34 if h2.IdleTimeout == 0 { 35 if h1.IdleTimeout != 0 { 36 h2.IdleTimeout = h1.IdleTimeout 37 } else { 38 h2.IdleTimeout = h1.ReadTimeout 39 } 40 } 41 return nil 42} 43 44func shouldLogPanic(panicValue interface{}) bool { 45 return panicValue != nil && panicValue != http.ErrAbortHandler 46} 47 48func reqGetBody(req *http.Request) func() (io.ReadCloser, error) { 49 return req.GetBody 50} 51 52func reqBodyIsNoBody(body io.ReadCloser) bool { 53 return body == http.NoBody 54} 55 56func go18httpNoBody() io.ReadCloser { return http.NoBody } // for tests only 57