Update detendencies
This commit is contained in:
parent
d6d39f162a
commit
72a3b8c17d
34
go.mod
34
go.mod
@ -7,11 +7,11 @@ toolchain go1.22.1
|
||||
require (
|
||||
github.com/99designs/gqlgen v0.17.49
|
||||
github.com/Masterminds/semver/v3 v3.2.1
|
||||
github.com/adhocore/gronx v1.8.1
|
||||
github.com/adhocore/gronx v1.19.0
|
||||
github.com/andybalholm/brotli v1.1.0
|
||||
github.com/atrox/haikunatorgo/v2 v2.0.1
|
||||
github.com/caddyserver/certmagic v0.21.3
|
||||
github.com/datarhei/gosrt v0.6.0
|
||||
github.com/datarhei/gosrt v0.7.0
|
||||
github.com/datarhei/joy4 v0.0.0-20240603190808-b1407345907e
|
||||
github.com/fujiwara/shapeio v1.0.0
|
||||
github.com/go-playground/validator/v10 v10.22.0
|
||||
@ -32,9 +32,9 @@ require (
|
||||
github.com/lestrrat-go/strftime v1.0.6
|
||||
github.com/lithammer/shortuuid/v4 v4.0.0
|
||||
github.com/mattn/go-isatty v0.0.20
|
||||
github.com/minio/minio-go/v7 v7.0.74
|
||||
github.com/minio/minio-go/v7 v7.0.75
|
||||
github.com/prep/average v0.0.0-20200506183628-d26c465f48c3
|
||||
github.com/prometheus/client_golang v1.19.1
|
||||
github.com/prometheus/client_golang v1.20.0
|
||||
github.com/puzpuzpuz/xsync/v3 v3.4.0
|
||||
github.com/shirou/gopsutil/v3 v3.24.5
|
||||
github.com/stretchr/testify v1.9.0
|
||||
@ -46,12 +46,10 @@ require (
|
||||
go.etcd.io/bbolt v1.3.10
|
||||
go.uber.org/automaxprocs v1.5.3
|
||||
go.uber.org/zap v1.27.0
|
||||
golang.org/x/crypto v0.25.0
|
||||
golang.org/x/mod v0.19.0
|
||||
golang.org/x/crypto v0.26.0
|
||||
golang.org/x/mod v0.20.0
|
||||
)
|
||||
|
||||
//replace github.com/datarhei/core-client-go/v16 => ../core-client-go
|
||||
|
||||
require (
|
||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||
github.com/agnivade/levenshtein v1.1.1 // indirect
|
||||
@ -65,7 +63,7 @@ require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/fatih/color v1.17.0 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.4 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.5 // indirect
|
||||
github.com/ghodss/yaml v1.0.0 // indirect
|
||||
github.com/go-ini/ini v1.67.0 // indirect
|
||||
github.com/go-ole/go-ole v1.3.0 // indirect
|
||||
@ -89,8 +87,8 @@ require (
|
||||
github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mholt/acmez/v2 v2.0.1 // indirect
|
||||
github.com/miekg/dns v1.1.61 // indirect
|
||||
github.com/mholt/acmez/v2 v2.0.2 // indirect
|
||||
github.com/miekg/dns v1.1.62 // indirect
|
||||
github.com/minio/md5-simd v1.1.2 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
@ -113,14 +111,14 @@ require (
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||
github.com/zeebo/blake3 v0.2.3 // indirect
|
||||
github.com/zeebo/blake3 v0.2.4 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/net v0.27.0 // indirect
|
||||
golang.org/x/sync v0.7.0 // indirect
|
||||
golang.org/x/sys v0.22.0 // indirect
|
||||
golang.org/x/text v0.16.0 // indirect
|
||||
golang.org/x/time v0.5.0 // indirect
|
||||
golang.org/x/tools v0.23.0 // indirect
|
||||
golang.org/x/net v0.28.0 // indirect
|
||||
golang.org/x/sync v0.8.0 // indirect
|
||||
golang.org/x/sys v0.24.0 // indirect
|
||||
golang.org/x/text v0.17.0 // indirect
|
||||
golang.org/x/time v0.6.0 // indirect
|
||||
golang.org/x/tools v0.24.0 // indirect
|
||||
google.golang.org/protobuf v1.34.2 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
|
||||
67
go.sum
67
go.sum
@ -7,8 +7,8 @@ github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0
|
||||
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
|
||||
github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE=
|
||||
github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk=
|
||||
github.com/adhocore/gronx v1.8.1 h1:F2mLTG5sB11z7vplwD4iydz3YCEjstSfYmCrdSm3t6A=
|
||||
github.com/adhocore/gronx v1.8.1/go.mod h1:7oUY1WAU8rEJWmAxXR2DN0JaO4gi9khSgKjiRypqteg=
|
||||
github.com/adhocore/gronx v1.19.0 h1:GrEvNMPDwXND+YFadCyFVQPC+/xxoGJaQzu+duNf6aU=
|
||||
github.com/adhocore/gronx v1.19.0/go.mod h1:7oUY1WAU8rEJWmAxXR2DN0JaO4gi9khSgKjiRypqteg=
|
||||
github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8=
|
||||
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
@ -46,8 +46,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
|
||||
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/datarhei/gosrt v0.6.0 h1:HrrXAw90V78ok4WMIhX6se1aTHPCn82Sg2hj+PhdmGc=
|
||||
github.com/datarhei/gosrt v0.6.0/go.mod h1:fsOWdLSHUHShHjgi/46h6wjtdQrtnSdAQFnlas8ONxs=
|
||||
github.com/datarhei/gosrt v0.7.0 h1:1/IY66HVVgqGA9zkmL5l6jUFuI8t/76WkuamSkJqHqs=
|
||||
github.com/datarhei/gosrt v0.7.0/go.mod h1:wTDoyog1z4au8Fd/QJBQAndzvccuxjqUL/qMm0EyJxE=
|
||||
github.com/datarhei/joy4 v0.0.0-20240603190808-b1407345907e h1:Qc/0D4xvXrazFkoi/4UGqO15yQ1JN5I8h7RwdzCLgTY=
|
||||
github.com/datarhei/joy4 v0.0.0-20240603190808-b1407345907e/go.mod h1:Jcw/6jZDQQmPx8A7INEkXmuEF7E9jjBbSTfVSLwmiQw=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@ -63,8 +63,8 @@ github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
|
||||
github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
|
||||
github.com/fujiwara/shapeio v1.0.0 h1:xG5D9oNqCSUUbryZ/jQV3cqe1v2suEjwPIcEg1gKM8M=
|
||||
github.com/fujiwara/shapeio v1.0.0/go.mod h1:LmEmu6L/8jetyj1oewewFb7bZCNRwE7wLCUNzDLaLVA=
|
||||
github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I=
|
||||
github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s=
|
||||
github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4=
|
||||
github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4=
|
||||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
|
||||
@ -158,7 +158,6 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
|
||||
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
|
||||
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
|
||||
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
|
||||
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
@ -170,6 +169,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/labstack/echo/v4 v4.12.0 h1:IKpw49IMryVB2p1a4dzwlhP1O2Tf2E0Ir/450lH+kI0=
|
||||
github.com/labstack/echo/v4 v4.12.0/go.mod h1:UP9Cr2DJXbOK3Kr9ONYzNowSh7HP0aG0ShAyycHSJvM=
|
||||
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
|
||||
@ -198,14 +199,14 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mholt/acmez/v2 v2.0.1 h1:3/3N0u1pLjMK4sNEAFSI+bcvzbPhRpY383sy1kLHJ6k=
|
||||
github.com/mholt/acmez/v2 v2.0.1/go.mod h1:fX4c9r5jYwMyMsC+7tkYRxHibkOTgta5DIFGoe67e1U=
|
||||
github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs=
|
||||
github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ=
|
||||
github.com/mholt/acmez/v2 v2.0.2 h1:OmK6xckte2JfKGPz4OAA8aNHTiLvGp8tLzmrd/wfSyw=
|
||||
github.com/mholt/acmez/v2 v2.0.2/go.mod h1:fX4c9r5jYwMyMsC+7tkYRxHibkOTgta5DIFGoe67e1U=
|
||||
github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ=
|
||||
github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
|
||||
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
||||
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
||||
github.com/minio/minio-go/v7 v7.0.74 h1:fTo/XlPBTSpo3BAMshlwKL5RspXRv9us5UeHEGYCFe0=
|
||||
github.com/minio/minio-go/v7 v7.0.74/go.mod h1:qydcVzV8Hqtj1VtEocfxbmVFa2siu6HGa+LDEPogjD8=
|
||||
github.com/minio/minio-go/v7 v7.0.75 h1:0uLrB6u6teY2Jt+cJUVi9cTvDRuBKWSRzSAcznRkwlE=
|
||||
github.com/minio/minio-go/v7 v7.0.75/go.mod h1:qydcVzV8Hqtj1VtEocfxbmVFa2siu6HGa+LDEPogjD8=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
@ -233,8 +234,8 @@ github.com/prep/average v0.0.0-20200506183628-d26c465f48c3/go.mod h1:0ZE5gcyWKS1
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
|
||||
github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
|
||||
github.com/prometheus/client_golang v1.20.0 h1:jBzTZ7B099Rg24tny+qngoynol8LtVYlA2bqx3vEloI=
|
||||
github.com/prometheus/client_golang v1.20.0/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
@ -310,8 +311,8 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo
|
||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY=
|
||||
github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
|
||||
github.com/zeebo/blake3 v0.2.3 h1:TFoLXsjeXqRNFxSbk35Dk4YtszE/MQQGK10BH4ptoTg=
|
||||
github.com/zeebo/blake3 v0.2.3/go.mod h1:mjJjZpnsyIVtVgTOSpJ9vmRE4wgDeyt2HU3qXvvKCaQ=
|
||||
github.com/zeebo/blake3 v0.2.4 h1:KYQPkhpRtcqh0ssGYcKLG1JYvddkEA8QwCM/yBqhaZI=
|
||||
github.com/zeebo/blake3 v0.2.4/go.mod h1:7eeQ6d2iXWRGF6npfaxl2CU+xy2Fjo2gxeyZGCRUjcE=
|
||||
github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo=
|
||||
github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=
|
||||
go.etcd.io/bbolt v1.3.10 h1:+BqfJTcCzTItrop8mq/lbzL8wSGtj94UO/3U31shqG0=
|
||||
@ -326,19 +327,19 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30=
|
||||
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
|
||||
golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=
|
||||
golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
||||
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
||||
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
|
||||
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
|
||||
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
|
||||
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
||||
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@ -355,16 +356,16 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
|
||||
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
||||
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
|
||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
||||
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
||||
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
|
||||
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg=
|
||||
golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI=
|
||||
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
||||
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
|
||||
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
||||
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
||||
|
||||
2
vendor/github.com/adhocore/gronx/batch.go
generated
vendored
2
vendor/github.com/adhocore/gronx/batch.go
generated
vendored
@ -7,9 +7,9 @@ import (
|
||||
|
||||
// Expr represents an item in array for batch check
|
||||
type Expr struct {
|
||||
Err error
|
||||
Expr string
|
||||
Due bool
|
||||
Err error
|
||||
}
|
||||
|
||||
// BatchDue checks if multiple expressions are due for given time (or now).
|
||||
|
||||
49
vendor/github.com/datarhei/gosrt/README.md
generated
vendored
49
vendor/github.com/datarhei/gosrt/README.md
generated
vendored
@ -42,7 +42,7 @@ The parts that are implemented are based on what has been published in the SRT R
|
||||
|
||||
## Requirements
|
||||
|
||||
A Go version of 1.18+ is required.
|
||||
A Go version of 1.20+ is required.
|
||||
|
||||
## Installation
|
||||
|
||||
@ -89,39 +89,42 @@ if err != nil {
|
||||
}
|
||||
|
||||
for {
|
||||
conn, mode, err := ln.Accept(func(req ConnRequest) ConnType {
|
||||
// check connection request
|
||||
return srt.REJECT
|
||||
})
|
||||
req, err := ln.Accept2()
|
||||
if err != nil {
|
||||
// handle error
|
||||
}
|
||||
|
||||
if mode == srt.REJECT {
|
||||
// rejected connection, ignore
|
||||
continue
|
||||
}
|
||||
go func(req ConnRequest) {
|
||||
// check connection request by inspecting the connection request
|
||||
// and either rejecting it ...
|
||||
|
||||
if mode == srt.PUBLISH {
|
||||
go handlePublish(conn)
|
||||
} else { // srt.SUBSCRIBE
|
||||
go handleSubscribe(conn)
|
||||
}
|
||||
if somethingIsWrong {
|
||||
req.Reject(srt.REJ_PEER)
|
||||
return
|
||||
}
|
||||
|
||||
// ... or accepting it ...
|
||||
|
||||
conn, err := req.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// ... and decide whether it is a publishing or subscribing connection.
|
||||
|
||||
if publish {
|
||||
handlePublish(conn)
|
||||
} else {
|
||||
handleSubscribe(conn)
|
||||
}
|
||||
}(req)
|
||||
}
|
||||
```
|
||||
|
||||
In the `contrib/server` directory you'll find a complete example of a SRT server. For your convenience
|
||||
this modules provides the `Server` type which is a light framework for creating your own SRT server. The
|
||||
this module provides the `Server` type which is a light framework for creating your own SRT server. The
|
||||
example server is based on this type.
|
||||
|
||||
### PUBLISH / SUBSCRIBE
|
||||
|
||||
The `Accept` function from the `Listener` expects a function that handles the connection requests. It can
|
||||
return 3 different values: `srt.PUBLISH`, `srt.SUBSCRIBE`, and `srt.REJECT`. `srt.PUBLISH` means that the
|
||||
server expects the caller to send data, whereas `srt.SUBSCRIBE` means that the server will send data to
|
||||
the caller. This is opiniated towards a streaming server, however in your implementation of a listener
|
||||
you are free to handle connections requests to your liking.
|
||||
|
||||
## Contributed client
|
||||
|
||||
In the `contrib/client` directory you'll find an example implementation of a SRT client.
|
||||
|
||||
421
vendor/github.com/datarhei/gosrt/conn_request.go
generated
vendored
Normal file
421
vendor/github.com/datarhei/gosrt/conn_request.go
generated
vendored
Normal file
@ -0,0 +1,421 @@
|
||||
package srt
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/datarhei/gosrt/crypto"
|
||||
"github.com/datarhei/gosrt/packet"
|
||||
)
|
||||
|
||||
// ConnRequest is an incoming connection request
|
||||
type ConnRequest interface {
|
||||
// RemoteAddr returns the address of the peer. The returned net.Addr
|
||||
// is a copy and can be used at will.
|
||||
RemoteAddr() net.Addr
|
||||
|
||||
// Version returns the handshake version of the incoming request. Currently
|
||||
// known versions are 4 and 5. With version 4 the StreamId will always be
|
||||
// empty and IsEncrypted will always return false. An incoming version 4
|
||||
// connection will always be publishing.
|
||||
Version() uint32
|
||||
|
||||
// StreamId returns the streamid of the requesting connection. Use this
|
||||
// to decide what to do with the connection.
|
||||
StreamId() string
|
||||
|
||||
// IsEncrypted returns whether the connection is encrypted. If it is
|
||||
// encrypted, use SetPassphrase to set the passphrase for decrypting.
|
||||
IsEncrypted() bool
|
||||
|
||||
// SetPassphrase sets the passphrase in order to decrypt the incoming
|
||||
// data. Returns an error if the passphrase did not work or the connection
|
||||
// is not encrypted.
|
||||
SetPassphrase(p string) error
|
||||
|
||||
// SetRejectionReason sets the rejection reason for the connection. If
|
||||
// no set, REJ_PEER will be used.
|
||||
//
|
||||
// Deprecated: replaced by Reject().
|
||||
SetRejectionReason(r RejectionReason)
|
||||
|
||||
// Accept accepts the request and returns a connection.
|
||||
Accept() (Conn, error)
|
||||
|
||||
// Reject rejects the request.
|
||||
Reject(r RejectionReason)
|
||||
}
|
||||
|
||||
// connRequest implements the ConnRequest interface
|
||||
type connRequest struct {
|
||||
ln *listener
|
||||
addr net.Addr
|
||||
start time.Time
|
||||
socketId uint32
|
||||
timestamp uint32
|
||||
config Config
|
||||
handshake *packet.CIFHandshake
|
||||
crypto crypto.Crypto
|
||||
passphrase string
|
||||
rejectionReason RejectionReason
|
||||
}
|
||||
|
||||
func newConnRequest(ln *listener, p packet.Packet) *connRequest {
|
||||
cif := &packet.CIFHandshake{}
|
||||
|
||||
err := p.UnmarshalCIF(cif)
|
||||
|
||||
ln.log("handshake:recv:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:recv:cif", func() string { return cif.String() })
|
||||
|
||||
if err != nil {
|
||||
ln.log("handshake:recv:error", func() string { return err.Error() })
|
||||
return nil
|
||||
}
|
||||
|
||||
// Assemble the response (4.3.1. Caller-Listener Handshake)
|
||||
|
||||
p.Header().ControlType = packet.CTRLTYPE_HANDSHAKE
|
||||
p.Header().SubType = 0
|
||||
p.Header().TypeSpecific = 0
|
||||
p.Header().Timestamp = uint32(time.Since(ln.start).Microseconds())
|
||||
p.Header().DestinationSocketId = cif.SRTSocketId
|
||||
|
||||
cif.PeerIP.FromNetAddr(ln.addr)
|
||||
|
||||
// Create a copy of the configuration for the connection
|
||||
config := ln.config
|
||||
|
||||
if cif.HandshakeType == packet.HSTYPE_INDUCTION {
|
||||
// cif
|
||||
cif.Version = 5
|
||||
cif.EncryptionField = 0 // Don't advertise any specific encryption method
|
||||
cif.ExtensionField = 0x4A17
|
||||
//cif.initialPacketSequenceNumber = newCircular(0, MAX_SEQUENCENUMBER)
|
||||
//cif.maxTransmissionUnitSize = 0
|
||||
//cif.maxFlowWindowSize = 0
|
||||
//cif.SRTSocketId = 0
|
||||
cif.SynCookie = ln.syncookie.Get(p.Header().Addr.String())
|
||||
|
||||
p.MarshalCIF(cif)
|
||||
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
|
||||
ln.send(p)
|
||||
} else if cif.HandshakeType == packet.HSTYPE_CONCLUSION {
|
||||
// Verify the SYN cookie
|
||||
if !ln.syncookie.Verify(cif.SynCookie, p.Header().Addr.String()) {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return "invalid SYN cookie" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Peer is advertising a too big MSS
|
||||
if cif.MaxTransmissionUnitSize > MAX_MSS_SIZE {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("MTU is too big (%d bytes)", cif.MaxTransmissionUnitSize) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// If the peer has a smaller MTU size, adjust to it
|
||||
if cif.MaxTransmissionUnitSize < config.MSS {
|
||||
config.MSS = cif.MaxTransmissionUnitSize
|
||||
config.PayloadSize = config.MSS - SRT_HEADER_SIZE - UDP_HEADER_SIZE
|
||||
|
||||
if config.PayloadSize < MIN_PAYLOAD_SIZE {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("payload size is too small (%d bytes)", config.PayloadSize) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
}
|
||||
}
|
||||
|
||||
// We only support HSv4 and HSv5
|
||||
if cif.Version == 4 {
|
||||
// Check if the type (encryption field + extension field) has the value 2
|
||||
if cif.EncryptionField != 0 || cif.ExtensionField != 2 {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return "invalid type, expecting a value of 2 (UDT_DGRAM)" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
} else if cif.Version == 5 {
|
||||
if cif.SRTHS == nil {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return "missing handshake extension" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check if the peer version is sufficient
|
||||
if cif.SRTHS.SRTVersion < config.MinVersion {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_VERSION)
|
||||
ln.log("handshake:recv:error", func() string {
|
||||
return fmt.Sprintf("peer version insufficient (%#06x), expecting at least %#06x", cif.SRTHS.SRTVersion, config.MinVersion)
|
||||
})
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check the required SRT flags
|
||||
if !cif.SRTHS.SRTFlags.TSBPDSND || !cif.SRTHS.SRTFlags.TSBPDRCV || !cif.SRTHS.SRTFlags.TLPKTDROP || !cif.SRTHS.SRTFlags.PERIODICNAK || !cif.SRTHS.SRTFlags.REXMITFLG {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return "not all required flags are set" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// We only support live streaming
|
||||
if cif.SRTHS.SRTFlags.STREAM {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_MESSAGEAPI)
|
||||
ln.log("handshake:recv:error", func() string { return "only live streaming is supported" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
} else {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("only HSv4 and HSv5 are supported (got HSv%d)", cif.Version) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
req := &connRequest{
|
||||
ln: ln,
|
||||
addr: p.Header().Addr,
|
||||
start: time.Now(),
|
||||
socketId: cif.SRTSocketId,
|
||||
timestamp: p.Header().Timestamp,
|
||||
config: config,
|
||||
handshake: cif,
|
||||
}
|
||||
|
||||
if cif.SRTKM != nil {
|
||||
cr, err := crypto.New(int(cif.SRTKM.KLen))
|
||||
if err != nil {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("crypto: %s", err) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
req.crypto = cr
|
||||
}
|
||||
|
||||
ln.lock.Lock()
|
||||
_, exists := ln.connReqs[cif.SRTSocketId]
|
||||
if !exists {
|
||||
ln.connReqs[cif.SRTSocketId] = req
|
||||
}
|
||||
ln.lock.Unlock()
|
||||
|
||||
// we received a duplicate request: reject silently
|
||||
if exists {
|
||||
return nil
|
||||
}
|
||||
|
||||
return req
|
||||
} else {
|
||||
if cif.HandshakeType.IsRejection() {
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("connection rejected: %s", cif.HandshakeType.String()) })
|
||||
} else {
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("unsupported handshake: %s", cif.HandshakeType.String()) })
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (req *connRequest) RemoteAddr() net.Addr {
|
||||
addr, _ := net.ResolveUDPAddr("udp", req.addr.String())
|
||||
return addr
|
||||
}
|
||||
|
||||
func (req *connRequest) Version() uint32 {
|
||||
return req.handshake.Version
|
||||
}
|
||||
|
||||
func (req *connRequest) StreamId() string {
|
||||
return req.handshake.StreamId
|
||||
}
|
||||
|
||||
func (req *connRequest) IsEncrypted() bool {
|
||||
return req.crypto != nil
|
||||
}
|
||||
|
||||
func (req *connRequest) SetPassphrase(passphrase string) error {
|
||||
if req.handshake.Version == 5 {
|
||||
if req.crypto == nil {
|
||||
return fmt.Errorf("listen: request without encryption")
|
||||
}
|
||||
|
||||
if err := req.crypto.UnmarshalKM(req.handshake.SRTKM, passphrase); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
req.passphrase = passphrase
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (req *connRequest) SetRejectionReason(reason RejectionReason) {
|
||||
req.rejectionReason = reason
|
||||
}
|
||||
|
||||
func (req *connRequest) Reject(reason RejectionReason) {
|
||||
req.ln.lock.Lock()
|
||||
defer req.ln.lock.Unlock()
|
||||
|
||||
if _, hasReq := req.ln.connReqs[req.socketId]; !hasReq {
|
||||
return
|
||||
}
|
||||
|
||||
p := packet.NewPacket(req.addr)
|
||||
p.Header().IsControlPacket = true
|
||||
p.Header().ControlType = packet.CTRLTYPE_HANDSHAKE
|
||||
p.Header().SubType = 0
|
||||
p.Header().TypeSpecific = 0
|
||||
p.Header().Timestamp = uint32(time.Since(req.ln.start).Microseconds())
|
||||
p.Header().DestinationSocketId = req.socketId
|
||||
req.handshake.HandshakeType = packet.HandshakeType(reason)
|
||||
p.MarshalCIF(req.handshake)
|
||||
req.ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
req.ln.log("handshake:send:cif", func() string { return req.handshake.String() })
|
||||
req.ln.send(p)
|
||||
|
||||
delete(req.ln.connReqs, req.socketId)
|
||||
}
|
||||
|
||||
func (req *connRequest) Accept() (Conn, error) {
|
||||
if req.crypto != nil && len(req.passphrase) == 0 {
|
||||
req.Reject(REJ_BADSECRET)
|
||||
return nil, fmt.Errorf("passphrase is missing")
|
||||
}
|
||||
|
||||
req.ln.lock.Lock()
|
||||
defer req.ln.lock.Unlock()
|
||||
|
||||
if _, hasReq := req.ln.connReqs[req.socketId]; !hasReq {
|
||||
return nil, fmt.Errorf("connection already accepted")
|
||||
}
|
||||
|
||||
// Create a new socket ID
|
||||
socketId := uint32(time.Since(req.ln.start).Microseconds())
|
||||
|
||||
// Select the largest TSBPD delay advertised by the caller, but at least 120ms
|
||||
recvTsbpdDelay := uint16(req.config.ReceiverLatency.Milliseconds())
|
||||
sendTsbpdDelay := uint16(req.config.PeerLatency.Milliseconds())
|
||||
|
||||
if req.handshake.Version == 5 {
|
||||
if req.handshake.SRTHS.SendTSBPDDelay > recvTsbpdDelay {
|
||||
recvTsbpdDelay = req.handshake.SRTHS.SendTSBPDDelay
|
||||
}
|
||||
|
||||
if req.handshake.SRTHS.RecvTSBPDDelay > sendTsbpdDelay {
|
||||
sendTsbpdDelay = req.handshake.SRTHS.RecvTSBPDDelay
|
||||
}
|
||||
|
||||
req.config.StreamId = req.handshake.StreamId
|
||||
}
|
||||
|
||||
req.config.Passphrase = req.passphrase
|
||||
|
||||
// Create a new connection
|
||||
conn := newSRTConn(srtConnConfig{
|
||||
version: req.handshake.Version,
|
||||
localAddr: req.ln.addr,
|
||||
remoteAddr: req.addr,
|
||||
config: req.config,
|
||||
start: req.start,
|
||||
socketId: socketId,
|
||||
peerSocketId: req.handshake.SRTSocketId,
|
||||
tsbpdTimeBase: uint64(req.timestamp),
|
||||
tsbpdDelay: uint64(recvTsbpdDelay) * 1000,
|
||||
peerTsbpdDelay: uint64(sendTsbpdDelay) * 1000,
|
||||
initialPacketSequenceNumber: req.handshake.InitialPacketSequenceNumber,
|
||||
crypto: req.crypto,
|
||||
keyBaseEncryption: packet.EvenKeyEncrypted,
|
||||
onSend: req.ln.send,
|
||||
onShutdown: req.ln.handleShutdown,
|
||||
logger: req.config.Logger,
|
||||
})
|
||||
|
||||
req.ln.log("connection:new", func() string { return fmt.Sprintf("%#08x (%s)", conn.SocketId(), conn.StreamId()) })
|
||||
|
||||
req.handshake.SRTSocketId = socketId
|
||||
req.handshake.SynCookie = 0
|
||||
|
||||
if req.handshake.Version == 5 {
|
||||
// 3.2.1.1.1. Handshake Extension Message Flags
|
||||
req.handshake.SRTHS.SRTVersion = SRT_VERSION
|
||||
req.handshake.SRTHS.SRTFlags.TSBPDSND = true
|
||||
req.handshake.SRTHS.SRTFlags.TSBPDRCV = true
|
||||
req.handshake.SRTHS.SRTFlags.CRYPT = true
|
||||
req.handshake.SRTHS.SRTFlags.TLPKTDROP = true
|
||||
req.handshake.SRTHS.SRTFlags.PERIODICNAK = true
|
||||
req.handshake.SRTHS.SRTFlags.REXMITFLG = true
|
||||
req.handshake.SRTHS.SRTFlags.STREAM = false
|
||||
req.handshake.SRTHS.SRTFlags.PACKET_FILTER = false
|
||||
req.handshake.SRTHS.RecvTSBPDDelay = recvTsbpdDelay
|
||||
req.handshake.SRTHS.SendTSBPDDelay = sendTsbpdDelay
|
||||
}
|
||||
|
||||
p := packet.NewPacket(req.addr)
|
||||
p.Header().IsControlPacket = true
|
||||
p.Header().ControlType = packet.CTRLTYPE_HANDSHAKE
|
||||
p.Header().SubType = 0
|
||||
p.Header().TypeSpecific = 0
|
||||
p.Header().Timestamp = uint32(time.Since(req.start).Microseconds())
|
||||
p.Header().DestinationSocketId = req.socketId
|
||||
p.MarshalCIF(req.handshake)
|
||||
req.ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
req.ln.log("handshake:send:cif", func() string { return req.handshake.String() })
|
||||
req.ln.send(p)
|
||||
|
||||
req.ln.conns[socketId] = conn
|
||||
delete(req.ln.connReqs, req.socketId)
|
||||
|
||||
return conn, nil
|
||||
}
|
||||
8
vendor/github.com/datarhei/gosrt/dial.go
generated
vendored
8
vendor/github.com/datarhei/gosrt/dial.go
generated
vendored
@ -425,6 +425,14 @@ func (dl *dialer) handleHandshake(p packet.Packet) {
|
||||
sendTsbpdDelay := uint16(dl.config.PeerLatency.Milliseconds())
|
||||
|
||||
if cif.Version == 5 {
|
||||
if cif.SRTHS == nil {
|
||||
dl.connChan <- connResponse{
|
||||
conn: nil,
|
||||
err: fmt.Errorf("missing handshake extension"),
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Check if the peer version is sufficient
|
||||
if cif.SRTHS.SRTVersion < dl.config.MinVersion {
|
||||
dl.sendShutdown(cif.SRTSocketId)
|
||||
|
||||
462
vendor/github.com/datarhei/gosrt/listen.go
generated
vendored
462
vendor/github.com/datarhei/gosrt/listen.go
generated
vendored
@ -10,7 +10,6 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/datarhei/gosrt/crypto"
|
||||
srtnet "github.com/datarhei/gosrt/net"
|
||||
"github.com/datarhei/gosrt/packet"
|
||||
)
|
||||
@ -85,87 +84,6 @@ const (
|
||||
REJX_NOROOM RejectionReason = 1507 // The data stream cannot be archived due to lacking storage space. This is in case when the request type was to send a file or the live stream to be archived.
|
||||
)
|
||||
|
||||
// ConnRequest is an incoming connection request
|
||||
type ConnRequest interface {
|
||||
// RemoteAddr returns the address of the peer. The returned net.Addr
|
||||
// is a copy and can be used at will.
|
||||
RemoteAddr() net.Addr
|
||||
|
||||
// Version returns the handshake version of the incoming request. Currently
|
||||
// known versions are 4 and 5. With version 4 the StreamId will always be
|
||||
// empty and IsEncrypted will always return false. An incoming version 4
|
||||
// connection will always be publishing.
|
||||
Version() uint32
|
||||
|
||||
// StreamId returns the streamid of the requesting connection. Use this
|
||||
// to decide what to do with the connection.
|
||||
StreamId() string
|
||||
|
||||
// IsEncrypted returns whether the connection is encrypted. If it is
|
||||
// encrypted, use SetPassphrase to set the passphrase for decrypting.
|
||||
IsEncrypted() bool
|
||||
|
||||
// SetPassphrase sets the passphrase in order to decrypt the incoming
|
||||
// data. Returns an error if the passphrase did not work or the connection
|
||||
// is not encrypted.
|
||||
SetPassphrase(p string) error
|
||||
|
||||
// SetRejectionReason sets the rejection reason for the connection. If
|
||||
// no set, REJ_PEER will be used.
|
||||
SetRejectionReason(r RejectionReason)
|
||||
}
|
||||
|
||||
// connRequest implements the ConnRequest interface
|
||||
type connRequest struct {
|
||||
addr net.Addr
|
||||
start time.Time
|
||||
socketId uint32
|
||||
timestamp uint32
|
||||
|
||||
config Config
|
||||
handshake *packet.CIFHandshake
|
||||
crypto crypto.Crypto
|
||||
passphrase string
|
||||
rejectionReason RejectionReason
|
||||
}
|
||||
|
||||
func (req *connRequest) RemoteAddr() net.Addr {
|
||||
addr, _ := net.ResolveUDPAddr("udp", req.addr.String())
|
||||
return addr
|
||||
}
|
||||
|
||||
func (req *connRequest) Version() uint32 {
|
||||
return req.handshake.Version
|
||||
}
|
||||
|
||||
func (req *connRequest) StreamId() string {
|
||||
return req.handshake.StreamId
|
||||
}
|
||||
|
||||
func (req *connRequest) IsEncrypted() bool {
|
||||
return req.crypto != nil
|
||||
}
|
||||
|
||||
func (req *connRequest) SetPassphrase(passphrase string) error {
|
||||
if req.handshake.Version == 5 {
|
||||
if req.crypto == nil {
|
||||
return fmt.Errorf("listen: request without encryption")
|
||||
}
|
||||
|
||||
if err := req.crypto.UnmarshalKM(req.handshake.SRTKM, passphrase); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
req.passphrase = passphrase
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (req *connRequest) SetRejectionReason(reason RejectionReason) {
|
||||
req.rejectionReason = reason
|
||||
}
|
||||
|
||||
// ErrListenerClosed is returned when the listener is about to shutdown.
|
||||
var ErrListenerClosed = errors.New("srt: listener closed")
|
||||
|
||||
@ -175,11 +93,17 @@ type AcceptFunc func(req ConnRequest) ConnType
|
||||
|
||||
// Listener waits for new connections
|
||||
type Listener interface {
|
||||
// Accept2 waits for new connections.
|
||||
// On closing the err will be ErrListenerClosed.
|
||||
Accept2() (ConnRequest, error)
|
||||
|
||||
// Accept waits for new connections. For each new connection the AcceptFunc
|
||||
// gets called. Conn is a new connection if AcceptFunc is PUBLISH or SUBSCRIBE.
|
||||
// If AcceptFunc returns REJECT, Conn is nil. In case of failure error is not
|
||||
// nil, Conn is nil and ConnType is REJECT. On closing the listener err will
|
||||
// be ErrListenerClosed and ConnType is REJECT.
|
||||
//
|
||||
// Deprecated: replaced by Accept2().
|
||||
Accept(AcceptFunc) (Conn, ConnType, error)
|
||||
|
||||
// Close closes the listener. It will stop accepting new connections and
|
||||
@ -197,9 +121,10 @@ type listener struct {
|
||||
|
||||
config Config
|
||||
|
||||
backlog chan connRequest
|
||||
conns map[uint32]*srtConn
|
||||
lock sync.RWMutex
|
||||
backlog chan packet.Packet
|
||||
connReqs map[uint32]*connRequest
|
||||
conns map[uint32]*srtConn
|
||||
lock sync.RWMutex
|
||||
|
||||
start time.Time
|
||||
|
||||
@ -265,9 +190,10 @@ func Listen(network, address string, config Config) (Listener, error) {
|
||||
return nil, fmt.Errorf("listen: no local address")
|
||||
}
|
||||
|
||||
ln.connReqs = make(map[uint32]*connRequest)
|
||||
ln.conns = make(map[uint32]*srtConn)
|
||||
|
||||
ln.backlog = make(chan connRequest, 128)
|
||||
ln.backlog = make(chan packet.Packet, 128)
|
||||
|
||||
ln.rcvQueue = make(chan packet.Packet, 2048)
|
||||
|
||||
@ -328,108 +254,57 @@ func Listen(network, address string, config Config) (Listener, error) {
|
||||
return ln, nil
|
||||
}
|
||||
|
||||
func (ln *listener) Accept(acceptFn AcceptFunc) (Conn, ConnType, error) {
|
||||
func (ln *listener) Accept2() (ConnRequest, error) {
|
||||
if ln.isShutdown() {
|
||||
return nil, REJECT, ErrListenerClosed
|
||||
return nil, ErrListenerClosed
|
||||
}
|
||||
|
||||
select {
|
||||
case <-ln.doneChan:
|
||||
return nil, REJECT, ln.error()
|
||||
case request := <-ln.backlog:
|
||||
if acceptFn == nil {
|
||||
ln.reject(request, REJ_PEER)
|
||||
break
|
||||
for {
|
||||
select {
|
||||
case <-ln.doneChan:
|
||||
return nil, ln.error()
|
||||
|
||||
case p := <-ln.backlog:
|
||||
req := newConnRequest(ln, p)
|
||||
if req == nil {
|
||||
break
|
||||
}
|
||||
|
||||
return req, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (ln *listener) Accept(acceptFn AcceptFunc) (Conn, ConnType, error) {
|
||||
for {
|
||||
req, err := ln.Accept2()
|
||||
if err != nil {
|
||||
return nil, REJECT, err
|
||||
}
|
||||
|
||||
mode := acceptFn(&request)
|
||||
if acceptFn == nil {
|
||||
req.Reject(REJ_PEER)
|
||||
continue
|
||||
}
|
||||
|
||||
mode := acceptFn(req)
|
||||
if mode != PUBLISH && mode != SUBSCRIBE {
|
||||
// Figure out the reason
|
||||
reason := REJ_PEER
|
||||
if request.rejectionReason > 0 {
|
||||
reason = request.rejectionReason
|
||||
if req.(*connRequest).rejectionReason > 0 {
|
||||
reason = req.(*connRequest).rejectionReason
|
||||
}
|
||||
ln.reject(request, reason)
|
||||
break
|
||||
req.Reject(reason)
|
||||
continue
|
||||
}
|
||||
|
||||
if request.crypto != nil && len(request.passphrase) == 0 {
|
||||
ln.reject(request, REJ_BADSECRET)
|
||||
break
|
||||
conn, err := req.Accept()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// Create a new socket ID
|
||||
socketId := uint32(time.Since(ln.start).Microseconds())
|
||||
|
||||
// Select the largest TSBPD delay advertised by the caller, but at least 120ms
|
||||
recvTsbpdDelay := uint16(request.config.ReceiverLatency.Milliseconds())
|
||||
sendTsbpdDelay := uint16(request.config.PeerLatency.Milliseconds())
|
||||
|
||||
if request.handshake.Version == 5 {
|
||||
if request.handshake.SRTHS.SendTSBPDDelay > recvTsbpdDelay {
|
||||
recvTsbpdDelay = request.handshake.SRTHS.SendTSBPDDelay
|
||||
}
|
||||
|
||||
if request.handshake.SRTHS.RecvTSBPDDelay > sendTsbpdDelay {
|
||||
sendTsbpdDelay = request.handshake.SRTHS.RecvTSBPDDelay
|
||||
}
|
||||
|
||||
request.config.StreamId = request.handshake.StreamId
|
||||
}
|
||||
|
||||
request.config.Passphrase = request.passphrase
|
||||
|
||||
// Create a new connection
|
||||
conn := newSRTConn(srtConnConfig{
|
||||
version: request.handshake.Version,
|
||||
localAddr: ln.addr,
|
||||
remoteAddr: request.addr,
|
||||
config: request.config,
|
||||
start: request.start,
|
||||
socketId: socketId,
|
||||
peerSocketId: request.handshake.SRTSocketId,
|
||||
tsbpdTimeBase: uint64(request.timestamp),
|
||||
tsbpdDelay: uint64(recvTsbpdDelay) * 1000,
|
||||
peerTsbpdDelay: uint64(sendTsbpdDelay) * 1000,
|
||||
initialPacketSequenceNumber: request.handshake.InitialPacketSequenceNumber,
|
||||
crypto: request.crypto,
|
||||
keyBaseEncryption: packet.EvenKeyEncrypted,
|
||||
onSend: ln.send,
|
||||
onShutdown: ln.handleShutdown,
|
||||
logger: request.config.Logger,
|
||||
})
|
||||
|
||||
ln.log("connection:new", func() string { return fmt.Sprintf("%#08x (%s) %s", conn.SocketId(), conn.StreamId(), mode) })
|
||||
|
||||
request.handshake.SRTSocketId = socketId
|
||||
request.handshake.SynCookie = 0
|
||||
|
||||
if request.handshake.Version == 5 {
|
||||
// 3.2.1.1.1. Handshake Extension Message Flags
|
||||
request.handshake.SRTHS.SRTVersion = SRT_VERSION
|
||||
request.handshake.SRTHS.SRTFlags.TSBPDSND = true
|
||||
request.handshake.SRTHS.SRTFlags.TSBPDRCV = true
|
||||
request.handshake.SRTHS.SRTFlags.CRYPT = true
|
||||
request.handshake.SRTHS.SRTFlags.TLPKTDROP = true
|
||||
request.handshake.SRTHS.SRTFlags.PERIODICNAK = true
|
||||
request.handshake.SRTHS.SRTFlags.REXMITFLG = true
|
||||
request.handshake.SRTHS.SRTFlags.STREAM = false
|
||||
request.handshake.SRTHS.SRTFlags.PACKET_FILTER = false
|
||||
request.handshake.SRTHS.RecvTSBPDDelay = recvTsbpdDelay
|
||||
request.handshake.SRTHS.SendTSBPDDelay = sendTsbpdDelay
|
||||
}
|
||||
|
||||
ln.accept(request)
|
||||
|
||||
// Add the connection to the list of known connections
|
||||
ln.lock.Lock()
|
||||
ln.conns[socketId] = conn
|
||||
ln.lock.Unlock()
|
||||
|
||||
return conn, mode, nil
|
||||
}
|
||||
|
||||
return nil, REJECT, nil
|
||||
}
|
||||
|
||||
// markDone marks the listener as done by closing
|
||||
@ -457,47 +332,6 @@ func (ln *listener) handleShutdown(socketId uint32) {
|
||||
ln.lock.Unlock()
|
||||
}
|
||||
|
||||
func (ln *listener) reject(request connRequest, reason RejectionReason) {
|
||||
p := packet.NewPacket(request.addr)
|
||||
p.Header().IsControlPacket = true
|
||||
|
||||
p.Header().ControlType = packet.CTRLTYPE_HANDSHAKE
|
||||
p.Header().SubType = 0
|
||||
p.Header().TypeSpecific = 0
|
||||
|
||||
p.Header().Timestamp = uint32(time.Since(ln.start).Microseconds())
|
||||
p.Header().DestinationSocketId = request.socketId
|
||||
|
||||
request.handshake.HandshakeType = packet.HandshakeType(reason)
|
||||
|
||||
p.MarshalCIF(request.handshake)
|
||||
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return request.handshake.String() })
|
||||
|
||||
ln.send(p)
|
||||
}
|
||||
|
||||
func (ln *listener) accept(request connRequest) {
|
||||
p := packet.NewPacket(request.addr)
|
||||
|
||||
p.Header().IsControlPacket = true
|
||||
|
||||
p.Header().ControlType = packet.CTRLTYPE_HANDSHAKE
|
||||
p.Header().SubType = 0
|
||||
p.Header().TypeSpecific = 0
|
||||
|
||||
p.Header().Timestamp = uint32(time.Since(request.start).Microseconds())
|
||||
p.Header().DestinationSocketId = request.socketId
|
||||
|
||||
p.MarshalCIF(request.handshake)
|
||||
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return request.handshake.String() })
|
||||
|
||||
ln.send(p)
|
||||
}
|
||||
|
||||
func (ln *listener) isShutdown() bool {
|
||||
ln.shutdownLock.RLock()
|
||||
defer ln.shutdownLock.RUnlock()
|
||||
@ -555,9 +389,12 @@ func (ln *listener) reader(ctx context.Context) {
|
||||
|
||||
if p.Header().DestinationSocketId == 0 {
|
||||
if p.Header().IsControlPacket && p.Header().ControlType == packet.CTRLTYPE_HANDSHAKE {
|
||||
ln.handleHandshake(p)
|
||||
select {
|
||||
case ln.backlog <- p:
|
||||
default:
|
||||
ln.log("handshake:recv:error", func() string { return "backlog is full" })
|
||||
}
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
@ -601,199 +438,6 @@ func (ln *listener) send(p packet.Packet) {
|
||||
}
|
||||
}
|
||||
|
||||
func (ln *listener) handleHandshake(p packet.Packet) {
|
||||
cif := &packet.CIFHandshake{}
|
||||
|
||||
err := p.UnmarshalCIF(cif)
|
||||
|
||||
ln.log("handshake:recv:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:recv:cif", func() string { return cif.String() })
|
||||
|
||||
if err != nil {
|
||||
ln.log("handshake:recv:error", func() string { return err.Error() })
|
||||
return
|
||||
}
|
||||
|
||||
// Assemble the response (4.3.1. Caller-Listener Handshake)
|
||||
|
||||
p.Header().ControlType = packet.CTRLTYPE_HANDSHAKE
|
||||
p.Header().SubType = 0
|
||||
p.Header().TypeSpecific = 0
|
||||
p.Header().Timestamp = uint32(time.Since(ln.start).Microseconds())
|
||||
p.Header().DestinationSocketId = cif.SRTSocketId
|
||||
|
||||
cif.PeerIP.FromNetAddr(ln.addr)
|
||||
|
||||
// Create a copy of the configuration for the connection
|
||||
config := ln.config
|
||||
|
||||
if cif.HandshakeType == packet.HSTYPE_INDUCTION {
|
||||
// cif
|
||||
cif.Version = 5
|
||||
cif.EncryptionField = 0 // Don't advertise any specific encryption method
|
||||
cif.ExtensionField = 0x4A17
|
||||
//cif.initialPacketSequenceNumber = newCircular(0, MAX_SEQUENCENUMBER)
|
||||
//cif.maxTransmissionUnitSize = 0
|
||||
//cif.maxFlowWindowSize = 0
|
||||
//cif.SRTSocketId = 0
|
||||
cif.SynCookie = ln.syncookie.Get(p.Header().Addr.String())
|
||||
|
||||
p.MarshalCIF(cif)
|
||||
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
|
||||
ln.send(p)
|
||||
} else if cif.HandshakeType == packet.HSTYPE_CONCLUSION {
|
||||
// Verify the SYN cookie
|
||||
if !ln.syncookie.Verify(cif.SynCookie, p.Header().Addr.String()) {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return "invalid SYN cookie" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Peer is advertising a too big MSS
|
||||
if cif.MaxTransmissionUnitSize > MAX_MSS_SIZE {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("MTU is too big (%d bytes)", cif.MaxTransmissionUnitSize) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// If the peer has a smaller MTU size, adjust to it
|
||||
if cif.MaxTransmissionUnitSize < config.MSS {
|
||||
config.MSS = cif.MaxTransmissionUnitSize
|
||||
config.PayloadSize = config.MSS - SRT_HEADER_SIZE - UDP_HEADER_SIZE
|
||||
|
||||
if config.PayloadSize < MIN_PAYLOAD_SIZE {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("payload size is too small (%d bytes)", config.PayloadSize) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
}
|
||||
}
|
||||
|
||||
// We only support HSv4 and HSv5
|
||||
if cif.Version == 4 {
|
||||
// Check if the type (encryption field + extension field) has the value 2
|
||||
if cif.EncryptionField != 0 || cif.ExtensionField != 2 {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return "invalid type, expecting a value of 2 (UDT_DGRAM)" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
} else if cif.Version == 5 {
|
||||
// Check if the peer version is sufficient
|
||||
if cif.SRTHS.SRTVersion < config.MinVersion {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_VERSION)
|
||||
ln.log("handshake:recv:error", func() string {
|
||||
return fmt.Sprintf("peer version insufficient (%#06x), expecting at least %#06x", cif.SRTHS.SRTVersion, config.MinVersion)
|
||||
})
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Check the required SRT flags
|
||||
if !cif.SRTHS.SRTFlags.TSBPDSND || !cif.SRTHS.SRTFlags.TSBPDRCV || !cif.SRTHS.SRTFlags.TLPKTDROP || !cif.SRTHS.SRTFlags.PERIODICNAK || !cif.SRTHS.SRTFlags.REXMITFLG {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return "not all required flags are set" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// We only support live streaming
|
||||
if cif.SRTHS.SRTFlags.STREAM {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_MESSAGEAPI)
|
||||
ln.log("handshake:recv:error", func() string { return "only live streaming is supported" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
} else {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("only HSv4 and HSv5 are supported (got HSv%d)", cif.Version) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Fill up a connection request with all relevant data and put it into the backlog
|
||||
|
||||
c := connRequest{
|
||||
addr: p.Header().Addr,
|
||||
start: time.Now(),
|
||||
socketId: cif.SRTSocketId,
|
||||
timestamp: p.Header().Timestamp,
|
||||
config: config,
|
||||
|
||||
handshake: cif,
|
||||
}
|
||||
|
||||
if cif.SRTKM != nil {
|
||||
cr, err := crypto.New(int(cif.SRTKM.KLen))
|
||||
if err != nil {
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_ROGUE)
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("crypto: %s", err) })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
c.crypto = cr
|
||||
}
|
||||
|
||||
// If the backlog is full, reject the connection
|
||||
select {
|
||||
case ln.backlog <- c:
|
||||
default:
|
||||
cif.HandshakeType = packet.HandshakeType(REJ_BACKLOG)
|
||||
ln.log("handshake:recv:error", func() string { return "backlog is full" })
|
||||
p.MarshalCIF(cif)
|
||||
ln.log("handshake:send:dump", func() string { return p.Dump() })
|
||||
ln.log("handshake:send:cif", func() string { return cif.String() })
|
||||
ln.send(p)
|
||||
}
|
||||
} else {
|
||||
if cif.HandshakeType.IsRejection() {
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("connection rejected: %s", cif.HandshakeType.String()) })
|
||||
} else {
|
||||
ln.log("handshake:recv:error", func() string { return fmt.Sprintf("unsupported handshake: %s", cif.HandshakeType.String()) })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (ln *listener) log(topic string, message func() string) {
|
||||
if ln.config.Logger == nil {
|
||||
return
|
||||
|
||||
30
vendor/github.com/datarhei/gosrt/server.go
generated
vendored
30
vendor/github.com/datarhei/gosrt/server.go
generated
vendored
@ -75,7 +75,7 @@ func (s *Server) Listen() error {
|
||||
func (s *Server) Serve() error {
|
||||
for {
|
||||
// Wait for connections.
|
||||
conn, mode, err := s.ln.Accept(s.HandleConnect)
|
||||
req, err := s.ln.Accept2()
|
||||
if err != nil {
|
||||
if err == ErrListenerClosed {
|
||||
return ErrServerClosed
|
||||
@ -84,16 +84,30 @@ func (s *Server) Serve() error {
|
||||
return err
|
||||
}
|
||||
|
||||
if conn == nil {
|
||||
// rejected connection, ignore
|
||||
if s.HandleConnect == nil {
|
||||
req.Reject(REJ_PEER)
|
||||
continue
|
||||
}
|
||||
|
||||
if mode == PUBLISH {
|
||||
go s.HandlePublish(conn)
|
||||
} else {
|
||||
go s.HandleSubscribe(conn)
|
||||
}
|
||||
go func(req ConnRequest) {
|
||||
mode := s.HandleConnect(req)
|
||||
if mode == REJECT {
|
||||
req.Reject(REJ_PEER)
|
||||
return
|
||||
}
|
||||
|
||||
conn, err := req.Accept()
|
||||
if err != nil {
|
||||
// rejected connection, ignore
|
||||
return
|
||||
}
|
||||
|
||||
if mode == PUBLISH {
|
||||
s.HandlePublish(conn)
|
||||
} else {
|
||||
s.HandleSubscribe(conn)
|
||||
}
|
||||
}(req)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
2
vendor/github.com/gabriel-vasile/mimetype/README.md
generated
vendored
2
vendor/github.com/gabriel-vasile/mimetype/README.md
generated
vendored
@ -81,7 +81,7 @@ To prevent loading entire files into memory, when detecting from a
|
||||
or from a [file](https://pkg.go.dev/github.com/gabriel-vasile/mimetype#DetectFile)
|
||||
**mimetype** limits itself to reading only the header of the input.
|
||||
<div align="center">
|
||||
<img alt="structure" src="https://github.com/gabriel-vasile/mimetype/blob/420a05228c6a6efbb6e6f080168a25663414ff36/mimetype.gif?raw=true" width="88%">
|
||||
<img alt="how project is structured" src="https://raw.githubusercontent.com/gabriel-vasile/mimetype/master/testdata/gif.gif" width="88%">
|
||||
</div>
|
||||
|
||||
## Performance
|
||||
|
||||
27
vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go
generated
vendored
27
vendor/github.com/gabriel-vasile/mimetype/internal/json/json.go
generated
vendored
@ -34,6 +34,7 @@ package json
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type (
|
||||
@ -73,10 +74,31 @@ type (
|
||||
}
|
||||
)
|
||||
|
||||
var scannerPool = sync.Pool{
|
||||
New: func() any {
|
||||
return &scanner{}
|
||||
},
|
||||
}
|
||||
|
||||
func newScanner() *scanner {
|
||||
s := scannerPool.Get().(*scanner)
|
||||
s.reset()
|
||||
return s
|
||||
}
|
||||
|
||||
func freeScanner(s *scanner) {
|
||||
// Avoid hanging on to too much memory in extreme cases.
|
||||
if len(s.parseState) > 1024 {
|
||||
s.parseState = nil
|
||||
}
|
||||
scannerPool.Put(s)
|
||||
}
|
||||
|
||||
// Scan returns the number of bytes scanned and if there was any error
|
||||
// in trying to reach the end of data.
|
||||
func Scan(data []byte) (int, error) {
|
||||
s := &scanner{}
|
||||
s := newScanner()
|
||||
defer freeScanner(s)
|
||||
_ = checkValid(data, s)
|
||||
return s.index, s.err
|
||||
}
|
||||
@ -84,7 +106,6 @@ func Scan(data []byte) (int, error) {
|
||||
// checkValid verifies that data is valid JSON-encoded data.
|
||||
// scan is passed in for use by checkValid to avoid an allocation.
|
||||
func checkValid(data []byte, scan *scanner) error {
|
||||
scan.reset()
|
||||
for _, c := range data {
|
||||
scan.index++
|
||||
if scan.step(scan, c) == scanError {
|
||||
@ -105,6 +126,8 @@ func (s *scanner) reset() {
|
||||
s.step = stateBeginValue
|
||||
s.parseState = s.parseState[0:0]
|
||||
s.err = nil
|
||||
s.endTop = false
|
||||
s.index = 0
|
||||
}
|
||||
|
||||
// eof tells the scanner that the end of input has been reached.
|
||||
|
||||
31
vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go
generated
vendored
31
vendor/github.com/gabriel-vasile/mimetype/internal/magic/archive.go
generated
vendored
@ -3,7 +3,6 @@ package magic
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -110,8 +109,8 @@ func Tar(raw []byte, _ uint32) bool {
|
||||
}
|
||||
|
||||
// Get the checksum recorded into the file.
|
||||
recsum, err := tarParseOctal(raw[148:156])
|
||||
if err != nil {
|
||||
recsum := tarParseOctal(raw[148:156])
|
||||
if recsum == -1 {
|
||||
return false
|
||||
}
|
||||
sum1, sum2 := tarChksum(raw)
|
||||
@ -119,28 +118,26 @@ func Tar(raw []byte, _ uint32) bool {
|
||||
}
|
||||
|
||||
// tarParseOctal converts octal string to decimal int.
|
||||
func tarParseOctal(b []byte) (int64, error) {
|
||||
func tarParseOctal(b []byte) int64 {
|
||||
// Because unused fields are filled with NULs, we need to skip leading NULs.
|
||||
// Fields may also be padded with spaces or NULs.
|
||||
// So we remove leading and trailing NULs and spaces to be sure.
|
||||
b = bytes.Trim(b, " \x00")
|
||||
|
||||
if len(b) == 0 {
|
||||
return 0, nil
|
||||
return -1
|
||||
}
|
||||
x, err := strconv.ParseUint(tarParseString(b), 8, 64)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
ret := int64(0)
|
||||
for _, b := range b {
|
||||
if b == 0 {
|
||||
break
|
||||
}
|
||||
if !(b >= '0' && b <= '7') {
|
||||
return -1
|
||||
}
|
||||
ret = (ret << 3) | int64(b-'0')
|
||||
}
|
||||
return int64(x), nil
|
||||
}
|
||||
|
||||
// tarParseString converts a NUL ended bytes slice to a string.
|
||||
func tarParseString(b []byte) string {
|
||||
if i := bytes.IndexByte(b, 0); i >= 0 {
|
||||
return string(b[:i])
|
||||
}
|
||||
return string(b)
|
||||
return ret
|
||||
}
|
||||
|
||||
// tarChksum computes the checksum for the header block b.
|
||||
|
||||
66
vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go
generated
vendored
66
vendor/github.com/gabriel-vasile/mimetype/internal/magic/ms_office.go
generated
vendored
@ -6,41 +6,41 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
xlsxSigFiles = []string{
|
||||
"xl/worksheets/",
|
||||
"xl/drawings/",
|
||||
"xl/theme/",
|
||||
"xl/_rels/",
|
||||
"xl/styles.xml",
|
||||
"xl/workbook.xml",
|
||||
"xl/sharedStrings.xml",
|
||||
xlsxSigFiles = [][]byte{
|
||||
[]byte("xl/worksheets/"),
|
||||
[]byte("xl/drawings/"),
|
||||
[]byte("xl/theme/"),
|
||||
[]byte("xl/_rels/"),
|
||||
[]byte("xl/styles.xml"),
|
||||
[]byte("xl/workbook.xml"),
|
||||
[]byte("xl/sharedStrings.xml"),
|
||||
}
|
||||
docxSigFiles = []string{
|
||||
"word/media/",
|
||||
"word/_rels/document.xml.rels",
|
||||
"word/document.xml",
|
||||
"word/styles.xml",
|
||||
"word/fontTable.xml",
|
||||
"word/settings.xml",
|
||||
"word/numbering.xml",
|
||||
"word/header",
|
||||
"word/footer",
|
||||
docxSigFiles = [][]byte{
|
||||
[]byte("word/media/"),
|
||||
[]byte("word/_rels/document.xml.rels"),
|
||||
[]byte("word/document.xml"),
|
||||
[]byte("word/styles.xml"),
|
||||
[]byte("word/fontTable.xml"),
|
||||
[]byte("word/settings.xml"),
|
||||
[]byte("word/numbering.xml"),
|
||||
[]byte("word/header"),
|
||||
[]byte("word/footer"),
|
||||
}
|
||||
pptxSigFiles = []string{
|
||||
"ppt/slides/",
|
||||
"ppt/media/",
|
||||
"ppt/slideLayouts/",
|
||||
"ppt/theme/",
|
||||
"ppt/slideMasters/",
|
||||
"ppt/tags/",
|
||||
"ppt/notesMasters/",
|
||||
"ppt/_rels/",
|
||||
"ppt/handoutMasters/",
|
||||
"ppt/notesSlides/",
|
||||
"ppt/presentation.xml",
|
||||
"ppt/tableStyles.xml",
|
||||
"ppt/presProps.xml",
|
||||
"ppt/viewProps.xml",
|
||||
pptxSigFiles = [][]byte{
|
||||
[]byte("ppt/slides/"),
|
||||
[]byte("ppt/media/"),
|
||||
[]byte("ppt/slideLayouts/"),
|
||||
[]byte("ppt/theme/"),
|
||||
[]byte("ppt/slideMasters/"),
|
||||
[]byte("ppt/tags/"),
|
||||
[]byte("ppt/notesMasters/"),
|
||||
[]byte("ppt/_rels/"),
|
||||
[]byte("ppt/handoutMasters/"),
|
||||
[]byte("ppt/notesSlides/"),
|
||||
[]byte("ppt/presentation.xml"),
|
||||
[]byte("ppt/tableStyles.xml"),
|
||||
[]byte("ppt/presProps.xml"),
|
||||
[]byte("ppt/viewProps.xml"),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
2
vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go
generated
vendored
2
vendor/github.com/gabriel-vasile/mimetype/internal/magic/text.go
generated
vendored
@ -120,7 +120,7 @@ var (
|
||||
[]byte("/usr/bin/env wish"),
|
||||
)
|
||||
// Rtf matches a Rich Text Format file.
|
||||
Rtf = prefix([]byte("{\\rtf1"))
|
||||
Rtf = prefix([]byte("{\\rtf"))
|
||||
)
|
||||
|
||||
// Text matches a plain text file.
|
||||
|
||||
13
vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go
generated
vendored
13
vendor/github.com/gabriel-vasile/mimetype/internal/magic/zip.go
generated
vendored
@ -3,7 +3,6 @@ package magic
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -43,7 +42,7 @@ func Zip(raw []byte, limit uint32) bool {
|
||||
|
||||
// Jar matches a Java archive file.
|
||||
func Jar(raw []byte, limit uint32) bool {
|
||||
return zipContains(raw, "META-INF/MANIFEST.MF")
|
||||
return zipContains(raw, []byte("META-INF/MANIFEST.MF"))
|
||||
}
|
||||
|
||||
// zipTokenizer holds the source zip file and scanned index.
|
||||
@ -54,7 +53,7 @@ type zipTokenizer struct {
|
||||
|
||||
// next returns the next file name from the zip headers.
|
||||
// https://web.archive.org/web/20191129114319/https://users.cs.jmu.edu/buchhofp/forensics/formats/pkzip.html
|
||||
func (t *zipTokenizer) next() (fileName string) {
|
||||
func (t *zipTokenizer) next() (fileName []byte) {
|
||||
if t.i > len(t.in) {
|
||||
return
|
||||
}
|
||||
@ -74,15 +73,15 @@ func (t *zipTokenizer) next() (fileName string) {
|
||||
return
|
||||
}
|
||||
t.i += fNameOffset + fNameLen
|
||||
return string(in[fNameOffset : fNameOffset+fNameLen])
|
||||
return in[fNameOffset : fNameOffset+fNameLen]
|
||||
}
|
||||
|
||||
// zipContains returns true if the zip file headers from in contain any of the paths.
|
||||
func zipContains(in []byte, paths ...string) bool {
|
||||
func zipContains(in []byte, paths ...[]byte) bool {
|
||||
t := zipTokenizer{in: in}
|
||||
for i, tok := 0, t.next(); tok != ""; i, tok = i+1, t.next() {
|
||||
for tok := t.next(); len(tok) != 0; tok = t.next() {
|
||||
for p := range paths {
|
||||
if strings.HasPrefix(tok, paths[p]) {
|
||||
if bytes.HasPrefix(tok, paths[p]) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
BIN
vendor/github.com/gabriel-vasile/mimetype/mimetype.gif
generated
vendored
BIN
vendor/github.com/gabriel-vasile/mimetype/mimetype.gif
generated
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 MiB |
2
vendor/github.com/gabriel-vasile/mimetype/supported_mimes.md
generated
vendored
2
vendor/github.com/gabriel-vasile/mimetype/supported_mimes.md
generated
vendored
@ -167,7 +167,7 @@ Extension | MIME type | Aliases
|
||||
**.geojson** | application/geo+json | -
|
||||
**.har** | application/json | -
|
||||
**.ndjson** | application/x-ndjson | -
|
||||
**.rtf** | text/rtf | -
|
||||
**.rtf** | text/rtf | application/rtf
|
||||
**.srt** | application/x-subrip | application/x-srt, text/x-srt
|
||||
**.tcl** | text/x-tcl | application/x-tcl
|
||||
**.csv** | text/csv | -
|
||||
|
||||
2
vendor/github.com/gabriel-vasile/mimetype/tree.go
generated
vendored
2
vendor/github.com/gabriel-vasile/mimetype/tree.go
generated
vendored
@ -86,7 +86,7 @@ var (
|
||||
ndJSON = newMIME("application/x-ndjson", ".ndjson", magic.NdJSON)
|
||||
html = newMIME("text/html", ".html", magic.HTML)
|
||||
php = newMIME("text/x-php", ".php", magic.Php)
|
||||
rtf = newMIME("text/rtf", ".rtf", magic.Rtf)
|
||||
rtf = newMIME("text/rtf", ".rtf", magic.Rtf).alias("application/rtf")
|
||||
js = newMIME("application/javascript", ".js", magic.Js).
|
||||
alias("application/x-javascript", "text/javascript")
|
||||
srt = newMIME("application/x-subrip", ".srt", magic.Srt).
|
||||
|
||||
8
vendor/github.com/mholt/acmez/v2/acme/ari.go
generated
vendored
8
vendor/github.com/mholt/acmez/v2/acme/ari.go
generated
vendored
@ -198,10 +198,10 @@ func ARIUniqueIdentifier(leafCert *x509.Certificate) (string, error) {
|
||||
if leafCert.SerialNumber == nil {
|
||||
return "", fmt.Errorf("no serial number")
|
||||
}
|
||||
// TODO: Let's Encrypt's reference implementation switched from using
|
||||
// SerialNumber.Bytes() to this method, which seems less efficient,
|
||||
// but yields the same results !? I asked about it here:
|
||||
// https://github.com/letsencrypt/website/issues/1670
|
||||
// use asn1.Marshal to be correct even when the leading byte is 0x80
|
||||
// or greater to ensure the number is interpreted as positive; note that
|
||||
// SerialNumber.Bytes() does not account for this because it is a nuance
|
||||
// of ASN.1 DER encodings. See https://github.com/letsencrypt/website/issues/1670.
|
||||
serialDER, err := asn1.Marshal(leafCert.SerialNumber)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
||||
10
vendor/github.com/mholt/acmez/v2/acme/certificate.go
generated
vendored
10
vendor/github.com/mholt/acmez/v2/acme/certificate.go
generated
vendored
@ -51,6 +51,15 @@ type Certificate struct {
|
||||
// the certificate for restoring a lost ACME client config.
|
||||
CA string `json:"ca,omitempty"`
|
||||
|
||||
// The location of the account that obtained the certificate.
|
||||
// This field is not part of the ACME spec, but it can be
|
||||
// useful for management; for example, ARI recommends that
|
||||
// servers enforce that the same account be used to indicate
|
||||
// a replacement as was used to obtain the original cert.
|
||||
// This field is set even when ARI is not enabled, for
|
||||
// reference/troubleshooting purposes.
|
||||
Account string `json:"account,omitempty"`
|
||||
|
||||
// When to renew the certificate, and related info, as
|
||||
// prescribed by ARI.
|
||||
RenewalInfo *RenewalInfo `json:"renewal_info,omitempty"`
|
||||
@ -99,6 +108,7 @@ func (c *Client) GetCertificateChain(ctx context.Context, account Account, certU
|
||||
URL: certURL,
|
||||
ChainPEM: chainPEM,
|
||||
CA: c.Directory,
|
||||
Account: account.Location,
|
||||
}
|
||||
|
||||
// attach renewal information, if applicable (draft-ietf-acme-ari-03)
|
||||
|
||||
1
vendor/github.com/miekg/dns/README.md
generated
vendored
1
vendor/github.com/miekg/dns/README.md
generated
vendored
@ -148,6 +148,7 @@ Example programs can be found in the `github.com/miekg/exdns` repository.
|
||||
* 3225 - DO bit (DNSSEC OK)
|
||||
* 340{1,2,3} - NAPTR record
|
||||
* 3445 - Limiting the scope of (DNS)KEY
|
||||
* 3596 - AAAA record
|
||||
* 3597 - Unknown RRs
|
||||
* 4025 - A Method for Storing IPsec Keying Material in DNS
|
||||
* 403{3,4,5} - DNSSEC + validation functions
|
||||
|
||||
62
vendor/github.com/miekg/dns/edns.go
generated
vendored
62
vendor/github.com/miekg/dns/edns.go
generated
vendored
@ -756,36 +756,48 @@ const (
|
||||
ExtendedErrorCodeNoReachableAuthority
|
||||
ExtendedErrorCodeNetworkError
|
||||
ExtendedErrorCodeInvalidData
|
||||
ExtendedErrorCodeSignatureExpiredBeforeValid
|
||||
ExtendedErrorCodeTooEarly
|
||||
ExtendedErrorCodeUnsupportedNSEC3IterValue
|
||||
ExtendedErrorCodeUnableToConformToPolicy
|
||||
ExtendedErrorCodeSynthesized
|
||||
ExtendedErrorCodeInvalidQueryType
|
||||
)
|
||||
|
||||
// ExtendedErrorCodeToString maps extended error info codes to a human readable
|
||||
// description.
|
||||
var ExtendedErrorCodeToString = map[uint16]string{
|
||||
ExtendedErrorCodeOther: "Other",
|
||||
ExtendedErrorCodeUnsupportedDNSKEYAlgorithm: "Unsupported DNSKEY Algorithm",
|
||||
ExtendedErrorCodeUnsupportedDSDigestType: "Unsupported DS Digest Type",
|
||||
ExtendedErrorCodeStaleAnswer: "Stale Answer",
|
||||
ExtendedErrorCodeForgedAnswer: "Forged Answer",
|
||||
ExtendedErrorCodeDNSSECIndeterminate: "DNSSEC Indeterminate",
|
||||
ExtendedErrorCodeDNSBogus: "DNSSEC Bogus",
|
||||
ExtendedErrorCodeSignatureExpired: "Signature Expired",
|
||||
ExtendedErrorCodeSignatureNotYetValid: "Signature Not Yet Valid",
|
||||
ExtendedErrorCodeDNSKEYMissing: "DNSKEY Missing",
|
||||
ExtendedErrorCodeRRSIGsMissing: "RRSIGs Missing",
|
||||
ExtendedErrorCodeNoZoneKeyBitSet: "No Zone Key Bit Set",
|
||||
ExtendedErrorCodeNSECMissing: "NSEC Missing",
|
||||
ExtendedErrorCodeCachedError: "Cached Error",
|
||||
ExtendedErrorCodeNotReady: "Not Ready",
|
||||
ExtendedErrorCodeBlocked: "Blocked",
|
||||
ExtendedErrorCodeCensored: "Censored",
|
||||
ExtendedErrorCodeFiltered: "Filtered",
|
||||
ExtendedErrorCodeProhibited: "Prohibited",
|
||||
ExtendedErrorCodeStaleNXDOMAINAnswer: "Stale NXDOMAIN Answer",
|
||||
ExtendedErrorCodeNotAuthoritative: "Not Authoritative",
|
||||
ExtendedErrorCodeNotSupported: "Not Supported",
|
||||
ExtendedErrorCodeNoReachableAuthority: "No Reachable Authority",
|
||||
ExtendedErrorCodeNetworkError: "Network Error",
|
||||
ExtendedErrorCodeInvalidData: "Invalid Data",
|
||||
ExtendedErrorCodeOther: "Other",
|
||||
ExtendedErrorCodeUnsupportedDNSKEYAlgorithm: "Unsupported DNSKEY Algorithm",
|
||||
ExtendedErrorCodeUnsupportedDSDigestType: "Unsupported DS Digest Type",
|
||||
ExtendedErrorCodeStaleAnswer: "Stale Answer",
|
||||
ExtendedErrorCodeForgedAnswer: "Forged Answer",
|
||||
ExtendedErrorCodeDNSSECIndeterminate: "DNSSEC Indeterminate",
|
||||
ExtendedErrorCodeDNSBogus: "DNSSEC Bogus",
|
||||
ExtendedErrorCodeSignatureExpired: "Signature Expired",
|
||||
ExtendedErrorCodeSignatureNotYetValid: "Signature Not Yet Valid",
|
||||
ExtendedErrorCodeDNSKEYMissing: "DNSKEY Missing",
|
||||
ExtendedErrorCodeRRSIGsMissing: "RRSIGs Missing",
|
||||
ExtendedErrorCodeNoZoneKeyBitSet: "No Zone Key Bit Set",
|
||||
ExtendedErrorCodeNSECMissing: "NSEC Missing",
|
||||
ExtendedErrorCodeCachedError: "Cached Error",
|
||||
ExtendedErrorCodeNotReady: "Not Ready",
|
||||
ExtendedErrorCodeBlocked: "Blocked",
|
||||
ExtendedErrorCodeCensored: "Censored",
|
||||
ExtendedErrorCodeFiltered: "Filtered",
|
||||
ExtendedErrorCodeProhibited: "Prohibited",
|
||||
ExtendedErrorCodeStaleNXDOMAINAnswer: "Stale NXDOMAIN Answer",
|
||||
ExtendedErrorCodeNotAuthoritative: "Not Authoritative",
|
||||
ExtendedErrorCodeNotSupported: "Not Supported",
|
||||
ExtendedErrorCodeNoReachableAuthority: "No Reachable Authority",
|
||||
ExtendedErrorCodeNetworkError: "Network Error",
|
||||
ExtendedErrorCodeInvalidData: "Invalid Data",
|
||||
ExtendedErrorCodeSignatureExpiredBeforeValid: "Signature Expired Before Valid",
|
||||
ExtendedErrorCodeTooEarly: "Too Early",
|
||||
ExtendedErrorCodeUnsupportedNSEC3IterValue: "Unsupported NSEC3 Iterations Value",
|
||||
ExtendedErrorCodeUnableToConformToPolicy: "Unable To Conform To Policy",
|
||||
ExtendedErrorCodeSynthesized: "Synthesized",
|
||||
ExtendedErrorCodeInvalidQueryType: "Invalid Query Type",
|
||||
}
|
||||
|
||||
// StringToExtendedErrorCode is a map from human readable descriptions to
|
||||
|
||||
14
vendor/github.com/miekg/dns/types.go
generated
vendored
14
vendor/github.com/miekg/dns/types.go
generated
vendored
@ -96,6 +96,7 @@ const (
|
||||
TypeLP uint16 = 107
|
||||
TypeEUI48 uint16 = 108
|
||||
TypeEUI64 uint16 = 109
|
||||
TypeNXNAME uint16 = 128
|
||||
TypeURI uint16 = 256
|
||||
TypeCAA uint16 = 257
|
||||
TypeAVC uint16 = 258
|
||||
@ -294,6 +295,19 @@ func (*NULL) parse(c *zlexer, origin string) *ParseError {
|
||||
return &ParseError{err: "NULL records do not have a presentation format"}
|
||||
}
|
||||
|
||||
// NXNAME is a meta record. See https://www.iana.org/go/draft-ietf-dnsop-compact-denial-of-existence-04
|
||||
// Reference: https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml
|
||||
type NXNAME struct {
|
||||
Hdr RR_Header
|
||||
// Does not have any rdata
|
||||
}
|
||||
|
||||
func (rr *NXNAME) String() string { return rr.Hdr.String() }
|
||||
|
||||
func (*NXNAME) parse(c *zlexer, origin string) *ParseError {
|
||||
return &ParseError{err: "NXNAME records do not have a presentation format"}
|
||||
}
|
||||
|
||||
// CNAME RR. See RFC 1034.
|
||||
type CNAME struct {
|
||||
Hdr RR_Header
|
||||
|
||||
2
vendor/github.com/miekg/dns/version.go
generated
vendored
2
vendor/github.com/miekg/dns/version.go
generated
vendored
@ -3,7 +3,7 @@ package dns
|
||||
import "fmt"
|
||||
|
||||
// Version is current version of this library.
|
||||
var Version = v{1, 1, 58}
|
||||
var Version = v{1, 1, 62}
|
||||
|
||||
// v holds the version of this library.
|
||||
type v struct {
|
||||
|
||||
9
vendor/github.com/miekg/dns/zduplicate.go
generated
vendored
9
vendor/github.com/miekg/dns/zduplicate.go
generated
vendored
@ -886,6 +886,15 @@ func (r1 *NULL) isDuplicate(_r2 RR) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (r1 *NXNAME) isDuplicate(_r2 RR) bool {
|
||||
r2, ok := _r2.(*NXNAME)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
_ = r2
|
||||
return true
|
||||
}
|
||||
|
||||
func (r1 *NXT) isDuplicate(_r2 RR) bool {
|
||||
r2, ok := _r2.(*NXT)
|
||||
if !ok {
|
||||
|
||||
11
vendor/github.com/miekg/dns/zmsg.go
generated
vendored
11
vendor/github.com/miekg/dns/zmsg.go
generated
vendored
@ -706,6 +706,10 @@ func (rr *NULL) pack(msg []byte, off int, compression compressionMap, compress b
|
||||
return off, nil
|
||||
}
|
||||
|
||||
func (rr *NXNAME) pack(msg []byte, off int, compression compressionMap, compress bool) (off1 int, err error) {
|
||||
return off, nil
|
||||
}
|
||||
|
||||
func (rr *NXT) pack(msg []byte, off int, compression compressionMap, compress bool) (off1 int, err error) {
|
||||
off, err = packDomainName(rr.NextDomain, msg, off, compression, false)
|
||||
if err != nil {
|
||||
@ -2266,6 +2270,13 @@ func (rr *NULL) unpack(msg []byte, off int) (off1 int, err error) {
|
||||
return off, nil
|
||||
}
|
||||
|
||||
func (rr *NXNAME) unpack(msg []byte, off int) (off1 int, err error) {
|
||||
rdStart := off
|
||||
_ = rdStart
|
||||
|
||||
return off, nil
|
||||
}
|
||||
|
||||
func (rr *NXT) unpack(msg []byte, off int) (off1 int, err error) {
|
||||
rdStart := off
|
||||
_ = rdStart
|
||||
|
||||
12
vendor/github.com/miekg/dns/ztypes.go
generated
vendored
12
vendor/github.com/miekg/dns/ztypes.go
generated
vendored
@ -60,6 +60,7 @@ var TypeToRR = map[uint16]func() RR{
|
||||
TypeNSEC3: func() RR { return new(NSEC3) },
|
||||
TypeNSEC3PARAM: func() RR { return new(NSEC3PARAM) },
|
||||
TypeNULL: func() RR { return new(NULL) },
|
||||
TypeNXNAME: func() RR { return new(NXNAME) },
|
||||
TypeNXT: func() RR { return new(NXT) },
|
||||
TypeOPENPGPKEY: func() RR { return new(OPENPGPKEY) },
|
||||
TypeOPT: func() RR { return new(OPT) },
|
||||
@ -146,6 +147,7 @@ var TypeToString = map[uint16]string{
|
||||
TypeNSEC3: "NSEC3",
|
||||
TypeNSEC3PARAM: "NSEC3PARAM",
|
||||
TypeNULL: "NULL",
|
||||
TypeNXNAME: "NXNAME",
|
||||
TypeNXT: "NXT",
|
||||
TypeNone: "None",
|
||||
TypeOPENPGPKEY: "OPENPGPKEY",
|
||||
@ -230,6 +232,7 @@ func (rr *NSEC) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *NSEC3) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *NSEC3PARAM) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *NULL) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *NXNAME) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *NXT) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *OPENPGPKEY) Header() *RR_Header { return &rr.Hdr }
|
||||
func (rr *OPT) Header() *RR_Header { return &rr.Hdr }
|
||||
@ -594,6 +597,11 @@ func (rr *NULL) len(off int, compression map[string]struct{}) int {
|
||||
return l
|
||||
}
|
||||
|
||||
func (rr *NXNAME) len(off int, compression map[string]struct{}) int {
|
||||
l := rr.Hdr.len(off, compression)
|
||||
return l
|
||||
}
|
||||
|
||||
func (rr *OPENPGPKEY) len(off int, compression map[string]struct{}) int {
|
||||
l := rr.Hdr.len(off, compression)
|
||||
l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
|
||||
@ -1107,6 +1115,10 @@ func (rr *NULL) copy() RR {
|
||||
return &NULL{rr.Hdr, rr.Data}
|
||||
}
|
||||
|
||||
func (rr *NXNAME) copy() RR {
|
||||
return &NXNAME{rr.Hdr}
|
||||
}
|
||||
|
||||
func (rr *NXT) copy() RR {
|
||||
return &NXT{*rr.NSEC.copy().(*NSEC)}
|
||||
}
|
||||
|
||||
136
vendor/github.com/minio/minio-go/v7/api-bucket-cors.go
generated
vendored
Normal file
136
vendor/github.com/minio/minio-go/v7/api-bucket-cors.go
generated
vendored
Normal file
@ -0,0 +1,136 @@
|
||||
/*
|
||||
* MinIO Go Library for Amazon S3 Compatible Cloud Storage
|
||||
* Copyright 2024 MinIO, Inc.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package minio
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/minio/minio-go/v7/pkg/cors"
|
||||
"github.com/minio/minio-go/v7/pkg/s3utils"
|
||||
)
|
||||
|
||||
// SetBucketCors sets the cors configuration for the bucket
|
||||
func (c *Client) SetBucketCors(ctx context.Context, bucketName string, corsConfig *cors.Config) error {
|
||||
if err := s3utils.CheckValidBucketName(bucketName); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if corsConfig == nil {
|
||||
return c.removeBucketCors(ctx, bucketName)
|
||||
}
|
||||
|
||||
return c.putBucketCors(ctx, bucketName, corsConfig)
|
||||
}
|
||||
|
||||
func (c *Client) putBucketCors(ctx context.Context, bucketName string, corsConfig *cors.Config) error {
|
||||
urlValues := make(url.Values)
|
||||
urlValues.Set("cors", "")
|
||||
|
||||
corsStr, err := corsConfig.ToXML()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
reqMetadata := requestMetadata{
|
||||
bucketName: bucketName,
|
||||
queryValues: urlValues,
|
||||
contentBody: bytes.NewReader(corsStr),
|
||||
contentLength: int64(len(corsStr)),
|
||||
contentMD5Base64: sumMD5Base64([]byte(corsStr)),
|
||||
}
|
||||
|
||||
resp, err := c.executeMethod(ctx, http.MethodPut, reqMetadata)
|
||||
defer closeResponse(resp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if resp != nil {
|
||||
if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusNoContent {
|
||||
return httpRespToErrorResponse(resp, bucketName, "")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Client) removeBucketCors(ctx context.Context, bucketName string) error {
|
||||
urlValues := make(url.Values)
|
||||
urlValues.Set("cors", "")
|
||||
|
||||
resp, err := c.executeMethod(ctx, http.MethodDelete, requestMetadata{
|
||||
bucketName: bucketName,
|
||||
queryValues: urlValues,
|
||||
contentSHA256Hex: emptySHA256Hex,
|
||||
})
|
||||
defer closeResponse(resp)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusNoContent {
|
||||
return httpRespToErrorResponse(resp, bucketName, "")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetBucketCors returns the current cors
|
||||
func (c *Client) GetBucketCors(ctx context.Context, bucketName string) (*cors.Config, error) {
|
||||
if err := s3utils.CheckValidBucketName(bucketName); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
bucketCors, err := c.getBucketCors(ctx, bucketName)
|
||||
if err != nil {
|
||||
errResponse := ToErrorResponse(err)
|
||||
if errResponse.Code == "NoSuchCORSConfiguration" {
|
||||
return nil, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return bucketCors, nil
|
||||
}
|
||||
|
||||
func (c *Client) getBucketCors(ctx context.Context, bucketName string) (*cors.Config, error) {
|
||||
urlValues := make(url.Values)
|
||||
urlValues.Set("cors", "")
|
||||
|
||||
resp, err := c.executeMethod(ctx, http.MethodGet, requestMetadata{
|
||||
bucketName: bucketName,
|
||||
queryValues: urlValues,
|
||||
contentSHA256Hex: emptySHA256Hex, // TODO: needed? copied over from other example, but not spec'd in API.
|
||||
})
|
||||
|
||||
defer closeResponse(resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp != nil {
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, httpRespToErrorResponse(resp, bucketName, "")
|
||||
}
|
||||
}
|
||||
|
||||
corsConfig, err := cors.ParseBucketCorsConfig(resp.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return corsConfig, nil
|
||||
}
|
||||
2
vendor/github.com/minio/minio-go/v7/api.go
generated
vendored
2
vendor/github.com/minio/minio-go/v7/api.go
generated
vendored
@ -129,7 +129,7 @@ type Options struct {
|
||||
// Global constants.
|
||||
const (
|
||||
libraryName = "minio-go"
|
||||
libraryVersion = "v7.0.74"
|
||||
libraryVersion = "v7.0.75"
|
||||
)
|
||||
|
||||
// User Agent should always following the below style.
|
||||
|
||||
3
vendor/github.com/minio/minio-go/v7/core.go
generated
vendored
3
vendor/github.com/minio/minio-go/v7/core.go
generated
vendored
@ -91,6 +91,7 @@ type PutObjectPartOptions struct {
|
||||
Md5Base64, Sha256Hex string
|
||||
SSE encrypt.ServerSide
|
||||
CustomHeader, Trailer http.Header
|
||||
DisableContentSha256 bool
|
||||
}
|
||||
|
||||
// PutObjectPart - Upload an object part.
|
||||
@ -107,7 +108,7 @@ func (c Core) PutObjectPart(ctx context.Context, bucket, object, uploadID string
|
||||
sha256Hex: opts.Sha256Hex,
|
||||
size: size,
|
||||
sse: opts.SSE,
|
||||
streamSha256: true,
|
||||
streamSha256: !opts.DisableContentSha256,
|
||||
customHeader: opts.CustomHeader,
|
||||
trailer: opts.Trailer,
|
||||
}
|
||||
|
||||
1102
vendor/github.com/minio/minio-go/v7/functional_tests.go
generated
vendored
1102
vendor/github.com/minio/minio-go/v7/functional_tests.go
generated
vendored
File diff suppressed because it is too large
Load Diff
91
vendor/github.com/minio/minio-go/v7/pkg/cors/cors.go
generated
vendored
Normal file
91
vendor/github.com/minio/minio-go/v7/pkg/cors/cors.go
generated
vendored
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
* MinIO Go Library for Amazon S3 Compatible Cloud Storage
|
||||
* Copyright 2015-2024 MinIO, Inc.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package cors
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"github.com/dustin/go-humanize"
|
||||
)
|
||||
|
||||
const defaultXMLNS = "http://s3.amazonaws.com/doc/2006-03-01/"
|
||||
|
||||
// Config is the container for a CORS configuration for a bucket.
|
||||
type Config struct {
|
||||
XMLNS string `xml:"xmlns,attr,omitempty"`
|
||||
XMLName xml.Name `xml:"CORSConfiguration"`
|
||||
CORSRules []Rule `xml:"CORSRule"`
|
||||
}
|
||||
|
||||
// Rule is a single rule in a CORS configuration.
|
||||
type Rule struct {
|
||||
AllowedHeader []string `xml:"AllowedHeader,omitempty"`
|
||||
AllowedMethod []string `xml:"AllowedMethod,omitempty"`
|
||||
AllowedOrigin []string `xml:"AllowedOrigin,omitempty"`
|
||||
ExposeHeader []string `xml:"ExposeHeader,omitempty"`
|
||||
ID string `xml:"ID,omitempty"`
|
||||
MaxAgeSeconds int `xml:"MaxAgeSeconds,omitempty"`
|
||||
}
|
||||
|
||||
// NewConfig creates a new CORS configuration with the given rules.
|
||||
func NewConfig(rules []Rule) *Config {
|
||||
return &Config{
|
||||
XMLNS: defaultXMLNS,
|
||||
XMLName: xml.Name{
|
||||
Local: "CORSConfiguration",
|
||||
Space: defaultXMLNS,
|
||||
},
|
||||
CORSRules: rules,
|
||||
}
|
||||
}
|
||||
|
||||
// ParseBucketCorsConfig parses a CORS configuration in XML from an io.Reader.
|
||||
func ParseBucketCorsConfig(reader io.Reader) (*Config, error) {
|
||||
var c Config
|
||||
|
||||
// Max size of cors document is 64KiB according to https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html
|
||||
// This limiter is just for safety so has a max of 128KiB
|
||||
err := xml.NewDecoder(io.LimitReader(reader, 128*humanize.KiByte)).Decode(&c)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("decoding xml: %w", err)
|
||||
}
|
||||
if c.XMLNS == "" {
|
||||
c.XMLNS = defaultXMLNS
|
||||
}
|
||||
for i, rule := range c.CORSRules {
|
||||
for j, method := range rule.AllowedMethod {
|
||||
c.CORSRules[i].AllowedMethod[j] = strings.ToUpper(method)
|
||||
}
|
||||
}
|
||||
return &c, nil
|
||||
}
|
||||
|
||||
// ToXML marshals the CORS configuration to XML.
|
||||
func (c Config) ToXML() ([]byte, error) {
|
||||
if c.XMLNS == "" {
|
||||
c.XMLNS = defaultXMLNS
|
||||
}
|
||||
data, err := xml.Marshal(&c)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("marshaling xml: %w", err)
|
||||
}
|
||||
return append([]byte(xml.Header), data...), nil
|
||||
}
|
||||
1
vendor/github.com/minio/minio-go/v7/s3-error.go
generated
vendored
1
vendor/github.com/minio/minio-go/v7/s3-error.go
generated
vendored
@ -57,5 +57,6 @@ var s3ErrorResponseMap = map[string]string{
|
||||
"BucketAlreadyOwnedByYou": "Your previous request to create the named bucket succeeded and you already own it.",
|
||||
"InvalidDuration": "Duration provided in the request is invalid.",
|
||||
"XAmzContentSHA256Mismatch": "The provided 'x-amz-content-sha256' header does not match what was computed.",
|
||||
"NoSuchCORSConfiguration": "The specified bucket does not have a CORS configuration.",
|
||||
// Add new API errors here.
|
||||
}
|
||||
|
||||
5
vendor/github.com/prometheus/client_golang/NOTICE
generated
vendored
5
vendor/github.com/prometheus/client_golang/NOTICE
generated
vendored
@ -16,8 +16,3 @@ Go support for Protocol Buffers - Google's data interchange format
|
||||
http://github.com/golang/protobuf/
|
||||
Copyright 2010 The Go Authors
|
||||
See source code for license details.
|
||||
|
||||
Support for streaming Protocol Buffer messages for the Go language (golang).
|
||||
https://github.com/matttproud/golang_protobuf_extensions
|
||||
Copyright 2013 Matt T. Proud
|
||||
Licensed under the Apache License, Version 2.0
|
||||
|
||||
27
vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/LICENSE
generated
vendored
Normal file
27
vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/LICENSE
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
Copyright (c) 2013 The Go Authors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
145
vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go
generated
vendored
Normal file
145
vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header/header.go
generated
vendored
Normal file
@ -0,0 +1,145 @@
|
||||
// Copyright 2013 The Go Authors. All rights reserved.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file or at
|
||||
// https://developers.google.com/open-source/licenses/bsd.
|
||||
|
||||
// Package header provides functions for parsing HTTP headers.
|
||||
package header
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Octet types from RFC 2616.
|
||||
var octetTypes [256]octetType
|
||||
|
||||
type octetType byte
|
||||
|
||||
const (
|
||||
isToken octetType = 1 << iota
|
||||
isSpace
|
||||
)
|
||||
|
||||
func init() {
|
||||
// OCTET = <any 8-bit sequence of data>
|
||||
// CHAR = <any US-ASCII character (octets 0 - 127)>
|
||||
// CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
|
||||
// CR = <US-ASCII CR, carriage return (13)>
|
||||
// LF = <US-ASCII LF, linefeed (10)>
|
||||
// SP = <US-ASCII SP, space (32)>
|
||||
// HT = <US-ASCII HT, horizontal-tab (9)>
|
||||
// <"> = <US-ASCII double-quote mark (34)>
|
||||
// CRLF = CR LF
|
||||
// LWS = [CRLF] 1*( SP | HT )
|
||||
// TEXT = <any OCTET except CTLs, but including LWS>
|
||||
// separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <">
|
||||
// | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
|
||||
// token = 1*<any CHAR except CTLs or separators>
|
||||
// qdtext = <any TEXT except <">>
|
||||
|
||||
for c := 0; c < 256; c++ {
|
||||
var t octetType
|
||||
isCtl := c <= 31 || c == 127
|
||||
isChar := 0 <= c && c <= 127
|
||||
isSeparator := strings.ContainsRune(" \t\"(),/:;<=>?@[]\\{}", rune(c))
|
||||
if strings.ContainsRune(" \t\r\n", rune(c)) {
|
||||
t |= isSpace
|
||||
}
|
||||
if isChar && !isCtl && !isSeparator {
|
||||
t |= isToken
|
||||
}
|
||||
octetTypes[c] = t
|
||||
}
|
||||
}
|
||||
|
||||
// AcceptSpec describes an Accept* header.
|
||||
type AcceptSpec struct {
|
||||
Value string
|
||||
Q float64
|
||||
}
|
||||
|
||||
// ParseAccept parses Accept* headers.
|
||||
func ParseAccept(header http.Header, key string) (specs []AcceptSpec) {
|
||||
loop:
|
||||
for _, s := range header[key] {
|
||||
for {
|
||||
var spec AcceptSpec
|
||||
spec.Value, s = expectTokenSlash(s)
|
||||
if spec.Value == "" {
|
||||
continue loop
|
||||
}
|
||||
spec.Q = 1.0
|
||||
s = skipSpace(s)
|
||||
if strings.HasPrefix(s, ";") {
|
||||
s = skipSpace(s[1:])
|
||||
if !strings.HasPrefix(s, "q=") {
|
||||
continue loop
|
||||
}
|
||||
spec.Q, s = expectQuality(s[2:])
|
||||
if spec.Q < 0.0 {
|
||||
continue loop
|
||||
}
|
||||
}
|
||||
specs = append(specs, spec)
|
||||
s = skipSpace(s)
|
||||
if !strings.HasPrefix(s, ",") {
|
||||
continue loop
|
||||
}
|
||||
s = skipSpace(s[1:])
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func skipSpace(s string) (rest string) {
|
||||
i := 0
|
||||
for ; i < len(s); i++ {
|
||||
if octetTypes[s[i]]&isSpace == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
return s[i:]
|
||||
}
|
||||
|
||||
func expectTokenSlash(s string) (token, rest string) {
|
||||
i := 0
|
||||
for ; i < len(s); i++ {
|
||||
b := s[i]
|
||||
if (octetTypes[b]&isToken == 0) && b != '/' {
|
||||
break
|
||||
}
|
||||
}
|
||||
return s[:i], s[i:]
|
||||
}
|
||||
|
||||
func expectQuality(s string) (q float64, rest string) {
|
||||
switch {
|
||||
case len(s) == 0:
|
||||
return -1, ""
|
||||
case s[0] == '0':
|
||||
q = 0
|
||||
case s[0] == '1':
|
||||
q = 1
|
||||
default:
|
||||
return -1, ""
|
||||
}
|
||||
s = s[1:]
|
||||
if !strings.HasPrefix(s, ".") {
|
||||
return q, s
|
||||
}
|
||||
s = s[1:]
|
||||
i := 0
|
||||
n := 0
|
||||
d := 1
|
||||
for ; i < len(s); i++ {
|
||||
b := s[i]
|
||||
if b < '0' || b > '9' {
|
||||
break
|
||||
}
|
||||
n = n*10 + int(b) - '0'
|
||||
d *= 10
|
||||
}
|
||||
return q + float64(n)/float64(d), s[i:]
|
||||
}
|
||||
36
vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/negotiate.go
generated
vendored
Normal file
36
vendor/github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/negotiate.go
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
// Copyright 2013 The Go Authors. All rights reserved.
|
||||
//
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file or at
|
||||
// https://developers.google.com/open-source/licenses/bsd.
|
||||
|
||||
package httputil
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil/header"
|
||||
)
|
||||
|
||||
// NegotiateContentEncoding returns the best offered content encoding for the
|
||||
// request's Accept-Encoding header. If two offers match with equal weight and
|
||||
// then the offer earlier in the list is preferred. If no offers are
|
||||
// acceptable, then "" is returned.
|
||||
func NegotiateContentEncoding(r *http.Request, offers []string) string {
|
||||
bestOffer := "identity"
|
||||
bestQ := -1.0
|
||||
specs := header.ParseAccept(r.Header, "Accept-Encoding")
|
||||
for _, offer := range offers {
|
||||
for _, spec := range specs {
|
||||
if spec.Q > bestQ &&
|
||||
(spec.Value == "*" || spec.Value == offer) {
|
||||
bestQ = spec.Q
|
||||
bestOffer = offer
|
||||
}
|
||||
}
|
||||
}
|
||||
if bestQ == 0 {
|
||||
bestOffer = ""
|
||||
}
|
||||
return bestOffer
|
||||
}
|
||||
55
vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
generated
vendored
55
vendor/github.com/prometheus/client_golang/prometheus/go_collector.go
generated
vendored
@ -22,13 +22,13 @@ import (
|
||||
// goRuntimeMemStats provides the metrics initially provided by runtime.ReadMemStats.
|
||||
// From Go 1.17 those similar (and better) statistics are provided by runtime/metrics, so
|
||||
// while eval closure works on runtime.MemStats, the struct from Go 1.17+ is
|
||||
// populated using runtime/metrics.
|
||||
// populated using runtime/metrics. Those are the defaults we can't alter.
|
||||
func goRuntimeMemStats() memStatsMetrics {
|
||||
return memStatsMetrics{
|
||||
{
|
||||
desc: NewDesc(
|
||||
memstatNamespace("alloc_bytes"),
|
||||
"Number of bytes allocated and still in use.",
|
||||
"Number of bytes allocated in heap and currently in use. Equals to /memory/classes/heap/objects:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.Alloc) },
|
||||
@ -36,7 +36,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("alloc_bytes_total"),
|
||||
"Total number of bytes allocated, even if freed.",
|
||||
"Total number of bytes allocated in heap until now, even if released already. Equals to /gc/heap/allocs:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.TotalAlloc) },
|
||||
@ -44,23 +44,16 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("sys_bytes"),
|
||||
"Number of bytes obtained from system.",
|
||||
"Number of bytes obtained from system. Equals to /memory/classes/total:byte.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.Sys) },
|
||||
valType: GaugeValue,
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("lookups_total"),
|
||||
"Total number of pointer lookups.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.Lookups) },
|
||||
valType: CounterValue,
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("mallocs_total"),
|
||||
"Total number of mallocs.",
|
||||
// TODO(bwplotka): We could add go_memstats_heap_objects, probably useful for discovery. Let's gather more feedback, kind of a waste of bytes for everybody for compatibility reasons to keep both, and we can't really rename/remove useful metric.
|
||||
"Total number of heap objects allocated, both live and gc-ed. Semantically a counter version for go_memstats_heap_objects gauge. Equals to /gc/heap/allocs:objects + /gc/heap/tiny/allocs:objects.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.Mallocs) },
|
||||
@ -68,7 +61,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("frees_total"),
|
||||
"Total number of frees.",
|
||||
"Total number of heap objects frees. Equals to /gc/heap/frees:objects + /gc/heap/tiny/allocs:objects.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.Frees) },
|
||||
@ -76,7 +69,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("heap_alloc_bytes"),
|
||||
"Number of heap bytes allocated and still in use.",
|
||||
"Number of heap bytes allocated and currently in use, same as go_memstats_alloc_bytes. Equals to /memory/classes/heap/objects:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapAlloc) },
|
||||
@ -84,7 +77,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("heap_sys_bytes"),
|
||||
"Number of heap bytes obtained from system.",
|
||||
"Number of heap bytes obtained from system. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes + /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapSys) },
|
||||
@ -92,7 +85,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("heap_idle_bytes"),
|
||||
"Number of heap bytes waiting to be used.",
|
||||
"Number of heap bytes waiting to be used. Equals to /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapIdle) },
|
||||
@ -100,7 +93,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("heap_inuse_bytes"),
|
||||
"Number of heap bytes that are in use.",
|
||||
"Number of heap bytes that are in use. Equals to /memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapInuse) },
|
||||
@ -108,7 +101,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("heap_released_bytes"),
|
||||
"Number of heap bytes released to OS.",
|
||||
"Number of heap bytes released to OS. Equals to /memory/classes/heap/released:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapReleased) },
|
||||
@ -116,7 +109,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("heap_objects"),
|
||||
"Number of allocated objects.",
|
||||
"Number of currently allocated objects. Equals to /gc/heap/objects:objects.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapObjects) },
|
||||
@ -124,7 +117,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("stack_inuse_bytes"),
|
||||
"Number of bytes in use by the stack allocator.",
|
||||
"Number of bytes obtained from system for stack allocator in non-CGO environments. Equals to /memory/classes/heap/stacks:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackInuse) },
|
||||
@ -132,7 +125,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("stack_sys_bytes"),
|
||||
"Number of bytes obtained from system for stack allocator.",
|
||||
"Number of bytes obtained from system for stack allocator. Equals to /memory/classes/heap/stacks:bytes + /memory/classes/os-stacks:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackSys) },
|
||||
@ -140,7 +133,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("mspan_inuse_bytes"),
|
||||
"Number of bytes in use by mspan structures.",
|
||||
"Number of bytes in use by mspan structures. Equals to /memory/classes/metadata/mspan/inuse:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanInuse) },
|
||||
@ -148,7 +141,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("mspan_sys_bytes"),
|
||||
"Number of bytes used for mspan structures obtained from system.",
|
||||
"Number of bytes used for mspan structures obtained from system. Equals to /memory/classes/metadata/mspan/inuse:bytes + /memory/classes/metadata/mspan/free:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanSys) },
|
||||
@ -156,7 +149,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("mcache_inuse_bytes"),
|
||||
"Number of bytes in use by mcache structures.",
|
||||
"Number of bytes in use by mcache structures. Equals to /memory/classes/metadata/mcache/inuse:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheInuse) },
|
||||
@ -164,7 +157,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("mcache_sys_bytes"),
|
||||
"Number of bytes used for mcache structures obtained from system.",
|
||||
"Number of bytes used for mcache structures obtained from system. Equals to /memory/classes/metadata/mcache/inuse:bytes + /memory/classes/metadata/mcache/free:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheSys) },
|
||||
@ -172,7 +165,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("buck_hash_sys_bytes"),
|
||||
"Number of bytes used by the profiling bucket hash table.",
|
||||
"Number of bytes used by the profiling bucket hash table. Equals to /memory/classes/profiling/buckets:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.BuckHashSys) },
|
||||
@ -180,7 +173,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("gc_sys_bytes"),
|
||||
"Number of bytes used for garbage collection system metadata.",
|
||||
"Number of bytes used for garbage collection system metadata. Equals to /memory/classes/metadata/other:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.GCSys) },
|
||||
@ -188,7 +181,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("other_sys_bytes"),
|
||||
"Number of bytes used for other system allocations.",
|
||||
"Number of bytes used for other system allocations. Equals to /memory/classes/other:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.OtherSys) },
|
||||
@ -196,7 +189,7 @@ func goRuntimeMemStats() memStatsMetrics {
|
||||
}, {
|
||||
desc: NewDesc(
|
||||
memstatNamespace("next_gc_bytes"),
|
||||
"Number of heap bytes when next garbage collection will take place.",
|
||||
"Number of heap bytes when next garbage collection will take place. Equals to /gc/heap/goal:bytes.",
|
||||
nil, nil,
|
||||
),
|
||||
eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) },
|
||||
@ -225,7 +218,7 @@ func newBaseGoCollector() baseGoCollector {
|
||||
nil, nil),
|
||||
gcDesc: NewDesc(
|
||||
"go_gc_duration_seconds",
|
||||
"A summary of the pause duration of garbage collection cycles.",
|
||||
"A summary of the wall-time pause (stop-the-world) duration in garbage collection cycles.",
|
||||
nil, nil),
|
||||
gcLastTimeDesc: NewDesc(
|
||||
"go_memstats_last_gc_time_seconds",
|
||||
|
||||
19
vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go
generated
vendored
19
vendor/github.com/prometheus/client_golang/prometheus/go_collector_latest.go
generated
vendored
@ -17,6 +17,7 @@
|
||||
package prometheus
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"runtime"
|
||||
"runtime/metrics"
|
||||
@ -153,7 +154,8 @@ func defaultGoCollectorOptions() internal.GoCollectorOptions {
|
||||
"/gc/heap/frees-by-size:bytes": goGCHeapFreesBytes,
|
||||
},
|
||||
RuntimeMetricRules: []internal.GoCollectorRule{
|
||||
//{Matcher: regexp.MustCompile("")},
|
||||
// Recommended metrics we want by default from runtime/metrics.
|
||||
{Matcher: internal.GoCollectorDefaultRuntimeMetrics},
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -203,6 +205,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
|
||||
// to fail here. This condition is tested in TestExpectedRuntimeMetrics.
|
||||
continue
|
||||
}
|
||||
help := attachOriginalName(d.Description.Description, d.Name)
|
||||
|
||||
sampleBuf = append(sampleBuf, metrics.Sample{Name: d.Name})
|
||||
sampleMap[d.Name] = &sampleBuf[len(sampleBuf)-1]
|
||||
@ -214,7 +217,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
|
||||
m = newBatchHistogram(
|
||||
NewDesc(
|
||||
BuildFQName(namespace, subsystem, name),
|
||||
d.Description.Description,
|
||||
help,
|
||||
nil,
|
||||
nil,
|
||||
),
|
||||
@ -226,7 +229,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
|
||||
Namespace: namespace,
|
||||
Subsystem: subsystem,
|
||||
Name: name,
|
||||
Help: d.Description.Description,
|
||||
Help: help,
|
||||
},
|
||||
)
|
||||
} else {
|
||||
@ -234,7 +237,7 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
|
||||
Namespace: namespace,
|
||||
Subsystem: subsystem,
|
||||
Name: name,
|
||||
Help: d.Description.Description,
|
||||
Help: help,
|
||||
})
|
||||
}
|
||||
metricSet = append(metricSet, m)
|
||||
@ -284,6 +287,10 @@ func NewGoCollector(opts ...func(o *internal.GoCollectorOptions)) Collector {
|
||||
}
|
||||
}
|
||||
|
||||
func attachOriginalName(desc, origName string) string {
|
||||
return fmt.Sprintf("%s Sourced from %s", desc, origName)
|
||||
}
|
||||
|
||||
// Describe returns all descriptions of the collector.
|
||||
func (c *goCollector) Describe(ch chan<- *Desc) {
|
||||
c.base.Describe(ch)
|
||||
@ -376,13 +383,13 @@ func unwrapScalarRMValue(v metrics.Value) float64 {
|
||||
//
|
||||
// This should never happen because we always populate our metric
|
||||
// set from the runtime/metrics package.
|
||||
panic("unexpected unsupported metric")
|
||||
panic("unexpected bad kind metric")
|
||||
default:
|
||||
// Unsupported metric kind.
|
||||
//
|
||||
// This should never happen because we check for this during initialization
|
||||
// and flag and filter metrics whose kinds we don't understand.
|
||||
panic("unexpected unsupported metric kind")
|
||||
panic(fmt.Sprintf("unexpected unsupported metric: %v", v.Kind()))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
226
vendor/github.com/prometheus/client_golang/prometheus/histogram.go
generated
vendored
226
vendor/github.com/prometheus/client_golang/prometheus/histogram.go
generated
vendored
@ -440,7 +440,7 @@ type HistogramOpts struct {
|
||||
// constant (or any negative float value).
|
||||
NativeHistogramZeroThreshold float64
|
||||
|
||||
// The remaining fields define a strategy to limit the number of
|
||||
// The next three fields define a strategy to limit the number of
|
||||
// populated sparse buckets. If NativeHistogramMaxBucketNumber is left
|
||||
// at zero, the number of buckets is not limited. (Note that this might
|
||||
// lead to unbounded memory consumption if the values observed by the
|
||||
@ -473,6 +473,22 @@ type HistogramOpts struct {
|
||||
NativeHistogramMinResetDuration time.Duration
|
||||
NativeHistogramMaxZeroThreshold float64
|
||||
|
||||
// NativeHistogramMaxExemplars limits the number of exemplars
|
||||
// that are kept in memory for each native histogram. If you leave it at
|
||||
// zero, a default value of 10 is used. If no exemplars should be kept specifically
|
||||
// for native histograms, set it to a negative value. (Scrapers can
|
||||
// still use the exemplars exposed for classic buckets, which are managed
|
||||
// independently.)
|
||||
NativeHistogramMaxExemplars int
|
||||
// NativeHistogramExemplarTTL is only checked once
|
||||
// NativeHistogramMaxExemplars is exceeded. In that case, the
|
||||
// oldest exemplar is removed if it is older than NativeHistogramExemplarTTL.
|
||||
// Otherwise, the older exemplar in the pair of exemplars that are closest
|
||||
// together (on an exponential scale) is removed.
|
||||
// If NativeHistogramExemplarTTL is left at its zero value, a default value of
|
||||
// 5m is used. To always delete the oldest exemplar, set it to a negative value.
|
||||
NativeHistogramExemplarTTL time.Duration
|
||||
|
||||
// now is for testing purposes, by default it's time.Now.
|
||||
now func() time.Time
|
||||
|
||||
@ -532,6 +548,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr
|
||||
if opts.afterFunc == nil {
|
||||
opts.afterFunc = time.AfterFunc
|
||||
}
|
||||
|
||||
h := &histogram{
|
||||
desc: desc,
|
||||
upperBounds: opts.Buckets,
|
||||
@ -556,6 +573,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr
|
||||
h.nativeHistogramZeroThreshold = DefNativeHistogramZeroThreshold
|
||||
} // Leave h.nativeHistogramZeroThreshold at 0 otherwise.
|
||||
h.nativeHistogramSchema = pickSchema(opts.NativeHistogramBucketFactor)
|
||||
h.nativeExemplars = makeNativeExemplars(opts.NativeHistogramExemplarTTL, opts.NativeHistogramMaxExemplars)
|
||||
}
|
||||
for i, upperBound := range h.upperBounds {
|
||||
if i < len(h.upperBounds)-1 {
|
||||
@ -725,7 +743,8 @@ type histogram struct {
|
||||
// resetScheduled is protected by mtx. It is true if a reset is
|
||||
// scheduled for a later time (when nativeHistogramMinResetDuration has
|
||||
// passed).
|
||||
resetScheduled bool
|
||||
resetScheduled bool
|
||||
nativeExemplars nativeExemplars
|
||||
|
||||
// now is for testing purposes, by default it's time.Now.
|
||||
now func() time.Time
|
||||
@ -742,6 +761,9 @@ func (h *histogram) Observe(v float64) {
|
||||
h.observe(v, h.findBucket(v))
|
||||
}
|
||||
|
||||
// ObserveWithExemplar should not be called in a high-frequency setting
|
||||
// for a native histogram with configured exemplars. For this case,
|
||||
// the implementation isn't lock-free and might suffer from lock contention.
|
||||
func (h *histogram) ObserveWithExemplar(v float64, e Labels) {
|
||||
i := h.findBucket(v)
|
||||
h.observe(v, i)
|
||||
@ -821,6 +843,15 @@ func (h *histogram) Write(out *dto.Metric) error {
|
||||
Length: proto.Uint32(0),
|
||||
}}
|
||||
}
|
||||
|
||||
// If exemplars are not configured, the cap will be 0.
|
||||
// So append is not needed in this case.
|
||||
if cap(h.nativeExemplars.exemplars) > 0 {
|
||||
h.nativeExemplars.Lock()
|
||||
his.Exemplars = append(his.Exemplars, h.nativeExemplars.exemplars...)
|
||||
h.nativeExemplars.Unlock()
|
||||
}
|
||||
|
||||
}
|
||||
addAndResetCounts(hotCounts, coldCounts)
|
||||
return nil
|
||||
@ -1091,8 +1122,10 @@ func (h *histogram) resetCounts(counts *histogramCounts) {
|
||||
deleteSyncMap(&counts.nativeHistogramBucketsPositive)
|
||||
}
|
||||
|
||||
// updateExemplar replaces the exemplar for the provided bucket. With empty
|
||||
// labels, it's a no-op. It panics if any of the labels is invalid.
|
||||
// updateExemplar replaces the exemplar for the provided classic bucket.
|
||||
// With empty labels, it's a no-op. It panics if any of the labels is invalid.
|
||||
// If histogram is native, the exemplar will be cached into nativeExemplars,
|
||||
// which has a limit, and will remove one exemplar when limit is reached.
|
||||
func (h *histogram) updateExemplar(v float64, bucket int, l Labels) {
|
||||
if l == nil {
|
||||
return
|
||||
@ -1102,6 +1135,10 @@ func (h *histogram) updateExemplar(v float64, bucket int, l Labels) {
|
||||
panic(err)
|
||||
}
|
||||
h.exemplars[bucket].Store(e)
|
||||
doSparse := h.nativeHistogramSchema > math.MinInt32 && !math.IsNaN(v)
|
||||
if doSparse {
|
||||
h.nativeExemplars.addExemplar(e)
|
||||
}
|
||||
}
|
||||
|
||||
// HistogramVec is a Collector that bundles a set of Histograms that all share the
|
||||
@ -1336,6 +1373,48 @@ func MustNewConstHistogram(
|
||||
return m
|
||||
}
|
||||
|
||||
// NewConstHistogramWithCreatedTimestamp does the same thing as NewConstHistogram but sets the created timestamp.
|
||||
func NewConstHistogramWithCreatedTimestamp(
|
||||
desc *Desc,
|
||||
count uint64,
|
||||
sum float64,
|
||||
buckets map[float64]uint64,
|
||||
ct time.Time,
|
||||
labelValues ...string,
|
||||
) (Metric, error) {
|
||||
if desc.err != nil {
|
||||
return nil, desc.err
|
||||
}
|
||||
if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &constHistogram{
|
||||
desc: desc,
|
||||
count: count,
|
||||
sum: sum,
|
||||
buckets: buckets,
|
||||
labelPairs: MakeLabelPairs(desc, labelValues),
|
||||
createdTs: timestamppb.New(ct),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// MustNewConstHistogramWithCreatedTimestamp is a version of NewConstHistogramWithCreatedTimestamp that panics where
|
||||
// NewConstHistogramWithCreatedTimestamp would have returned an error.
|
||||
func MustNewConstHistogramWithCreatedTimestamp(
|
||||
desc *Desc,
|
||||
count uint64,
|
||||
sum float64,
|
||||
buckets map[float64]uint64,
|
||||
ct time.Time,
|
||||
labelValues ...string,
|
||||
) Metric {
|
||||
m, err := NewConstHistogramWithCreatedTimestamp(desc, count, sum, buckets, ct, labelValues...)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
type buckSort []*dto.Bucket
|
||||
|
||||
func (s buckSort) Len() int {
|
||||
@ -1575,3 +1654,142 @@ func addAndResetCounts(hot, cold *histogramCounts) {
|
||||
atomic.AddUint64(&hot.nativeHistogramZeroBucket, atomic.LoadUint64(&cold.nativeHistogramZeroBucket))
|
||||
atomic.StoreUint64(&cold.nativeHistogramZeroBucket, 0)
|
||||
}
|
||||
|
||||
type nativeExemplars struct {
|
||||
sync.Mutex
|
||||
|
||||
ttl time.Duration
|
||||
exemplars []*dto.Exemplar
|
||||
}
|
||||
|
||||
func makeNativeExemplars(ttl time.Duration, maxCount int) nativeExemplars {
|
||||
if ttl == 0 {
|
||||
ttl = 5 * time.Minute
|
||||
}
|
||||
|
||||
if maxCount == 0 {
|
||||
maxCount = 10
|
||||
}
|
||||
|
||||
if maxCount < 0 {
|
||||
maxCount = 0
|
||||
}
|
||||
|
||||
return nativeExemplars{
|
||||
ttl: ttl,
|
||||
exemplars: make([]*dto.Exemplar, 0, maxCount),
|
||||
}
|
||||
}
|
||||
|
||||
func (n *nativeExemplars) addExemplar(e *dto.Exemplar) {
|
||||
if cap(n.exemplars) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
n.Lock()
|
||||
defer n.Unlock()
|
||||
|
||||
// The index where to insert the new exemplar.
|
||||
var nIdx int = -1
|
||||
|
||||
// When the number of exemplars has not yet exceeded or
|
||||
// is equal to cap(n.exemplars), then
|
||||
// insert the new exemplar directly.
|
||||
if len(n.exemplars) < cap(n.exemplars) {
|
||||
for nIdx = 0; nIdx < len(n.exemplars); nIdx++ {
|
||||
if *e.Value < *n.exemplars[nIdx].Value {
|
||||
break
|
||||
}
|
||||
}
|
||||
n.exemplars = append(n.exemplars[:nIdx], append([]*dto.Exemplar{e}, n.exemplars[nIdx:]...)...)
|
||||
return
|
||||
}
|
||||
|
||||
// When the number of exemplars exceeds the limit, remove one exemplar.
|
||||
var (
|
||||
rIdx int // The index where to remove the old exemplar.
|
||||
|
||||
ot = time.Now() // Oldest timestamp seen.
|
||||
otIdx = -1 // Index of the exemplar with the oldest timestamp.
|
||||
|
||||
md = -1.0 // Logarithm of the delta of the closest pair of exemplars.
|
||||
mdIdx = -1 // Index of the older exemplar within the closest pair.
|
||||
cLog float64 // Logarithm of the current exemplar.
|
||||
pLog float64 // Logarithm of the previous exemplar.
|
||||
)
|
||||
|
||||
for i, exemplar := range n.exemplars {
|
||||
// Find the exemplar with the oldest timestamp.
|
||||
if otIdx == -1 || exemplar.Timestamp.AsTime().Before(ot) {
|
||||
ot = exemplar.Timestamp.AsTime()
|
||||
otIdx = i
|
||||
}
|
||||
|
||||
// Find the index at which to insert new the exemplar.
|
||||
if *e.Value <= *exemplar.Value && nIdx == -1 {
|
||||
nIdx = i
|
||||
}
|
||||
|
||||
// Find the two closest exemplars and pick the one the with older timestamp.
|
||||
pLog = cLog
|
||||
cLog = math.Log(exemplar.GetValue())
|
||||
if i == 0 {
|
||||
continue
|
||||
}
|
||||
diff := math.Abs(cLog - pLog)
|
||||
if md == -1 || diff < md {
|
||||
md = diff
|
||||
if n.exemplars[i].Timestamp.AsTime().Before(n.exemplars[i-1].Timestamp.AsTime()) {
|
||||
mdIdx = i
|
||||
} else {
|
||||
mdIdx = i - 1
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// If all existing exemplar are smaller than new exemplar,
|
||||
// then the exemplar should be inserted at the end.
|
||||
if nIdx == -1 {
|
||||
nIdx = len(n.exemplars)
|
||||
}
|
||||
|
||||
if otIdx != -1 && e.Timestamp.AsTime().Sub(ot) > n.ttl {
|
||||
rIdx = otIdx
|
||||
} else {
|
||||
// In the previous for loop, when calculating the closest pair of exemplars,
|
||||
// we did not take into account the newly inserted exemplar.
|
||||
// So we need to calculate with the newly inserted exemplar again.
|
||||
elog := math.Log(e.GetValue())
|
||||
if nIdx > 0 {
|
||||
diff := math.Abs(elog - math.Log(n.exemplars[nIdx-1].GetValue()))
|
||||
if diff < md {
|
||||
md = diff
|
||||
mdIdx = nIdx
|
||||
if n.exemplars[nIdx-1].Timestamp.AsTime().Before(e.Timestamp.AsTime()) {
|
||||
mdIdx = nIdx - 1
|
||||
}
|
||||
}
|
||||
}
|
||||
if nIdx < len(n.exemplars) {
|
||||
diff := math.Abs(math.Log(n.exemplars[nIdx].GetValue()) - elog)
|
||||
if diff < md {
|
||||
mdIdx = nIdx
|
||||
if n.exemplars[nIdx].Timestamp.AsTime().Before(e.Timestamp.AsTime()) {
|
||||
mdIdx = nIdx
|
||||
}
|
||||
}
|
||||
}
|
||||
rIdx = mdIdx
|
||||
}
|
||||
|
||||
// Adjust the slice according to rIdx and nIdx.
|
||||
switch {
|
||||
case rIdx == nIdx:
|
||||
n.exemplars[nIdx] = e
|
||||
case rIdx < nIdx:
|
||||
n.exemplars = append(n.exemplars[:rIdx], append(n.exemplars[rIdx+1:nIdx], append([]*dto.Exemplar{e}, n.exemplars[nIdx:]...)...)...)
|
||||
case rIdx > nIdx:
|
||||
n.exemplars = append(n.exemplars[:nIdx], append([]*dto.Exemplar{e}, append(n.exemplars[nIdx:rIdx], n.exemplars[rIdx+1:]...)...)...)
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,3 +30,5 @@ type GoCollectorOptions struct {
|
||||
RuntimeMetricSumForHist map[string]string
|
||||
RuntimeMetricRules []GoCollectorRule
|
||||
}
|
||||
|
||||
var GoCollectorDefaultRuntimeMetrics = regexp.MustCompile(`/gc/gogc:percent|/gc/gomemlimit:bytes|/sched/gomaxprocs:threads`)
|
||||
|
||||
2
vendor/github.com/prometheus/client_golang/prometheus/metric.go
generated
vendored
2
vendor/github.com/prometheus/client_golang/prometheus/metric.go
generated
vendored
@ -234,7 +234,7 @@ func NewMetricWithExemplars(m Metric, exemplars ...Exemplar) (Metric, error) {
|
||||
)
|
||||
for i, e := range exemplars {
|
||||
ts := e.Timestamp
|
||||
if ts == (time.Time{}) {
|
||||
if ts.IsZero() {
|
||||
ts = now
|
||||
}
|
||||
exs[i], err = newExemplar(e.Value, ts, e.Labels)
|
||||
|
||||
27
vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
generated
vendored
27
vendor/github.com/prometheus/client_golang/prometheus/process_collector.go
generated
vendored
@ -22,14 +22,15 @@ import (
|
||||
)
|
||||
|
||||
type processCollector struct {
|
||||
collectFn func(chan<- Metric)
|
||||
pidFn func() (int, error)
|
||||
reportErrors bool
|
||||
cpuTotal *Desc
|
||||
openFDs, maxFDs *Desc
|
||||
vsize, maxVsize *Desc
|
||||
rss *Desc
|
||||
startTime *Desc
|
||||
collectFn func(chan<- Metric)
|
||||
pidFn func() (int, error)
|
||||
reportErrors bool
|
||||
cpuTotal *Desc
|
||||
openFDs, maxFDs *Desc
|
||||
vsize, maxVsize *Desc
|
||||
rss *Desc
|
||||
startTime *Desc
|
||||
inBytes, outBytes *Desc
|
||||
}
|
||||
|
||||
// ProcessCollectorOpts defines the behavior of a process metrics collector
|
||||
@ -100,6 +101,16 @@ func NewProcessCollector(opts ProcessCollectorOpts) Collector {
|
||||
"Start time of the process since unix epoch in seconds.",
|
||||
nil, nil,
|
||||
),
|
||||
inBytes: NewDesc(
|
||||
ns+"process_network_receive_bytes_total",
|
||||
"Number of bytes received by the process over the network.",
|
||||
nil, nil,
|
||||
),
|
||||
outBytes: NewDesc(
|
||||
ns+"process_network_transmit_bytes_total",
|
||||
"Number of bytes sent by the process over the network.",
|
||||
nil, nil,
|
||||
),
|
||||
}
|
||||
|
||||
if opts.PidFn == nil {
|
||||
|
||||
14
vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go
generated
vendored
14
vendor/github.com/prometheus/client_golang/prometheus/process_collector_other.go
generated
vendored
@ -63,4 +63,18 @@ func (c *processCollector) processCollect(ch chan<- Metric) {
|
||||
} else {
|
||||
c.reportError(ch, nil, err)
|
||||
}
|
||||
|
||||
if netstat, err := p.Netstat(); err == nil {
|
||||
var inOctets, outOctets float64
|
||||
if netstat.IpExt.InOctets != nil {
|
||||
inOctets = *netstat.IpExt.InOctets
|
||||
}
|
||||
if netstat.IpExt.OutOctets != nil {
|
||||
outOctets = *netstat.IpExt.OutOctets
|
||||
}
|
||||
ch <- MustNewConstMetric(c.inBytes, CounterValue, inOctets)
|
||||
ch <- MustNewConstMetric(c.outBytes, CounterValue, outOctets)
|
||||
} else {
|
||||
c.reportError(ch, nil, err)
|
||||
}
|
||||
}
|
||||
|
||||
6
vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
generated
vendored
6
vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go
generated
vendored
@ -76,6 +76,12 @@ func (r *responseWriterDelegator) Write(b []byte) (int, error) {
|
||||
return n, err
|
||||
}
|
||||
|
||||
// Unwrap lets http.ResponseController get the underlying http.ResponseWriter,
|
||||
// by implementing the [rwUnwrapper](https://cs.opensource.google/go/go/+/refs/tags/go1.21.4:src/net/http/responsecontroller.go;l=42-44) interface.
|
||||
func (r *responseWriterDelegator) Unwrap() http.ResponseWriter {
|
||||
return r.ResponseWriter
|
||||
}
|
||||
|
||||
type (
|
||||
closeNotifierDelegator struct{ *responseWriterDelegator }
|
||||
flusherDelegator struct{ *responseWriterDelegator }
|
||||
|
||||
113
vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go
generated
vendored
113
vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go
generated
vendored
@ -38,12 +38,13 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/klauspost/compress/zstd"
|
||||
"github.com/prometheus/common/expfmt"
|
||||
|
||||
"github.com/prometheus/client_golang/internal/github.com/golang/gddo/httputil"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
@ -54,6 +55,18 @@ const (
|
||||
processStartTimeHeader = "Process-Start-Time-Unix"
|
||||
)
|
||||
|
||||
// Compression represents the content encodings handlers support for the HTTP
|
||||
// responses.
|
||||
type Compression string
|
||||
|
||||
const (
|
||||
Identity Compression = "identity"
|
||||
Gzip Compression = "gzip"
|
||||
Zstd Compression = "zstd"
|
||||
)
|
||||
|
||||
var defaultCompressionFormats = []Compression{Identity, Gzip, Zstd}
|
||||
|
||||
var gzipPool = sync.Pool{
|
||||
New: func() interface{} {
|
||||
return gzip.NewWriter(nil)
|
||||
@ -122,6 +135,18 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO
|
||||
}
|
||||
}
|
||||
|
||||
// Select compression formats to offer based on default or user choice.
|
||||
var compressions []string
|
||||
if !opts.DisableCompression {
|
||||
offers := defaultCompressionFormats
|
||||
if len(opts.OfferedCompressions) > 0 {
|
||||
offers = opts.OfferedCompressions
|
||||
}
|
||||
for _, comp := range offers {
|
||||
compressions = append(compressions, string(comp))
|
||||
}
|
||||
}
|
||||
|
||||
h := http.HandlerFunc(func(rsp http.ResponseWriter, req *http.Request) {
|
||||
if !opts.ProcessStartTime.IsZero() {
|
||||
rsp.Header().Set(processStartTimeHeader, strconv.FormatInt(opts.ProcessStartTime.Unix(), 10))
|
||||
@ -165,21 +190,21 @@ func HandlerForTransactional(reg prometheus.TransactionalGatherer, opts HandlerO
|
||||
} else {
|
||||
contentType = expfmt.Negotiate(req.Header)
|
||||
}
|
||||
header := rsp.Header()
|
||||
header.Set(contentTypeHeader, string(contentType))
|
||||
rsp.Header().Set(contentTypeHeader, string(contentType))
|
||||
|
||||
w := io.Writer(rsp)
|
||||
if !opts.DisableCompression && gzipAccepted(req.Header) {
|
||||
header.Set(contentEncodingHeader, "gzip")
|
||||
gz := gzipPool.Get().(*gzip.Writer)
|
||||
defer gzipPool.Put(gz)
|
||||
|
||||
gz.Reset(w)
|
||||
defer gz.Close()
|
||||
|
||||
w = gz
|
||||
w, encodingHeader, closeWriter, err := negotiateEncodingWriter(req, rsp, compressions)
|
||||
if err != nil {
|
||||
if opts.ErrorLog != nil {
|
||||
opts.ErrorLog.Println("error getting writer", err)
|
||||
}
|
||||
w = io.Writer(rsp)
|
||||
encodingHeader = string(Identity)
|
||||
}
|
||||
|
||||
defer closeWriter()
|
||||
|
||||
rsp.Header().Set(contentEncodingHeader, encodingHeader)
|
||||
|
||||
enc := expfmt.NewEncoder(w, contentType)
|
||||
|
||||
// handleError handles the error according to opts.ErrorHandling
|
||||
@ -343,9 +368,19 @@ type HandlerOpts struct {
|
||||
// no effect on the HTTP status code because ErrorHandling is set to
|
||||
// ContinueOnError.
|
||||
Registry prometheus.Registerer
|
||||
// If DisableCompression is true, the handler will never compress the
|
||||
// response, even if requested by the client.
|
||||
// DisableCompression disables the response encoding (compression) and
|
||||
// encoding negotiation. If true, the handler will
|
||||
// never compress the response, even if requested
|
||||
// by the client and the OfferedCompressions field is set.
|
||||
DisableCompression bool
|
||||
// OfferedCompressions is a set of encodings (compressions) handler will
|
||||
// try to offer when negotiating with the client. This defaults to identity, gzip
|
||||
// and zstd.
|
||||
// NOTE: If handler can't agree with the client on the encodings or
|
||||
// unsupported or empty encodings are set in OfferedCompressions,
|
||||
// handler always fallbacks to no compression (identity), for
|
||||
// compatibility reasons. In such cases ErrorLog will be used if set.
|
||||
OfferedCompressions []Compression
|
||||
// The number of concurrent HTTP requests is limited to
|
||||
// MaxRequestsInFlight. Additional requests are responded to with 503
|
||||
// Service Unavailable and a suitable message in the body. If
|
||||
@ -381,19 +416,6 @@ type HandlerOpts struct {
|
||||
ProcessStartTime time.Time
|
||||
}
|
||||
|
||||
// gzipAccepted returns whether the client will accept gzip-encoded content.
|
||||
func gzipAccepted(header http.Header) bool {
|
||||
a := header.Get(acceptEncodingHeader)
|
||||
parts := strings.Split(a, ",")
|
||||
for _, part := range parts {
|
||||
part = strings.TrimSpace(part)
|
||||
if part == "gzip" || strings.HasPrefix(part, "gzip;") {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// httpError removes any content-encoding header and then calls http.Error with
|
||||
// the provided error and http.StatusInternalServerError. Error contents is
|
||||
// supposed to be uncompressed plain text. Same as with a plain http.Error, this
|
||||
@ -406,3 +428,38 @@ func httpError(rsp http.ResponseWriter, err error) {
|
||||
http.StatusInternalServerError,
|
||||
)
|
||||
}
|
||||
|
||||
// negotiateEncodingWriter reads the Accept-Encoding header from a request and
|
||||
// selects the right compression based on an allow-list of supported
|
||||
// compressions. It returns a writer implementing the compression and an the
|
||||
// correct value that the caller can set in the response header.
|
||||
func negotiateEncodingWriter(r *http.Request, rw io.Writer, compressions []string) (_ io.Writer, encodingHeaderValue string, closeWriter func(), _ error) {
|
||||
if len(compressions) == 0 {
|
||||
return rw, string(Identity), func() {}, nil
|
||||
}
|
||||
|
||||
// TODO(mrueg): Replace internal/github.com/gddo once https://github.com/golang/go/issues/19307 is implemented.
|
||||
selected := httputil.NegotiateContentEncoding(r, compressions)
|
||||
|
||||
switch selected {
|
||||
case "zstd":
|
||||
// TODO(mrueg): Replace klauspost/compress with stdlib implementation once https://github.com/golang/go/issues/62513 is implemented.
|
||||
z, err := zstd.NewWriter(rw, zstd.WithEncoderLevel(zstd.SpeedFastest))
|
||||
if err != nil {
|
||||
return nil, "", func() {}, err
|
||||
}
|
||||
|
||||
z.Reset(rw)
|
||||
return z, selected, func() { _ = z.Close() }, nil
|
||||
case "gzip":
|
||||
gz := gzipPool.Get().(*gzip.Writer)
|
||||
gz.Reset(rw)
|
||||
return gz, selected, func() { _ = gz.Close(); gzipPool.Put(gz) }, nil
|
||||
case "identity":
|
||||
// This means the content is not compressed.
|
||||
return rw, selected, func() {}, nil
|
||||
default:
|
||||
// The content encoding was not implemented yet.
|
||||
return nil, "", func() {}, fmt.Errorf("content compression format not recognized: %s. Valid formats are: %s", selected, defaultCompressionFormats)
|
||||
}
|
||||
}
|
||||
|
||||
19
vendor/github.com/prometheus/client_golang/prometheus/registry.go
generated
vendored
19
vendor/github.com/prometheus/client_golang/prometheus/registry.go
generated
vendored
@ -314,16 +314,17 @@ func (r *Registry) Register(c Collector) error {
|
||||
if dimHash != desc.dimHash {
|
||||
return fmt.Errorf("a previously registered descriptor with the same fully-qualified name as %s has different label names or a different help string", desc)
|
||||
}
|
||||
} else {
|
||||
// ...then check the new descriptors already seen.
|
||||
if dimHash, exists := newDimHashesByName[desc.fqName]; exists {
|
||||
if dimHash != desc.dimHash {
|
||||
return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc)
|
||||
}
|
||||
} else {
|
||||
newDimHashesByName[desc.fqName] = desc.dimHash
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
// ...then check the new descriptors already seen.
|
||||
if dimHash, exists := newDimHashesByName[desc.fqName]; exists {
|
||||
if dimHash != desc.dimHash {
|
||||
return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc)
|
||||
}
|
||||
continue
|
||||
}
|
||||
newDimHashesByName[desc.fqName] = desc.dimHash
|
||||
}
|
||||
// A Collector yielding no Desc at all is considered unchecked.
|
||||
if len(newDescIDs) == 0 {
|
||||
|
||||
42
vendor/github.com/prometheus/client_golang/prometheus/summary.go
generated
vendored
42
vendor/github.com/prometheus/client_golang/prometheus/summary.go
generated
vendored
@ -783,3 +783,45 @@ func MustNewConstSummary(
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
// NewConstSummaryWithCreatedTimestamp does the same thing as NewConstSummary but sets the created timestamp.
|
||||
func NewConstSummaryWithCreatedTimestamp(
|
||||
desc *Desc,
|
||||
count uint64,
|
||||
sum float64,
|
||||
quantiles map[float64]float64,
|
||||
ct time.Time,
|
||||
labelValues ...string,
|
||||
) (Metric, error) {
|
||||
if desc.err != nil {
|
||||
return nil, desc.err
|
||||
}
|
||||
if err := validateLabelValues(labelValues, len(desc.variableLabels.names)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &constSummary{
|
||||
desc: desc,
|
||||
count: count,
|
||||
sum: sum,
|
||||
quantiles: quantiles,
|
||||
labelPairs: MakeLabelPairs(desc, labelValues),
|
||||
createdTs: timestamppb.New(ct),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// MustNewConstSummaryWithCreatedTimestamp is a version of NewConstSummaryWithCreatedTimestamp that panics where
|
||||
// NewConstSummaryWithCreatedTimestamp would have returned an error.
|
||||
func MustNewConstSummaryWithCreatedTimestamp(
|
||||
desc *Desc,
|
||||
count uint64,
|
||||
sum float64,
|
||||
quantiles map[float64]float64,
|
||||
ct time.Time,
|
||||
labelValues ...string,
|
||||
) Metric {
|
||||
m, err := NewConstSummaryWithCreatedTimestamp(desc, count, sum, quantiles, ct, labelValues...)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
2
vendor/github.com/prometheus/client_golang/prometheus/vec.go
generated
vendored
2
vendor/github.com/prometheus/client_golang/prometheus/vec.go
generated
vendored
@ -507,7 +507,7 @@ func (m *metricMap) getOrCreateMetricWithLabelValues(
|
||||
return metric
|
||||
}
|
||||
|
||||
// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value
|
||||
// getOrCreateMetricWithLabels retrieves the metric by hash and label value
|
||||
// or creates it and returns the new one.
|
||||
//
|
||||
// This function holds the mutex.
|
||||
|
||||
1
vendor/github.com/zeebo/blake3/.gitignore
generated
vendored
1
vendor/github.com/zeebo/blake3/.gitignore
generated
vendored
@ -4,3 +4,4 @@
|
||||
*.out
|
||||
|
||||
/upstream
|
||||
/go.work
|
||||
|
||||
19
vendor/github.com/zeebo/blake3/Makefile
generated
vendored
19
vendor/github.com/zeebo/blake3/Makefile
generated
vendored
@ -21,14 +21,11 @@ test:
|
||||
|
||||
.PHONY: vet
|
||||
vet:
|
||||
GOOS=linux GOARCH=386 GO386=softfloat go vet ./...
|
||||
GOOS=windows GOARCH=386 GO386=softfloat go vet ./...
|
||||
GOOS=linux GOARCH=amd64 go vet ./...
|
||||
GOOS=windows GOARCH=amd64 go vet ./...
|
||||
GOOS=darwin GOARCH=amd64 go vet ./...
|
||||
GOOS=linux GOARCH=arm go vet ./...
|
||||
GOOS=linux GOARCH=arm64 go vet ./...
|
||||
GOOS=windows GOARCH=arm64 go vet ./...
|
||||
GOOS=darwin GOARCH=arm64 go vet ./...
|
||||
GOOS=js GOARCH=wasm go vet ./...
|
||||
GOOS=linux GOARCH=mips go vet ./...
|
||||
go tool dist list \
|
||||
| sed -e 's#/# #g' \
|
||||
| while read goos goarch; \
|
||||
do \
|
||||
echo $$goos $$goarch; \
|
||||
GOOS=$$goos GOARCH=$$goarch CGO_ENABLED=1 GO386=softfloat go vet ./...; \
|
||||
GOOS=$$goos GOARCH=$$goarch CGO_ENABLED=1 GO386=softfloat go vet -tags=purego ./...; \
|
||||
done
|
||||
|
||||
2
vendor/github.com/zeebo/blake3/digest.go
generated
vendored
2
vendor/github.com/zeebo/blake3/digest.go
generated
vendored
@ -22,7 +22,7 @@ type Digest struct {
|
||||
bufn int
|
||||
}
|
||||
|
||||
// Read reads data frm the hasher into out. It always fills the entire buffer and
|
||||
// Read reads data from the hasher into out. It always fills the entire buffer and
|
||||
// never errors. The stream will wrap around when reading past 2^64 bytes.
|
||||
func (d *Digest) Read(p []byte) (n int, err error) {
|
||||
n = len(p)
|
||||
|
||||
2
vendor/github.com/zeebo/blake3/internal/consts/cpu.go
generated
vendored
2
vendor/github.com/zeebo/blake3/internal/consts/cpu.go
generated
vendored
@ -1,3 +1,5 @@
|
||||
//go:build !purego
|
||||
|
||||
package consts
|
||||
|
||||
import (
|
||||
|
||||
8
vendor/github.com/zeebo/blake3/internal/consts/cpu_purego.go
generated
vendored
Normal file
8
vendor/github.com/zeebo/blake3/internal/consts/cpu_purego.go
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
//go:build purego
|
||||
|
||||
package consts
|
||||
|
||||
const (
|
||||
HasAVX2 = false
|
||||
HasSSE41 = false
|
||||
)
|
||||
4
vendor/golang.org/x/crypto/LICENSE
generated
vendored
4
vendor/golang.org/x/crypto/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
Copyright 2009 The Go Authors.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
* Neither the name of Google LLC nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
|
||||
5777
vendor/golang.org/x/crypto/sha3/keccakf_amd64.s
generated
vendored
5777
vendor/golang.org/x/crypto/sha3/keccakf_amd64.s
generated
vendored
File diff suppressed because it is too large
Load Diff
4
vendor/golang.org/x/mod/LICENSE
generated
vendored
4
vendor/golang.org/x/mod/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
Copyright 2009 The Go Authors.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
* Neither the name of Google LLC nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
|
||||
4
vendor/golang.org/x/net/LICENSE
generated
vendored
4
vendor/golang.org/x/net/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
Copyright 2009 The Go Authors.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
* Neither the name of Google LLC nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
|
||||
4
vendor/golang.org/x/sync/LICENSE
generated
vendored
4
vendor/golang.org/x/sync/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
Copyright 2009 The Go Authors.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
* Neither the name of Google LLC nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
|
||||
4
vendor/golang.org/x/sys/LICENSE
generated
vendored
4
vendor/golang.org/x/sys/LICENSE
generated
vendored
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
Copyright 2009 The Go Authors.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer.
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
* Neither the name of Google LLC nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
|
||||
2
vendor/golang.org/x/sys/cpu/cpu.go
generated
vendored
2
vendor/golang.org/x/sys/cpu/cpu.go
generated
vendored
@ -105,6 +105,8 @@ var ARM64 struct {
|
||||
HasSVE bool // Scalable Vector Extensions
|
||||
HasSVE2 bool // Scalable Vector Extensions 2
|
||||
HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32
|
||||
HasDIT bool // Data Independent Timing support
|
||||
HasI8MM bool // Advanced SIMD Int8 matrix multiplication instructions
|
||||
_ CacheLinePad
|
||||
}
|
||||
|
||||
|
||||
12
vendor/golang.org/x/sys/cpu/cpu_arm64.go
generated
vendored
12
vendor/golang.org/x/sys/cpu/cpu_arm64.go
generated
vendored
@ -38,6 +38,8 @@ func initOptions() {
|
||||
{Name: "dcpop", Feature: &ARM64.HasDCPOP},
|
||||
{Name: "asimddp", Feature: &ARM64.HasASIMDDP},
|
||||
{Name: "asimdfhm", Feature: &ARM64.HasASIMDFHM},
|
||||
{Name: "dit", Feature: &ARM64.HasDIT},
|
||||
{Name: "i8mm", Feature: &ARM64.HasI8MM},
|
||||
}
|
||||
}
|
||||
|
||||
@ -145,6 +147,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {
|
||||
ARM64.HasLRCPC = true
|
||||
}
|
||||
|
||||
switch extractBits(isar1, 52, 55) {
|
||||
case 1:
|
||||
ARM64.HasI8MM = true
|
||||
}
|
||||
|
||||
// ID_AA64PFR0_EL1
|
||||
switch extractBits(pfr0, 16, 19) {
|
||||
case 0:
|
||||
@ -168,6 +175,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) {
|
||||
|
||||
parseARM64SVERegister(getzfr0())
|
||||
}
|
||||
|
||||
switch extractBits(pfr0, 48, 51) {
|
||||
case 1:
|
||||
ARM64.HasDIT = true
|
||||
}
|
||||
}
|
||||
|
||||
func parseARM64SVERegister(zfr0 uint64) {
|
||||
|
||||
5
vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
generated
vendored
5
vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go
generated
vendored
@ -35,8 +35,10 @@ const (
|
||||
hwcap_SHA512 = 1 << 21
|
||||
hwcap_SVE = 1 << 22
|
||||
hwcap_ASIMDFHM = 1 << 23
|
||||
hwcap_DIT = 1 << 24
|
||||
|
||||
hwcap2_SVE2 = 1 << 1
|
||||
hwcap2_I8MM = 1 << 13
|
||||
)
|
||||
|
||||
// linuxKernelCanEmulateCPUID reports whether we're running
|
||||
@ -106,9 +108,12 @@ func doinit() {
|
||||
ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512)
|
||||
ARM64.HasSVE = isSet(hwCap, hwcap_SVE)
|
||||
ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM)
|
||||
ARM64.HasDIT = isSet(hwCap, hwcap_DIT)
|
||||
|
||||
|
||||
// HWCAP2 feature bits
|
||||
ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2)
|
||||
ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM)
|
||||
}
|
||||
|
||||
func isSet(hwc uint, value uint) bool {
|
||||
|
||||
1
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
1
vendor/golang.org/x/sys/unix/mkerrors.sh
generated
vendored
@ -58,6 +58,7 @@ includes_Darwin='
|
||||
#define _DARWIN_USE_64_BIT_INODE
|
||||
#define __APPLE_USE_RFC_3542
|
||||
#include <stdint.h>
|
||||
#include <sys/stdio.h>
|
||||
#include <sys/attr.h>
|
||||
#include <sys/clonefile.h>
|
||||
#include <sys/kern_control.h>
|
||||
|
||||
12
vendor/golang.org/x/sys/unix/syscall_darwin.go
generated
vendored
12
vendor/golang.org/x/sys/unix/syscall_darwin.go
generated
vendored
@ -402,6 +402,18 @@ func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error {
|
||||
return ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq))
|
||||
}
|
||||
|
||||
//sys renamexNp(from string, to string, flag uint32) (err error)
|
||||
|
||||
func RenamexNp(from string, to string, flag uint32) (err error) {
|
||||
return renamexNp(from, to, flag)
|
||||
}
|
||||
|
||||
//sys renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error)
|
||||
|
||||
func RenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {
|
||||
return renameatxNp(fromfd, from, tofd, to, flag)
|
||||
}
|
||||
|
||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL
|
||||
|
||||
func Uname(uname *Utsname) error {
|
||||
|
||||
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
1
vendor/golang.org/x/sys/unix/syscall_linux.go
generated
vendored
@ -2592,3 +2592,4 @@ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) {
|
||||
}
|
||||
|
||||
//sys Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error)
|
||||
//sys Mseal(b []byte, flags uint) (err error)
|
||||
|
||||
1
vendor/golang.org/x/sys/unix/syscall_openbsd.go
generated
vendored
1
vendor/golang.org/x/sys/unix/syscall_openbsd.go
generated
vendored
@ -293,6 +293,7 @@ func Uname(uname *Utsname) error {
|
||||
//sys Mkfifoat(dirfd int, path string, mode uint32) (err error)
|
||||
//sys Mknod(path string, mode uint32, dev int) (err error)
|
||||
//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error)
|
||||
//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error)
|
||||
//sys Nanosleep(time *Timespec, leftover *Timespec) (err error)
|
||||
//sys Open(path string, mode int, perm uint32) (fd int, err error)
|
||||
//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error)
|
||||
|
||||
5
vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
generated
vendored
5
vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go
generated
vendored
@ -1169,6 +1169,11 @@ const (
|
||||
PT_WRITE_D = 0x5
|
||||
PT_WRITE_I = 0x4
|
||||
PT_WRITE_U = 0x6
|
||||
RENAME_EXCL = 0x4
|
||||
RENAME_NOFOLLOW_ANY = 0x10
|
||||
RENAME_RESERVED1 = 0x8
|
||||
RENAME_SECLUDE = 0x1
|
||||
RENAME_SWAP = 0x2
|
||||
RLIMIT_AS = 0x5
|
||||
RLIMIT_CORE = 0x4
|
||||
RLIMIT_CPU = 0x0
|
||||
|
||||
5
vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
generated
vendored
5
vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go
generated
vendored
@ -1169,6 +1169,11 @@ const (
|
||||
PT_WRITE_D = 0x5
|
||||
PT_WRITE_I = 0x4
|
||||
PT_WRITE_U = 0x6
|
||||
RENAME_EXCL = 0x4
|
||||
RENAME_NOFOLLOW_ANY = 0x10
|
||||
RENAME_RESERVED1 = 0x8
|
||||
RENAME_SECLUDE = 0x1
|
||||
RENAME_SWAP = 0x2
|
||||
RLIMIT_AS = 0x5
|
||||
RLIMIT_CORE = 0x4
|
||||
RLIMIT_CPU = 0x0
|
||||
|
||||
38
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
38
vendor/golang.org/x/sys/unix/zerrors_linux.go
generated
vendored
@ -457,6 +457,7 @@ const (
|
||||
B600 = 0x8
|
||||
B75 = 0x2
|
||||
B9600 = 0xd
|
||||
BCACHEFS_SUPER_MAGIC = 0xca451a4e
|
||||
BDEVFS_MAGIC = 0x62646576
|
||||
BINDERFS_SUPER_MAGIC = 0x6c6f6f70
|
||||
BINFMTFS_MAGIC = 0x42494e4d
|
||||
@ -928,6 +929,7 @@ const (
|
||||
EPOLL_CTL_ADD = 0x1
|
||||
EPOLL_CTL_DEL = 0x2
|
||||
EPOLL_CTL_MOD = 0x3
|
||||
EPOLL_IOC_TYPE = 0x8a
|
||||
EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2
|
||||
ESP_V4_FLOW = 0xa
|
||||
ESP_V6_FLOW = 0xc
|
||||
@ -941,9 +943,6 @@ const (
|
||||
ETHTOOL_FEC_OFF = 0x4
|
||||
ETHTOOL_FEC_RS = 0x8
|
||||
ETHTOOL_FLAG_ALL = 0x7
|
||||
ETHTOOL_FLAG_COMPACT_BITSETS = 0x1
|
||||
ETHTOOL_FLAG_OMIT_REPLY = 0x2
|
||||
ETHTOOL_FLAG_STATS = 0x4
|
||||
ETHTOOL_FLASHDEV = 0x33
|
||||
ETHTOOL_FLASH_MAX_FILENAME = 0x80
|
||||
ETHTOOL_FWVERS_LEN = 0x20
|
||||
@ -1705,6 +1704,7 @@ const (
|
||||
KEXEC_ARCH_S390 = 0x160000
|
||||
KEXEC_ARCH_SH = 0x2a0000
|
||||
KEXEC_ARCH_X86_64 = 0x3e0000
|
||||
KEXEC_CRASH_HOTPLUG_SUPPORT = 0x8
|
||||
KEXEC_FILE_DEBUG = 0x8
|
||||
KEXEC_FILE_NO_INITRAMFS = 0x4
|
||||
KEXEC_FILE_ON_CRASH = 0x2
|
||||
@ -1780,6 +1780,7 @@ const (
|
||||
KEY_SPEC_USER_KEYRING = -0x4
|
||||
KEY_SPEC_USER_SESSION_KEYRING = -0x5
|
||||
LANDLOCK_ACCESS_FS_EXECUTE = 0x1
|
||||
LANDLOCK_ACCESS_FS_IOCTL_DEV = 0x8000
|
||||
LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800
|
||||
LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40
|
||||
LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80
|
||||
@ -1861,6 +1862,19 @@ const (
|
||||
MAP_FILE = 0x0
|
||||
MAP_FIXED = 0x10
|
||||
MAP_FIXED_NOREPLACE = 0x100000
|
||||
MAP_HUGE_16GB = 0x88000000
|
||||
MAP_HUGE_16KB = 0x38000000
|
||||
MAP_HUGE_16MB = 0x60000000
|
||||
MAP_HUGE_1GB = 0x78000000
|
||||
MAP_HUGE_1MB = 0x50000000
|
||||
MAP_HUGE_256MB = 0x70000000
|
||||
MAP_HUGE_2GB = 0x7c000000
|
||||
MAP_HUGE_2MB = 0x54000000
|
||||
MAP_HUGE_32MB = 0x64000000
|
||||
MAP_HUGE_512KB = 0x4c000000
|
||||
MAP_HUGE_512MB = 0x74000000
|
||||
MAP_HUGE_64KB = 0x40000000
|
||||
MAP_HUGE_8MB = 0x5c000000
|
||||
MAP_HUGE_MASK = 0x3f
|
||||
MAP_HUGE_SHIFT = 0x1a
|
||||
MAP_PRIVATE = 0x2
|
||||
@ -2498,6 +2512,23 @@ const (
|
||||
PR_PAC_GET_ENABLED_KEYS = 0x3d
|
||||
PR_PAC_RESET_KEYS = 0x36
|
||||
PR_PAC_SET_ENABLED_KEYS = 0x3c
|
||||
PR_PPC_DEXCR_CTRL_CLEAR = 0x4
|
||||
PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10
|
||||
PR_PPC_DEXCR_CTRL_EDITABLE = 0x1
|
||||
PR_PPC_DEXCR_CTRL_MASK = 0x1f
|
||||
PR_PPC_DEXCR_CTRL_SET = 0x2
|
||||
PR_PPC_DEXCR_CTRL_SET_ONEXEC = 0x8
|
||||
PR_PPC_DEXCR_IBRTPD = 0x1
|
||||
PR_PPC_DEXCR_NPHIE = 0x3
|
||||
PR_PPC_DEXCR_SBHE = 0x0
|
||||
PR_PPC_DEXCR_SRAPD = 0x2
|
||||
PR_PPC_GET_DEXCR = 0x48
|
||||
PR_PPC_SET_DEXCR = 0x49
|
||||
PR_RISCV_CTX_SW_FENCEI_OFF = 0x1
|
||||
PR_RISCV_CTX_SW_FENCEI_ON = 0x0
|
||||
PR_RISCV_SCOPE_PER_PROCESS = 0x0
|
||||
PR_RISCV_SCOPE_PER_THREAD = 0x1
|
||||
PR_RISCV_SET_ICACHE_FLUSH_CTX = 0x47
|
||||
PR_RISCV_V_GET_CONTROL = 0x46
|
||||
PR_RISCV_V_SET_CONTROL = 0x45
|
||||
PR_RISCV_V_VSTATE_CTRL_CUR_MASK = 0x3
|
||||
@ -3192,6 +3223,7 @@ const (
|
||||
STATX_MTIME = 0x40
|
||||
STATX_NLINK = 0x4
|
||||
STATX_SIZE = 0x200
|
||||
STATX_SUBVOL = 0x8000
|
||||
STATX_TYPE = 0x1
|
||||
STATX_UID = 0x8
|
||||
STATX__RESERVED = 0x80000000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_386.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x80088a02
|
||||
EPIOCSPARAMS = 0x40088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x80088a02
|
||||
EPIOCSPARAMS = 0x40088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_arm.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x80088a02
|
||||
EPIOCSPARAMS = 0x40088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x80088a02
|
||||
EPIOCSPARAMS = 0x40088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
ESR_MAGIC = 0x45535201
|
||||
EXTPROC = 0x10000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x80088a02
|
||||
EPIOCSPARAMS = 0x40088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_mips.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x80
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x80
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x80
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x80
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x20
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000000
|
||||
FF1 = 0x4000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x20
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000000
|
||||
FF1 = 0x4000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x20
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000000
|
||||
FF1 = 0x4000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x80088a02
|
||||
EPIOCSPARAMS = 0x40088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go
generated
vendored
@ -78,6 +78,8 @@ const (
|
||||
ECHOPRT = 0x400
|
||||
EFD_CLOEXEC = 0x80000
|
||||
EFD_NONBLOCK = 0x800
|
||||
EPIOCGPARAMS = 0x80088a02
|
||||
EPIOCSPARAMS = 0x40088a01
|
||||
EPOLL_CLOEXEC = 0x80000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
2
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
generated
vendored
2
vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go
generated
vendored
@ -82,6 +82,8 @@ const (
|
||||
EFD_CLOEXEC = 0x400000
|
||||
EFD_NONBLOCK = 0x4000
|
||||
EMT_TAGOVF = 0x1
|
||||
EPIOCGPARAMS = 0x40088a02
|
||||
EPIOCSPARAMS = 0x80088a01
|
||||
EPOLL_CLOEXEC = 0x400000
|
||||
EXTPROC = 0x10000
|
||||
FF1 = 0x8000
|
||||
|
||||
48
vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
generated
vendored
48
vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
generated
vendored
@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func renamexNp(from string, to string, flag uint32) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(from)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(to)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_renamex_np_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(from)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(to)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_renameatx_np_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(mib) > 0 {
|
||||
|
||||
10
vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
generated
vendored
10
vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
generated
vendored
@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||
GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)
|
||||
|
||||
TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_renamex_np(SB)
|
||||
GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB)
|
||||
|
||||
TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_renameatx_np(SB)
|
||||
GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB)
|
||||
|
||||
TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_sysctl(SB)
|
||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||
|
||||
48
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
generated
vendored
48
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
generated
vendored
@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func renamexNp(from string, to string, flag uint32) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(from)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(to)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_renamex_np_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(from)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(to)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_renameatx_np_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(mib) > 0 {
|
||||
|
||||
10
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
generated
vendored
10
vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
generated
vendored
@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||
GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)
|
||||
|
||||
TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_renamex_np(SB)
|
||||
GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB)
|
||||
|
||||
TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_renameatx_np(SB)
|
||||
GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB)
|
||||
|
||||
TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_sysctl(SB)
|
||||
GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8
|
||||
|
||||
16
vendor/golang.org/x/sys/unix/zsyscall_linux.go
generated
vendored
16
vendor/golang.org/x/sys/unix/zsyscall_linux.go
generated
vendored
@ -2229,3 +2229,19 @@ func Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Mseal(b []byte, flags uint) (err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(b) > 0 {
|
||||
_p0 = unsafe.Pointer(&b[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
_, _, e1 := Syscall(SYS_MSEAL, uintptr(_p0), uintptr(len(b)), uintptr(flags))
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
generated
vendored
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go
generated
vendored
@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(fsType)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_mount_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_mount mount "libc.so"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
|
||||
if e1 != 0 {
|
||||
|
||||
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s
generated
vendored
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s
generated
vendored
@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
|
||||
GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4
|
||||
DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)
|
||||
|
||||
TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_mount(SB)
|
||||
GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4
|
||||
DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB)
|
||||
|
||||
TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_nanosleep(SB)
|
||||
GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4
|
||||
|
||||
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
generated
vendored
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go
generated
vendored
@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(fsType)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_mount_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_mount mount "libc.so"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
|
||||
if e1 != 0 {
|
||||
|
||||
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s
generated
vendored
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s
generated
vendored
@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
|
||||
GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)
|
||||
|
||||
TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_mount(SB)
|
||||
GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)
|
||||
|
||||
TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_nanosleep(SB)
|
||||
GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8
|
||||
|
||||
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
generated
vendored
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
generated
vendored
@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(fsType)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_mount_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_mount mount "libc.so"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
|
||||
if e1 != 0 {
|
||||
|
||||
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s
generated
vendored
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s
generated
vendored
@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
|
||||
GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4
|
||||
DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)
|
||||
|
||||
TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_mount(SB)
|
||||
GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4
|
||||
DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB)
|
||||
|
||||
TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_nanosleep(SB)
|
||||
GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4
|
||||
|
||||
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go
generated
vendored
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go
generated
vendored
@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(fsType)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_mount_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_mount mount "libc.so"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
|
||||
if e1 != 0 {
|
||||
|
||||
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s
generated
vendored
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s
generated
vendored
@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
|
||||
GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)
|
||||
|
||||
TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_mount(SB)
|
||||
GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)
|
||||
|
||||
TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_nanosleep(SB)
|
||||
GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8
|
||||
|
||||
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go
generated
vendored
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go
generated
vendored
@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(fsType)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_mount_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_mount mount "libc.so"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
|
||||
if e1 != 0 {
|
||||
|
||||
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s
generated
vendored
5
vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s
generated
vendored
@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
|
||||
GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)
|
||||
|
||||
TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_mount(SB)
|
||||
GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8
|
||||
DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)
|
||||
|
||||
TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
|
||||
JMP libc_nanosleep(SB)
|
||||
GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8
|
||||
|
||||
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go
generated
vendored
24
vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go
generated
vendored
@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(fsType)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(dir)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
var libc_mount_trampoline_addr uintptr
|
||||
|
||||
//go:cgo_import_dynamic libc_mount mount "libc.so"
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
|
||||
if e1 != 0 {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user