mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2024-12-24 19:35:35 +08:00
73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package rewrites
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"io/ioutil"
|
|
|
|
C "github.com/Dreamacro/clash/constant"
|
|
)
|
|
|
|
var (
|
|
EmptyDict = NewResponseBody([]byte("{}"))
|
|
EmptyArray = NewResponseBody([]byte("[]"))
|
|
OnePixelPNG = NewResponseBody([]byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x15, 0xc4, 0x89, 0x00, 0x00, 0x00, 0x11, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0x62, 0x62, 0x60, 0x60, 0x60, 0x00, 0x04, 0x00, 0x00, 0xff, 0xff, 0x00, 0x0f, 0x00, 0x03, 0xfe, 0x8f, 0xeb, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82})
|
|
)
|
|
|
|
type Body interface {
|
|
Body() io.ReadCloser
|
|
ContentLength() int64
|
|
}
|
|
|
|
type ResponseBody struct {
|
|
data []byte
|
|
length int64
|
|
}
|
|
|
|
func (r *ResponseBody) Body() io.ReadCloser {
|
|
return ioutil.NopCloser(bytes.NewReader(r.data))
|
|
}
|
|
|
|
func (r *ResponseBody) ContentLength() int64 {
|
|
return r.length
|
|
}
|
|
|
|
func NewResponseBody(data []byte) *ResponseBody {
|
|
return &ResponseBody{
|
|
data: data,
|
|
length: int64(len(data)),
|
|
}
|
|
}
|
|
|
|
type RewriteRules struct {
|
|
request []C.Rewrite
|
|
response []C.Rewrite
|
|
}
|
|
|
|
func (rr *RewriteRules) SearchInRequest(do func(C.Rewrite) bool) bool {
|
|
for _, v := range rr.request {
|
|
if do(v) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (rr *RewriteRules) SearchInResponse(do func(C.Rewrite) bool) bool {
|
|
for _, v := range rr.response {
|
|
if do(v) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func NewRewriteRules(req []C.Rewrite, res []C.Rewrite) *RewriteRules {
|
|
return &RewriteRules{
|
|
request: req,
|
|
response: res,
|
|
}
|
|
}
|
|
|
|
var _ C.RewriteRule = (*RewriteRules)(nil)
|