mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-09-21 08:36:53 +00:00
https://github.com/XTLS/Xray-core/pull/6711#issuecomment-5508683394 --------- Co-authored-by: Raaad1on <djilyawhite@gmail.com>
43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package conf
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"strings"
|
|
|
|
"github.com/xtls/xray-core/common/errors"
|
|
"github.com/xtls/xray-core/proxy/blackhole"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
type ResponseConfig struct {
|
|
Type string `json:"type"`
|
|
CustomResponseData string `json:"customResponseData"`
|
|
}
|
|
|
|
type BlackholeConfig struct {
|
|
Response *ResponseConfig `json:"response"`
|
|
}
|
|
|
|
func (v *BlackholeConfig) Build() (proto.Message, error) {
|
|
config := new(blackhole.Config)
|
|
if v.Response != nil {
|
|
responseName := strings.ToLower(v.Response.Type)
|
|
switch responseName {
|
|
case "none", "":
|
|
config.Response = &blackhole.Response{Type: "none"}
|
|
case "http":
|
|
config.Response = &blackhole.Response{Type: "http"}
|
|
case "custom":
|
|
data, err := base64.StdEncoding.DecodeString(v.Response.CustomResponseData)
|
|
if err != nil {
|
|
return nil, errors.New("failed to decode custom response data: " + err.Error())
|
|
}
|
|
config.Response = &blackhole.Response{Type: "custom", CustomResponseData: data}
|
|
default:
|
|
return nil, errors.New("unknown blackhole response: " + responseName)
|
|
}
|
|
}
|
|
|
|
return config, nil
|
|
}
|