Hunter0x7c7
2022-08-11 a82f9cb69f63aaeba40c024960deda7d75b9fece
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package v4
 
import (
    "encoding/json"
 
    "github.com/golang/protobuf/proto"
 
    "github.com/v2fly/v2ray-core/v5/common/serial"
    "github.com/v2fly/v2ray-core/v5/infra/conf/cfgcommon"
    "github.com/v2fly/v2ray-core/v5/infra/conf/cfgcommon/loader"
    "github.com/v2fly/v2ray-core/v5/proxy/blackhole"
)
 
type NoneResponse struct{}
 
func (*NoneResponse) Build() (proto.Message, error) {
    return new(blackhole.NoneResponse), nil
}
 
type HTTPResponse struct{}
 
func (*HTTPResponse) Build() (proto.Message, error) {
    return new(blackhole.HTTPResponse), nil
}
 
type BlackholeConfig struct {
    Response json.RawMessage `json:"response"`
}
 
func (v *BlackholeConfig) Build() (proto.Message, error) {
    config := new(blackhole.Config)
    if v.Response != nil {
        response, _, err := configLoader.Load(v.Response)
        if err != nil {
            return nil, newError("Config: Failed to parse Blackhole response config.").Base(err)
        }
        responseSettings, err := response.(cfgcommon.Buildable).Build()
        if err != nil {
            return nil, err
        }
        config.Response = serial.ToTypedMessage(responseSettings)
    }
 
    return config, nil
}
 
var configLoader = loader.NewJSONConfigLoader(
    loader.ConfigCreatorCache{
        "none": func() interface{} { return new(NoneResponse) },
        "http": func() interface{} { return new(HTTPResponse) },
    },
    "type",
    "")