blob: 7ce3883d8c8a692b726ff6f2a6a4e64024f11c7f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package wasm
import (
"net/http"
)
import (
"mosn.io/proxy-wasm-go-host/common"
"mosn.io/proxy-wasm-go-host/proxywasm"
)
import (
contexthttp "github.com/apache/dubbo-go-pixiu/pkg/context/http"
"github.com/apache/dubbo-go-pixiu/pkg/logger"
)
type (
headerWrapper struct {
header http.Header
}
importHandler struct {
ctx *contexthttp.HttpContext
reqHeader common.HeaderMap
proxywasm.DefaultImportsHandler
}
)
func (h *headerWrapper) Get(key string) (string, bool) {
value := h.header.Get(key)
if value == "" {
return "", false
}
return value, true
}
func (h *headerWrapper) Set(key, value string) {
h.header.Set(key, value)
}
func (h *headerWrapper) Add(key, value string) {
h.header.Add(key, value)
}
func (h *headerWrapper) Del(key string) {
h.header.Del(key)
}
func (h *headerWrapper) Range(f func(key string, value string) bool) {
for k := range h.header {
v := h.header.Get(k)
f(k, v)
}
}
func (h *headerWrapper) Clone() common.HeaderMap {
copy := &headerWrapper{
header: h.header.Clone(),
}
return copy
}
func (h *headerWrapper) ByteSize() uint64 {
var size uint64
for k := range h.header {
v := h.header.Get(k)
size += uint64(len(k) + len(v))
}
return size
}
func (im *importHandler) GetHttpRequestHeader() common.HeaderMap {
return im.reqHeader
}
func (im *importHandler) Log(level proxywasm.LogLevel, msg string) proxywasm.WasmResult {
switch level {
case proxywasm.LogLevelDebug:
logger.Debugf(msg)
case proxywasm.LogLevelInfo:
logger.Infof(msg)
case proxywasm.LogLevelWarn:
logger.Warnf(msg)
case proxywasm.LogLevelError:
logger.Errorf(msg)
default:
logger.Infof(msg)
}
return proxywasm.WasmResultOk
}