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