diff --git a/plugin/othttp/filters/filters.go b/plugin/othttp/filters/filters.go index de6e56d95f4..d4e84b60434 100644 --- a/plugin/othttp/filters/filters.go +++ b/plugin/othttp/filters/filters.go @@ -126,29 +126,3 @@ func Method(m string) othttp.Filter { return m == r.Method } } - -// Header returns a Filter that returns true if the request -// includes a header k with a value equal to v. -func Header(k, v string) othttp.Filter { - return func(r *http.Request) bool { - for _, hv := range r.Header.Values(k) { - if v == hv { - return true - } - } - return false - } -} - -// HeaderContains returns a Filter that returns true if the request -// includes a header k with a value that contains v. -func HeaderContains(k, v string) othttp.Filter { - return func(r *http.Request) bool { - for _, hv := range r.Header.Values(k) { - if strings.Contains(hv, v) { - return true - } - } - return false - } -} diff --git a/plugin/othttp/filters/header_go14.go b/plugin/othttp/filters/header_go14.go new file mode 100644 index 00000000000..a563bfd3c1a --- /dev/null +++ b/plugin/othttp/filters/header_go14.go @@ -0,0 +1,50 @@ +// Copyright 2020, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build go1.14 + +package filters + +import ( + "net/http" + "strings" + + "go.opentelemetry.io/otel/plugin/othttp" +) + +// Header returns a Filter that returns true if the request +// includes a header k with a value equal to v. +func Header(k, v string) othttp.Filter { + return func(r *http.Request) bool { + for _, hv := range r.Header.Values(k) { + if v == hv { + return true + } + } + return false + } +} + +// HeaderContains returns a Filter that returns true if the request +// includes a header k with a value that contains v. +func HeaderContains(k, v string) othttp.Filter { + return func(r *http.Request) bool { + for _, hv := range r.Header.Values(k) { + if strings.Contains(hv, v) { + return true + } + } + return false + } +} diff --git a/plugin/othttp/filters/header_nongo14.go b/plugin/othttp/filters/header_nongo14.go new file mode 100644 index 00000000000..7a5ffa3c136 --- /dev/null +++ b/plugin/othttp/filters/header_nongo14.go @@ -0,0 +1,51 @@ +// Copyright 2020, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !go1.14 + +package filters + +import ( + "net/http" + "net/textproto" + "strings" + + "go.opentelemetry.io/otel/plugin/othttp" +) + +// Header returns a Filter that returns true if the request +// includes a header k with a value equal to v. +func Header(k, v string) othttp.Filter { + return func(r *http.Request) bool { + for _, hv := range r.Header[textproto.CanonicalMIMEHeaderKey(k)] { + if v == hv { + return true + } + } + return false + } +} + +// HeaderContains returns a Filter that returns true if the request +// includes a header k with a value that contains v. +func HeaderContains(k, v string) othttp.Filter { + return func(r *http.Request) bool { + for _, hv := range r.Header[textproto.CanonicalMIMEHeaderKey(k)] { + if strings.Contains(hv, v) { + return true + } + } + return false + } +}